@hmcts/ccpay-web-component 3.0.30 → 3.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hmcts-ccpay-web-component.umd.js +8 -56
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/lib/components/add-remission/add-remission.component.js +1 -13
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +9 -20
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +15 -71
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +1 -17
- package/esm2015/lib/payment-lib.component.js +3 -15
- package/esm5/lib/components/add-remission/add-remission.component.js +1 -13
- package/esm5/lib/components/case-transactions/case-transactions.component.js +2 -10
- package/esm5/lib/components/fee-summary/fee-summary.component.js +5 -35
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +1 -17
- package/esm5/lib/payment-lib.component.js +3 -13
- package/fesm2015/hmcts-ccpay-web-component.js +25 -104
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +8 -56
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +0 -2
- package/lib/components/case-transactions/case-transactions.component.d.ts +0 -2
- package/lib/components/fee-summary/fee-summary.component.d.ts +0 -2
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -4
- package/lib/payment-lib.component.d.ts +0 -4
- package/package.json +1 -1
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
PaymentLibComponent.decorators = [
|
|
101
101
|
{ type: i0.Component, args: [{
|
|
102
102
|
selector: 'ccpay-payment-lib',
|
|
103
|
-
template: "\n <ccpay-payment-list *ngIf=\"viewName === 'payment-list'\"></ccpay-payment-list>\n <ccpay-payment-view *ngIf=\"viewName === 'payment-view'\"\n [isTurnOff]=\"ISTURNOFF\"></ccpay-payment-view>\n <ccpay-case-transactions *ngIf=\"viewName === 'case-transactions'\"></ccpay-case-transactions>\n <app-mark-unidentified-payment *ngIf=\"viewName === 'unidentifiedPage'\"\n [caseType]=\"CASETYPE\"></app-mark-unidentified-payment>\n <app-mark-unsolicited-payment *ngIf=\"viewName === 'unsolicitedPage'\"\n [caseType]=\"CASETYPE\"></app-mark-unsolicited-payment>\n <app-allocate-payments *ngIf=\"viewName === 'allocate-payments'\"\n [isTurnOff]=\"ISTURNOFF\"\n [caseType]=\"CASETYPE\"\n ></app-allocate-payments>\n <ccpay-fee-summary *ngIf=\"viewName === 'fee-summary'\"\n [ccdCaseNumber]=\"CCD_CASE_NUMBER\"
|
|
103
|
+
template: "\n <ccpay-payment-list *ngIf=\"viewName === 'payment-list'\"></ccpay-payment-list>\n <ccpay-payment-view *ngIf=\"viewName === 'payment-view'\"\n [isTurnOff]=\"ISTURNOFF\"></ccpay-payment-view>\n <ccpay-case-transactions *ngIf=\"viewName === 'case-transactions'\"></ccpay-case-transactions>\n <app-mark-unidentified-payment *ngIf=\"viewName === 'unidentifiedPage'\"\n [caseType]=\"CASETYPE\"></app-mark-unidentified-payment>\n <app-mark-unsolicited-payment *ngIf=\"viewName === 'unsolicitedPage'\"\n [caseType]=\"CASETYPE\"></app-mark-unsolicited-payment>\n <app-allocate-payments *ngIf=\"viewName === 'allocate-payments'\"\n [isTurnOff]=\"ISTURNOFF\"\n [caseType]=\"CASETYPE\"\n ></app-allocate-payments>\n <ccpay-fee-summary *ngIf=\"viewName === 'fee-summary'\"\n [ccdCaseNumber]=\"CCD_CASE_NUMBER\"\n [paymentGroupRef]=\"paymentGroupReference\"\n [isTurnOff]=\"ISTURNOFF\"\n [caseType]=\"CASETYPE\"\n ></ccpay-fee-summary>\n <ccpay-reports *ngIf=\"viewName === 'reports'\"></ccpay-reports>\n "
|
|
104
104
|
},] },
|
|
105
105
|
];
|
|
106
106
|
/** @nocollapse */
|
|
@@ -123,9 +123,7 @@
|
|
|
123
123
|
ISBSENABLE: [{ type: i0.Input, args: ['ISBSENABLE',] }],
|
|
124
124
|
ISSFENABLE: [{ type: i0.Input, args: ['ISSFENABLE',] }],
|
|
125
125
|
ISTURNOFF: [{ type: i0.Input, args: ['ISTURNOFF',] }],
|
|
126
|
-
CASETYPE: [{ type: i0.Input, args: ['CASETYPE',] }]
|
|
127
|
-
ISOLDPCIPALOFF: [{ type: i0.Input, args: ['ISOLDPCIPALOFF',] }],
|
|
128
|
-
ISNEWPCIPALOFF: [{ type: i0.Input, args: ['ISNEWPCIPALOFF',] }]
|
|
126
|
+
CASETYPE: [{ type: i0.Input, args: ['CASETYPE',] }]
|
|
129
127
|
};
|
|
130
128
|
return PaymentLibComponent;
|
|
131
129
|
}());
|
|
@@ -1331,8 +1329,6 @@
|
|
|
1331
1329
|
this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
|
|
1332
1330
|
this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
|
|
1333
1331
|
this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
|
|
1334
|
-
this.isNewPcipalOff = this.paymentLibComponent.ISNEWPCIPALOFF;
|
|
1335
|
-
this.isOldPcipalOff = this.paymentLibComponent.ISOLDPCIPALOFF;
|
|
1336
1332
|
this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
|
|
1337
1333
|
if (!this.isTurnOff) {
|
|
1338
1334
|
if (this.lsCcdNumber !== this.ccdCaseNumber) {
|
|
@@ -1676,8 +1672,6 @@
|
|
|
1676
1672
|
url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
1677
1673
|
url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
1678
1674
|
url += "&caseType=" + this.caseType;
|
|
1679
|
-
url += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
1680
|
-
url += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
1681
1675
|
this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + url);
|
|
1682
1676
|
}
|
|
1683
1677
|
else {
|
|
@@ -1845,7 +1839,7 @@
|
|
|
1845
1839
|
CaseTransactionsComponent.decorators = [
|
|
1846
1840
|
{ type: i0.Component, args: [{
|
|
1847
1841
|
selector: 'ccpay-case-transactions',
|
|
1848
|
-
template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <div *ngIf=\"viewStatus === 'main'&& !isTurnOff && takePayment\">\n\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div> \n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n \n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n</ccpay-app-unprocessed-payments>\n\n<div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-medium\">Processed payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date updated</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_updated | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody>\n </table>\n</div>\n</div>\n\n<input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n </main>\n</div>",
|
|
1842
|
+
template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <div *ngIf=\"viewStatus === 'main'&& !isTurnOff && takePayment\">\n\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n\n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n</ccpay-app-unprocessed-payments>\n\n<div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-medium\">Processed payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date updated</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_updated | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody>\n </table>\n</div>\n</div>\n\n<input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n </main>\n</div>\n",
|
|
1849
1843
|
styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.panel-no--style{border-left-style:none}.col-28{width:28%}.col-15{width:15%}.hmcts-banner>.hmcts-banner__message{font-size:19px;line-height:1.25}.summary-table-font{font-size:36px}"]
|
|
1850
1844
|
},] },
|
|
1851
1845
|
];
|
|
@@ -1957,15 +1951,7 @@
|
|
|
1957
1951
|
this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
|
|
1958
1952
|
this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
|
|
1959
1953
|
this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
|
|
1960
|
-
|
|
1961
|
-
this.platForm = '8x8';
|
|
1962
|
-
}
|
|
1963
|
-
else if ((this.isOldPcipalOff && !this.isNewPcipalOff)) {
|
|
1964
|
-
this.platForm = 'Antenna';
|
|
1965
|
-
}
|
|
1966
|
-
else if ((this.isOldPcipalOff && this.isNewPcipalOff)) {
|
|
1967
|
-
this.platForm = '8x8';
|
|
1968
|
-
}
|
|
1954
|
+
this.platForm = 'Antenna';
|
|
1969
1955
|
this.paymentViewService.getBSfeature().subscribe(function (features) {
|
|
1970
1956
|
/** @type {?} */
|
|
1971
1957
|
var result = JSON.parse(features).filter(function (feature) { return feature.uid === BS_ENABLE_FLAG$1; });
|
|
@@ -2152,8 +2138,6 @@
|
|
|
2152
2138
|
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
2153
2139
|
partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
2154
2140
|
partUrl += "&caseType=" + this.paymentLibComponent.CASETYPE;
|
|
2155
|
-
partUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
2156
|
-
partUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
2157
2141
|
/** @type {?} */
|
|
2158
2142
|
var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=true&" + partUrl;
|
|
2159
2143
|
this.router.navigateByUrl(url);
|
|
@@ -2185,8 +2169,6 @@
|
|
|
2185
2169
|
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
2186
2170
|
partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
2187
2171
|
partUrl += "&caseType=" + this.paymentLibComponent.CASETYPE;
|
|
2188
|
-
partUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
2189
|
-
partUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
2190
2172
|
if (this.viewStatus === 'feeRemovalConfirmation' || this.viewStatus === 'add_remission') {
|
|
2191
2173
|
this.viewStatus = 'main';
|
|
2192
2174
|
return;
|
|
@@ -2208,19 +2190,7 @@
|
|
|
2208
2190
|
var requestBody = new PaymentToPayhubRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType);
|
|
2209
2191
|
/** @type {?} */
|
|
2210
2192
|
var antennaReqBody = new PayhubAntennaRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType);
|
|
2211
|
-
if (this.platForm === '
|
|
2212
|
-
this.paymentViewService.postPaymentToPayHub(requestBody, this.paymentGroupRef).subscribe(function (response) {
|
|
2213
|
-
_this.location.go("payment-history?view=fee-summary");
|
|
2214
|
-
_this.payhubHtml = response;
|
|
2215
|
-
_this.viewStatus = 'payhub_view';
|
|
2216
|
-
_this.isBackButtonEnable = false;
|
|
2217
|
-
}, function (error) {
|
|
2218
|
-
_this.errorMessage = error;
|
|
2219
|
-
_this.isConfirmationBtnDisabled = false;
|
|
2220
|
-
_this.router.navigateByUrl('/pci-pal-failure');
|
|
2221
|
-
});
|
|
2222
|
-
}
|
|
2223
|
-
else if (this.platForm === 'Antenna') {
|
|
2193
|
+
if (this.platForm === 'Antenna') {
|
|
2224
2194
|
this.paymentViewService.postPaymentAntennaToPayHub(antennaReqBody, this.paymentGroupRef).subscribe(function (response) {
|
|
2225
2195
|
_this.isBackButtonEnable = false;
|
|
2226
2196
|
window.location.href = '/makePaymentByTelephoneyProvider';
|
|
@@ -2264,7 +2234,7 @@
|
|
|
2264
2234
|
FeeSummaryComponent.decorators = [
|
|
2265
2235
|
{ type: i0.Component, args: [{
|
|
2266
2236
|
selector: 'ccpay-fee-summary',
|
|
2267
|
-
template: "\n<div class=\"govuk-breadcrumbs\" *ngIf=\"isBackButtonEnable\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"!isTurnOff\">\n <a (click)=\"loadCaseTransactionPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"isTurnOff\">\n <a (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n</div>\n<div class=\"fee-summary\" *ngIf=\"viewStatus === 'main'\">\n <main class=\"govuk-main-wrapper\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEESUMMARY'>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"heading-xlarge\">Fee Summary</h1>\n </div>\n\n\n \u00A0<div\u00A0class=\"govuk-grid-column-one-third\"\u00A0align=\"right\">\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0<button\u00A0 *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[disabled]=\"isPaymentExist\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[ngClass]='isPaymentExist ?\u00A0\"button\u00A0button--disabled govuk-!-margin-right-1\"\u00A0:\u00A0\"button govuk-!-margin-right-1\"'>\n Add a new fee\n </button>\n\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"button\">Add a new fee</a>\t\n </div>\n </div>\n\n\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Payment Group details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <table class=\"govuk-table\" *ngIf=\"!errorMessage && paymentGroup\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Fee Code</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Fee description</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Remission code</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\"></th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n <td class=\"govuk-table__cell\">{{ getRemissionByFeeCode(fee.code)?.hwf_reference }}</td>\n <td class=\"govuk-table__cell grey-text\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Fee amount:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"!isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='isPaymentExist || fee.remissions ? \"disable-link\" : \"\"'>remove fee</a>\n </td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\">remove fee</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"fee.volume && fee.volume > 0\">\n <td class=\"no-border grey-text subcolumn-1\">Volume:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.volume }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Fee total:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Remission amount:</td>\n <td class=\"no-border subcolumn-2\">{{ getRemissionByFeeCode(fee.code)?.hwf_amount? ( getRemissionByFeeCode(fee.code)?.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2') : '-' }}</td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"!isTurnOff\"> \n <a (click)=\"addRemission(fee)\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && !isPaymentExist\">\n Deduct remission\n </a>\n </td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"isTurnOff\"> \n <a (click)=\"addRemission(fee)\" *ngIf=\"getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount\">\n Deduct remission\n </a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Total after remission:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border govuk-!-font-weight-bold subcolumn-1\">Total payment</td>\n <td class=\"no-border subcolumn-2\">{{ totalAfterRemission - outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border govuk-!-font-weight-bold subcolumn-1\">Total outstanding amount</td>\n <td class=\"no-border subcolumn-2\">{{ outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"!bsPaymentDcnNumber && isOldPcipalOff && isNewPcipalOff\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n <div class=\"govuk-form-group govuk-form-group--mg\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <span class=\"govuk-fieldset__heading govuk-fieldset__heading--fz\">\n Which system are you using to take the payment?\n </span>\n </legend>\n <div class=\"govuk-radios govuk-radios--small\">\n <div class=\"govuk-radios__item\">\n <input id=\"changed-name\" class=\"govuk-radios__input\" [(ngModel)]=\"platForm\" type=\"radio\" aria-label=\"8x8\" value=\"8x8\">\t\n <label class=\"govuk-label govuk-radios__label\" for=\"changed-name\">\t\n 8x8\t\n </label>\t\n </div>\t\n <div class=\"govuk-radios__item\">\t\n <input id=\"changed-name-2\" class=\"govuk-radios__input\" [(ngModel)]=\"platForm\" type=\"radio\" aria-label=\"Antenna\" value=\"Antenna\">\t\n <label class=\"govuk-label govuk-radios__label\" for=\"changed-name-2\">\t\n Antenna\t\n </label>\t\n </div>\t\n </div>\t\n </fieldset>\n </div>\n </td>\n </tr>\n </tbody>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border subcolumn-2\"> \n <button *ngIf=\"!bsPaymentDcnNumber\" type=\"submit\" (click)=\"takePayment()\"\n [disabled]=\"totalFee <= 0 || !platForm || isConfirmationBtnDisabled\"\n [ngClass]='totalFee <= 0 || !platForm || isConfirmationBtnDisabled? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'>\n Take payment\n </button>\n <button *ngIf=\"bsPaymentDcnNumber\" type=\"button\" (click)=\"goToAllocatePage(outStandingAmount, isFeeAmountZero)\" class=\"button govuk-!-margin-right-1\">\n <span *ngIf=\"outStandingAmount > 0 || (isFeeAmountZero && outStandingAmount === 0)\">\n Allocate payment\n </span>\n <span *ngIf=\"outStandingAmount < 0 || (!isFeeAmountZero && outStandingAmount === 0)\">\n Continue\n </span>\n </button>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</main>\n</div>\n\n <ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_1'>\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\" \n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(currentFee)\">\n Remove\n </button>\n </form>\n </div>\n </ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'add_remission' && currentFee\"\n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\" \n [isOldPcipalOff]=\"isOldPcipalOff\" \n [isNewPcipalOff]=\"isNewPcipalOff\" \n [fee]=\"currentFee\" \n [caseType]=\"caseType\" \n [ccdCaseNumber]=\"ccdCaseNumber\" \n [paymentGroupRef]=\"paymentGroupRef\" \n (cancelRemission)=\"cancelRemission()\"></ccpay-add-remission>\n <input *ngIf=\"viewStatus === 'payhub_view' && payhubHtml\" #myInput type='hidden' id='iFrameDrivenImageValue' value='PCIPAL'>\n<div *ngIf=\"viewStatus === 'payhub_view' && payhubHtml\" [innerHTML]=\"payhubHtml | sanitizeHtml\" id=\"payhub-html-id\"></div>\n",
|
|
2237
|
+
template: "\n<div class=\"govuk-breadcrumbs\" *ngIf=\"isBackButtonEnable\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"!isTurnOff\">\n <a (click)=\"loadCaseTransactionPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"isTurnOff\">\n <a (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n</div>\n<div class=\"fee-summary\" *ngIf=\"viewStatus === 'main'\">\n <main class=\"govuk-main-wrapper\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEESUMMARY'>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"heading-xlarge\">Fee Summary</h1>\n </div>\n\n\n \u00A0<div\u00A0class=\"govuk-grid-column-one-third\"\u00A0align=\"right\">\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0<button\u00A0 *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[disabled]=\"isPaymentExist\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[ngClass]='isPaymentExist ?\u00A0\"button\u00A0button--disabled govuk-!-margin-right-1\"\u00A0:\u00A0\"button govuk-!-margin-right-1\"'>\n Add a new fee\n </button>\n\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"button\">Add a new fee</a>\n </div>\n </div>\n\n\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Payment Group details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <table class=\"govuk-table\" *ngIf=\"!errorMessage && paymentGroup\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Fee Code</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Fee description</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\">Remission code</th>\n <th class=\"govuk-table__header govuk-!-font-weight-bold\" scope=\"col\"></th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n <td class=\"govuk-table__cell\">{{ getRemissionByFeeCode(fee.code)?.hwf_reference }}</td>\n <td class=\"govuk-table__cell grey-text\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Fee amount:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"!isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='isPaymentExist || fee.remissions ? \"disable-link\" : \"\"'>remove fee</a>\n </td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\">remove fee</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"fee.volume && fee.volume > 0\">\n <td class=\"no-border grey-text subcolumn-1\">Volume:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.volume }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Fee total:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Remission amount:</td>\n <td class=\"no-border subcolumn-2\">{{ getRemissionByFeeCode(fee.code)?.hwf_amount? ( getRemissionByFeeCode(fee.code)?.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2') : '-' }}</td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"!isTurnOff\">\n <a (click)=\"addRemission(fee)\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && !isPaymentExist\">\n Deduct remission\n </a>\n </td>\n <td class=\"no-border subcolumn-3\" *ngIf=\"isTurnOff\">\n <a (click)=\"addRemission(fee)\" *ngIf=\"getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount\">\n Deduct remission\n </a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border grey-text subcolumn-1\">Total after remission:</td>\n <td class=\"no-border subcolumn-2\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border govuk-!-font-weight-bold subcolumn-1\">Total payment</td>\n <td class=\"no-border subcolumn-2\">{{ totalAfterRemission - outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border govuk-!-font-weight-bold subcolumn-1\">Total outstanding amount</td>\n <td class=\"no-border subcolumn-2\">{{ outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"no-border subcolumn-3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"!bsPaymentDcnNumber\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n </td>\n </tr>\n </tbody>\n <tr class=\"govuk-table__row\">\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\"></td>\n <td class=\"no-border\">\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"no-border subcolumn-2\">\n <button *ngIf=\"!bsPaymentDcnNumber\" type=\"submit\" (click)=\"takePayment()\"\n [disabled]=\"totalFee <= 0 || !platForm || isConfirmationBtnDisabled\"\n [ngClass]='totalFee <= 0 || !platForm || isConfirmationBtnDisabled? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'>\n Take payment\n </button>\n <button *ngIf=\"bsPaymentDcnNumber\" type=\"button\" (click)=\"goToAllocatePage(outStandingAmount, isFeeAmountZero)\" class=\"button govuk-!-margin-right-1\">\n <span *ngIf=\"outStandingAmount > 0 || (isFeeAmountZero && outStandingAmount === 0)\">\n Allocate payment\n </span>\n <span *ngIf=\"outStandingAmount < 0 || (!isFeeAmountZero && outStandingAmount === 0)\">\n Continue\n </span>\n </button>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</main>\n</div>\n\n <ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_1'>\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(currentFee)\">\n Remove\n </button>\n </form>\n </div>\n </ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'add_remission' && currentFee\"\n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [fee]=\"currentFee\"\n [caseType]=\"caseType\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [paymentGroupRef]=\"paymentGroupRef\"\n (cancelRemission)=\"cancelRemission()\"></ccpay-add-remission>\n <input *ngIf=\"viewStatus === 'payhub_view' && payhubHtml\" #myInput type='hidden' id='iFrameDrivenImageValue' value='PCIPAL'>\n",
|
|
2268
2238
|
styles: [".fee-summary .grey-text{color:#6b7376;font-weight:500}.fee-summary .govuk-table{margin-bottom:0}.fee-summary .no-border{border:none;border-bottom:none}.fee-summary table td,.fee-summary table th{font-size:15px;font-weight:500;vertical-align:top;max-width:320px}.fee-summary table td .no-padding,.fee-summary table th .no-padding{padding:0}.fee-summary table td .subcolumn-1,.fee-summary table th .subcolumn-1{width:45%}.fee-summary table td .subcolumn-2,.fee-summary table th .subcolumn-2{width:25%;text-align:right}.fee-summary table td .subcolumn-3,.fee-summary table th .subcolumn-3{width:30%;text-align:center}.govuk-button-grb{padding-bottom:20px}.govuk-button-grb .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:10px}.govuk-form-group--mg{margin-top:10px!important}.govuk-fieldset__heading--fz{font-size:16px}.remissionDisable{color:grey;cursor:default}.heading-xlarge{margin:0 0 14px -20px}.govuk-select--custom{width:50%}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}"]
|
|
2269
2239
|
},] },
|
|
2270
2240
|
];
|
|
@@ -2282,9 +2252,7 @@
|
|
|
2282
2252
|
paymentGroupRef: [{ type: i0.Input }],
|
|
2283
2253
|
ccdCaseNumber: [{ type: i0.Input }],
|
|
2284
2254
|
isTurnOff: [{ type: i0.Input }],
|
|
2285
|
-
caseType: [{ type: i0.Input }]
|
|
2286
|
-
isOldPcipalOff: [{ type: i0.Input }],
|
|
2287
|
-
isNewPcipalOff: [{ type: i0.Input }]
|
|
2255
|
+
caseType: [{ type: i0.Input }]
|
|
2288
2256
|
};
|
|
2289
2257
|
return FeeSummaryComponent;
|
|
2290
2258
|
}());
|
|
@@ -3031,8 +2999,6 @@
|
|
|
3031
2999
|
this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
|
|
3032
3000
|
this.isBulkScanEnable = this.paymentLibComponent.ISBSENABLE;
|
|
3033
3001
|
this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
|
|
3034
|
-
this.isNewpcipaloff = this.paymentLibComponent.ISNEWPCIPALOFF;
|
|
3035
|
-
this.isOldpcipaloff = this.paymentLibComponent.ISOLDPCIPALOFF;
|
|
3036
3002
|
this.isStFixEnable = this.paymentLibComponent.ISSFENABLE;
|
|
3037
3003
|
this.getUnassignedPaymentlist();
|
|
3038
3004
|
};
|
|
@@ -3133,8 +3099,6 @@
|
|
|
3133
3099
|
url += this.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
3134
3100
|
url += this.isStFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
3135
3101
|
url += "&caseType=" + this.paymentLibComponent.CASETYPE;
|
|
3136
|
-
url += this.isOldpcipaloff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
3137
|
-
url += this.isNewpcipaloff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
3138
3102
|
this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + "&dcn=" + this.recordId + url);
|
|
3139
3103
|
};
|
|
3140
3104
|
/**
|
|
@@ -3172,8 +3136,6 @@
|
|
|
3172
3136
|
this.paymentLibComponent.bspaymentdcn = this.recordId;
|
|
3173
3137
|
this.paymentLibComponent.unProcessedPaymentServiceId = this.serviceId;
|
|
3174
3138
|
this.paymentLibComponent.isTurnOff = this.ISTURNOFF;
|
|
3175
|
-
this.paymentLibComponent.isNewPcipalOff = this.ISNEWPCIPALOFF;
|
|
3176
|
-
this.paymentLibComponent.isOldPcipalOff = this.ISOLDPCIPALOFF;
|
|
3177
3139
|
this.paymentLibComponent.ISSFENABLE = this.isStFixEnable;
|
|
3178
3140
|
if (!this.ISTURNOFF) {
|
|
3179
3141
|
this.paymentLibComponent.paymentGroupReference = this.PAYMENTREF;
|
|
@@ -3248,8 +3210,6 @@
|
|
|
3248
3210
|
ISTURNOFF: [{ type: i0.Input, args: ['ISTURNOFF',] }],
|
|
3249
3211
|
IS_BUTTON_ENABLE: [{ type: i0.Input, args: ['IS_BUTTON_ENABLE',] }],
|
|
3250
3212
|
IS_OS_AMT_AVAILABLE: [{ type: i0.Input, args: ['IS_OS_AMT_AVAILABLE',] }],
|
|
3251
|
-
ISNEWPCIPALOFF: [{ type: i0.Input, args: ['ISNEWPCIPALOFF',] }],
|
|
3252
|
-
ISOLDPCIPALOFF: [{ type: i0.Input, args: ['ISOLDPCIPALOFF',] }],
|
|
3253
3213
|
ISSFENABLE: [{ type: i0.Input, args: ['ISSFENABLE',] }],
|
|
3254
3214
|
selectedUnprocessedFeeEvent: [{ type: i0.Output }],
|
|
3255
3215
|
getUnprocessedFeeCount: [{ type: i0.Output }]
|
|
@@ -3953,8 +3913,6 @@
|
|
|
3953
3913
|
/** @type {?} */
|
|
3954
3914
|
var LDUrl = _this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
3955
3915
|
LDUrl += "&caseType=" + _this.caseType;
|
|
3956
|
-
LDUrl += _this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
3957
|
-
LDUrl += _this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
3958
3916
|
if (_this.paymentLibComponent.bspaymentdcn) {
|
|
3959
3917
|
_this.router.routeReuseStrategy.shouldReuseRoute = function () { return false; };
|
|
3960
3918
|
_this.router.onSameUrlNavigation = 'reload';
|
|
@@ -3980,8 +3938,6 @@
|
|
|
3980
3938
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
3981
3939
|
this.paymentLibComponent.TAKEPAYMENT = true;
|
|
3982
3940
|
this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
|
|
3983
|
-
this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
|
|
3984
|
-
this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
|
|
3985
3941
|
this.paymentViewService.getBSfeature().subscribe(function (features) {
|
|
3986
3942
|
/** @type {?} */
|
|
3987
3943
|
var result = JSON.parse(features).filter(function (feature) { return feature.uid === BS_ENABLE_FLAG$2; });
|
|
@@ -3995,8 +3951,6 @@
|
|
|
3995
3951
|
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
3996
3952
|
partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
3997
3953
|
partUrl += "&caseType=" + this.caseType;
|
|
3998
|
-
partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
3999
|
-
partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
4000
3954
|
/** @type {?} */
|
|
4001
3955
|
var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=true&selectedOption=" + this.option + partUrl;
|
|
4002
3956
|
this.router.navigateByUrl(url);
|
|
@@ -4023,8 +3977,6 @@
|
|
|
4023
3977
|
caseType: [{ type: i0.Input }],
|
|
4024
3978
|
paymentGroupRef: [{ type: i0.Input }],
|
|
4025
3979
|
isTurnOff: [{ type: i0.Input }],
|
|
4026
|
-
isOldPcipalOff: [{ type: i0.Input }],
|
|
4027
|
-
isNewPcipalOff: [{ type: i0.Input }],
|
|
4028
3980
|
isStrategicFixEnable: [{ type: i0.Input }],
|
|
4029
3981
|
cancelRemission: [{ type: i0.Output }]
|
|
4030
3982
|
};
|
|
@@ -4760,4 +4712,4 @@
|
|
|
4760
4712
|
|
|
4761
4713
|
})));
|
|
4762
4714
|
|
|
4763
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtY2NwYXktd2ViLWNvbXBvbmVudC51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9wYXltZW50LWxpYi5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGF5bWVudC1saWIuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9zZXJ2aWNlcy9wYXltZW50LWxpc3QvcGF5bWVudC1saXN0LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvY2FyZC1kZXRhaWxzL2NhcmQtZGV0YWlscy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BhZ2Utbm90LWZvdW5kLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcGJhLWRldGFpbHMvcGJhLWRldGFpbHMuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2xvZ2dlci9jb25zb2xlLWxvZ2dlci5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC50cyIsbnVsbCwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9QYXltZW50VG9QYXlodWJSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9QYXlodWJBbnRlbm5hUmVxdWVzdC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvZmVlLXN1bW1hcnkvZmVlLXN1bW1hcnkuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9lcnJvci1iYW5uZXIvZXJyb3ItYmFubmVyLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2ludGVyZmFjZXMvVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50L21hcmstdW5pZGVudGlmaWVkLXBheW1lbnQuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9VbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvbWFyay11bnNvbGljaXRlZC1wYXltZW50L21hcmstdW5zb2xpY2l0ZWQtcGF5bWVudC5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3VucHJvY2Vzc2VkLXBheW1lbnRzL3VucHJvY2Vzc2VkLXBheW1lbnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcHJvY2Vzc2VkLXBheW1lbnRzL3Byb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9waXBlcy9jY2QtaHlwaGVucy5waXBlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGlwZXMva2V5LXZhbHVlLnBpcGUudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9waXBlcy9zYW5pdGl6ZS1odG1sLnBpcGUudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9zZXJ2aWNlcy94bC1maWxlL3hsLWZpbGUuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcmVwb3J0cy9yZXBvcnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3BheW1lbnQtbGliLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudExpYlNlcnZpY2Uge1xuICBBUElfUk9PVDogc3RyaW5nO1xuICBCVUxLU0NBTl9BUElfUk9PVDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgc2V0QXBpUm9vdFVybChhcGlSb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLkFQSV9ST09UID0gYXBpUm9vdDtcbiAgfVxuXG4gIGdldEFwaVJvb3RVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5BUElfUk9PVDtcbiAgfVxuXG4gIHNldEJ1bGtTY2FuQXBpUm9vdFVybChidWxrc2NhbmFwaVJvb3Q6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuQlVMS1NDQU5fQVBJX1JPT1QgPSBidWxrc2NhbmFwaVJvb3Q7XG4gIH1cblxuICBnZXRCdWxrU2NhbkFwaVJvb3RVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5CVUxLU0NBTl9BUElfUk9PVDtcbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lCU1BheW1lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC1saWInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxjY3BheS1wYXltZW50LWxpc3QgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3BheW1lbnQtbGlzdCdcIj48L2NjcGF5LXBheW1lbnQtbGlzdD5cbiAgICA8Y2NwYXktcGF5bWVudC12aWV3ICpuZ0lmPVwidmlld05hbWUgPT09ICdwYXltZW50LXZpZXcnXCJcbiAgICBbaXNUdXJuT2ZmXT1cIklTVFVSTk9GRlwiPjwvY2NwYXktcGF5bWVudC12aWV3PlxuICAgIDxjY3BheS1jYXNlLXRyYW5zYWN0aW9ucyAgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2Nhc2UtdHJhbnNhY3Rpb25zJ1wiPjwvY2NwYXktY2FzZS10cmFuc2FjdGlvbnM+XG4gICAgPGFwcC1tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50ICpuZ0lmPVwidmlld05hbWUgPT09ICd1bmlkZW50aWZpZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bmlkZW50aWZpZWQtcGF5bWVudD5cbiAgICA8YXBwLW1hcmstdW5zb2xpY2l0ZWQtcGF5bWVudCAqbmdJZj1cInZpZXdOYW1lID09PSAndW5zb2xpY2l0ZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bnNvbGljaXRlZC1wYXltZW50PlxuICAgIDxhcHAtYWxsb2NhdGUtcGF5bWVudHMgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2FsbG9jYXRlLXBheW1lbnRzJ1wiXG4gICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIlxuICAgIFtjYXNlVHlwZV09XCJDQVNFVFlQRVwiXG4gICAgPjwvYXBwLWFsbG9jYXRlLXBheW1lbnRzPlxuICAgIDxjY3BheS1mZWUtc3VtbWFyeSAqbmdJZj1cInZpZXdOYW1lID09PSAnZmVlLXN1bW1hcnknXCJcbiAgICAgIFtjY2RDYXNlTnVtYmVyXT1cIkNDRF9DQVNFX05VTUJFUlwiIFxuICAgICAgW3BheW1lbnRHcm91cFJlZl09XCJwYXltZW50R3JvdXBSZWZlcmVuY2VcIlxuICAgICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIlxuICAgICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCJcbiAgICAgIFtpc09sZFBjaXBhbE9mZl09XCJJU09MRFBDSVBBTE9GRlwiXG4gICAgICBbaXNOZXdQY2lwYWxPZmZdPVwiSVNORVdQQ0lQQUxPRkZcIlxuICAgICAgPjwvY2NwYXktZmVlLXN1bW1hcnk+XG4gICAgPGNjcGF5LXJlcG9ydHMgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3JlcG9ydHMnXCI+PC9jY3BheS1yZXBvcnRzPlxuICAgIGBcbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdBUElfUk9PVCcpIEFQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgnQlVMS1NDQU5fQVBJX1JPT1QnKSBCVUxLU0NBTl9BUElfUk9PVDogc3RyaW5nO1xuICBASW5wdXQoJ0NDRF9DQVNFX05VTUJFUicpIENDRF9DQVNFX05VTUJFUjogc3RyaW5nO1xuICBASW5wdXQoJ0VYQ19SRUZFUkVOQ0UnKSBFWENfUkVGRVJFTkNFOiBzdHJpbmc7XG4gIEBJbnB1dCgnUEFZTUVOVF9NRVRIT0QnKSBQQVlNRU5UX01FVEhPRDogc3RyaW5nO1xuICBASW5wdXQoJ1ZJRVcnKSBWSUVXOiBzdHJpbmc7XG4gIEBJbnB1dCgnUEFZTUVOVF9HUk9VUF9SRUYnKSBQQVlNRU5UX0dST1VQX1JFRj86IHN0cmluZztcbiAgQElucHV0KCdUQUtFUEFZTUVOVCcpIFRBS0VQQVlNRU5UOiBib29sZWFuO1xuICBASW5wdXQoJ0RDTl9OVU1CRVInKSBEQ05fTlVNQkVSOiBzdHJpbmc7XG4gIEBJbnB1dCgnU0VMRUNURURfT1BUSU9OJykgU0VMRUNURURfT1BUSU9OOiBzdHJpbmc7XG4gIEBJbnB1dCgnSVNCU0VOQUJMRScpIElTQlNFTkFCTEU6IEJvb2xlYW47XG4gIEBJbnB1dCgnSVNTRkVOQUJMRScpIElTU0ZFTkFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNUVVJOT0ZGJykgSVNUVVJOT0ZGOiBib29sZWFuO1xuICBASW5wdXQoJ0NBU0VUWVBFJykgQ0FTRVRZUEU6IFN0cmluZztcbiAgQElucHV0KCdJU09MRFBDSVBBTE9GRicpIElTT0xEUENJUEFMT0ZGOiBib29sZWFuO1xuICBASW5wdXQoJ0lTTkVXUENJUEFMT0ZGJykgSVNORVdQQ0lQQUxPRkY6IGJvb2xlYW47XG5cbiAgcGF5bWVudE1ldGhvZDogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgdW5Qcm9jZXNzZWRQYXltZW50U2VydmljZUlkOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nO1xuICB2aWV3TmFtZTogc3RyaW5nO1xuICBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIGNhc2VUeXBlOiBzdHJpbmc7XG4gIGlzT2xkUGNpcGFsT2ZmOiBib29sZWFuO1xuICBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgdW5Qcm9jZXNzZWRQYXltZW50OiBJQlNQYXltZW50cyA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGF5bWVudExpYlNlcnZpY2Uuc2V0QXBpUm9vdFVybCh0aGlzLkFQSV9ST09UKTtcbiAgICB0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLnNldEJ1bGtTY2FuQXBpUm9vdFVybCh0aGlzLkJVTEtTQ0FOX0FQSV9ST09UKTtcbiAgICBpZiAodGhpcy5QQVlNRU5UX0dST1VQX1JFRikge1xuICAgICAgdGhpcy5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLlBBWU1FTlRfR1JPVVBfUkVGO1xuICAgIH1cbiAgICBpZiAodGhpcy5EQ05fTlVNQkVSKSB7XG4gICAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMuRENOX05VTUJFUjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5WSUVXID09PSAnZmVlLXN1bW1hcnknKSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9IGVsc2UgIGlmICh0aGlzLlZJRVcgIT09ICdyZXBvcnRzJykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSB0aGlzLlZJRVc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBfdGhyb3cgfSBmcm9tICdyeGpzL29ic2VydmFibGUvdGhyb3cnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cblxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cblxuICBoYW5kbGVFcnJvcihlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBBIGNsaWVudC1zaWRlIG9yIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgQW4gZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGlmICghZXJyLmVycm9yKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ05vdCBmb3VuZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVyci5lcnJvci5tZXNzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9ICdTZXJ2ZXIgZXJyb3InO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF90aHJvdyhlcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGlzRXJyb3JFeGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogXCJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZVwiLFxuICAgICAgYm9keTogXCJUcnkgYWdhaW4gbGF0ZXJcIixcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBub29wID0gKCk6IGFueSA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMb2dnZXIge1xuXG4gIGluZm86IGFueTtcbiAgd2FybjogYW55O1xuICBlcnJvcjogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyIHtcblxuICBpbmZvOiBhbnk7XG4gIHdhcm46IGFueTtcbiAgZXJyb3I6IGFueTtcblxuICBpbnZva2VDb25zb2xlTWV0aG9kKHR5cGU6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQge31cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBJUGF5bWVudHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50cyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50TGlzdFNlcnZpY2Uge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG5cbiAgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcihjY2RDYXNlTnVtYmVyOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC1saXN0LXNlcnZpY2UgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlciBmb3I6ICcsIGNjZENhc2VOdW1iZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9L3BheW1lbnRzYCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtQYXltZW50TGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudHMnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJU3RhdHVzSGlzdG9yeX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3RhdHVzSGlzdG9yeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICBQYXltZW50cyBsaXN0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWRcbiAgICAgIDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBwYXltZW50c1wiPlxuXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgZ3JvdXAgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPkRhdGUgY3JlYXRlZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5DaGFubmVsPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPk1ldGhvZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5BbW91bnQ8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJib2xkIGZvbnQteHNtYWxsXCI+U3RhdHVzPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgcGF5bWVudHMucGF5bWVudHNcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRQYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCBwYXltZW50LnBheW1lbnRfcmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlIH19PC9hPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQucGF5bWVudF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgaGg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj57eyBwYXltZW50LmNoYW5uZWwgfCB0aXRsZWNhc2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQubWV0aG9kIHwgdGl0bGVjYXNlIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj7DgsKje3sgcGF5bWVudC5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInBheW1lbnQubWV0aG9kID09PSAnY2FyZCcgJiYgcGF5bWVudC5jaGFubmVsID09PSAnb25saW5lJ1wiPlxuICAgICAgICAgIDxkZXRhaWxzPlxuICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9XCJzdW1tYXJ5IGZvbnQteHNtYWxsXCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3NwYW4+PC9zdW1tYXJ5PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWJvcmRlci1uYXJyb3dcIiAqbmdJZj1cInBheW1lbnQuc3RhdHVzID09PSAnRmFpbGVkJ1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0dXNIaXN0b3J5IG9mIHBheW1lbnQuc3RhdHVzX2hpc3Rvcmllc1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDEwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCByZWplY3RlZCBkdWUgdG8gcGF5bWVudCBtZXRob2Qgc2VsZWN0ZWQgb3IgcGF5bWVudCBpbmZvcm1hdGlvbiBlbnRlcmVkLCBmb3IgZXhhbXBsZSwgZmFpbGVkIGZyYXVkIGNoZWNrLCBhIDNEIFNlY3VyZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCBvciB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIGVub3VnaCBtb25leSBpbiBhY2NvdW50XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDIwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCB3YXMgbm90IGNvbmZpcm1lZCBhbmQgY29tcGxldGVkIHdpdGhpbiA5MCBtaW51dGVzIG9mIGJlaW5nIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXhzbWFsbFwiICpuZ0lmPVwic3RhdHVzSGlzdG9yeS5lcnJvcl9jb2RlID09PSAnUDAwMzAnXCI+XG4gICAgICAgICAgICAgICAgICBVc2VyIGNsaWNrZWQgb24gdGhlIMOiwoDCnENhbmNlbCBwYXltZW50w6LCgMKdIGJ1dHRvbiBkdXJpbmcgdGhlIHBheW1lbnQgam91cm5leVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCIgKm5nSWY9XCJzdGF0dXNIaXN0b3J5LmVycm9yX2NvZGUgPT09ICdQMDA1MCdcIj5cbiAgICAgICAgICAgICAgICAgIE11bHRpcGxlIHBvc3NpYmxlIGNhdXNlcywgZm9yIGV4YW1wbGUgYSBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCB0aGUgcGF5bWVudCBwcm92aWRlciwgb3IgaW5jb3JyZWN0IGxvZ2luIGNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdjYXJkJyAmJiBwYXltZW50LmNoYW5uZWwgPT09ICd0ZWxlcGhvbnknXCIgY2xhc3M9XCJmb250LXhzbWFsbFwiPlxuICAgICAgICAgIHt7IHBheW1lbnQuc3RhdHVzfX1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdwYXltZW50IGJ5IGFjY291bnQnXCI+XG4gICAgICAgICAgPGRldGFpbHM+XG4gICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz1cInN1bW1hcnkgZm9udC14c21hbGxcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvc3Bhbj48L3N1bW1hcnk+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtYm9yZGVyLW5hcnJvd1wiICpuZ0lmPVwicGF5bWVudC5zdGF0dXMgPT09ICdQZW5kaW5nJ1wiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCI+VGhpcyBtZWFucyB0aGUgdHJhbnNhY3Rpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IExpYmVyYXRhLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90YWJsZT5cblxuICA8L2Rpdj5cblxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudExpc3RTZXJ2aWNlOiBQYXltZW50TGlzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXltZW50TGlzdFNlcnZpY2UuZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLCB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUEFZTUVOVF9NRVRIT0QpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50cyA9PiB0aGlzLnBheW1lbnRzID0gcGF5bWVudHMsXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICAgICk7XG4gIH1cblxuICBsb2FkUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50UmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYkNvbXBvbmVudEh0dHBDbGllbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtZXRhOiBNZXRhXG4gICkgeyB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCBvcHRzKTtcbiAgfVxuXG4gIHB1dCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nLCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5hZGRIZWFkZXJzKG9wdGlvbnMgfHwge30pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgb3B0cyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodXJsLCBvcHRzKTtcbiAgfVxuICBcbiAgcGF0Y2godXJsOiBzdHJpbmcsIGJvZHk6IGFueSB8IG51bGwsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgYWRkSGVhZGVycyhvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNzcmZUb2tlbiA9IHRoaXMubWV0YS5nZXRUYWcoJ25hbWU9Y3NyZi10b2tlbicpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaGVhZGVyc1tlbGVtZW50XSA9IG9wdGlvbnMuaGVhZGVycy5nZXQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaGVhZGVyc1snWC1SZXF1ZXN0ZWQtV2l0aCddID0gJ1hNTEh0dHBSZXF1ZXN0JztcbiAgICBoZWFkZXJzWydDU1JGLVRva2VuJ10gPSBjc3JmVG9rZW4uY29udGVudDtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoaGVhZGVycyk7XG4gICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRIdHRwQ2xpZW50IH0gZnJvbSAnLi4vc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50JztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5aHViQW50ZW5uYVJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheWh1YkFudGVubmFSZXF1ZXN0JztcbmltcG9ydCB7IFVuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IFVuc29saWNpdGVkUGF5bWVudHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9VbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCc7XG5pbXBvcnQgeyBNZXRhIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7IElBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudFZpZXdTZXJ2aWNlIHtcblxuICBwcml2YXRlIG1ldGE6IE1ldGE7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGh0dHBzOiBXZWJDb21wb25lbnRIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZSkgeyB9XG5cbiAgZ2V0UGF5bWVudERldGFpbHMocGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElQYXltZW50PiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC12aWV3LXNlcnZpY2UgZ2V0UGF5bWVudERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50PihwYXltZW50TWV0aG9kID09PSAnY2FyZCcgfHwgcGF5bWVudE1ldGhvZCA9PT0gJ2Nhc2gnIHx8IHBheW1lbnRNZXRob2QgPT09ICdjaGVxdWUnIHx8IHBheW1lbnRNZXRob2QgPT09ICdwb3N0YWwgb3JkZXInID9cbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXJkLXBheW1lbnRzLyR7cGF5bWVudFJlZmVyZW5jZX1gIDpcbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jcmVkaXQtYWNjb3VudC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9YCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwRGV0YWlscyhwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRHcm91cD4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cERldGFpbHMgZm9yOiAnLCBwYXltZW50R3JvdXBSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnQ+KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudEdyb3VwUmVmZXJlbmNlfWAsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG4gIGdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRHcm91cD4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50PihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9mZWUtcGF5LWFwcG9ydGlvbi8ke3BheW1lbnRSZWZlcmVuY2V9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbiAgcG9zdEJTUGF5bWVudHMoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9idWxrLXNjYW4tcGF5bWVudHNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwb3N0QlNVbmlkZW50aWZpZWRQYXltZW50cyhib2R5OiBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1hbGxvY2F0aW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU1Vuc29saWNpdGVkUGF5bWVudHMoYm9keTogVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1hbGxvY2F0aW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU0FsbG9jYXRpb25QYXltZW50cyhib2R5OiBJQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWFsbG9jYXRpb25zYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cblxuICBwb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIGZlZUlkOiBudW1iZXIsIGJvZHk6IEFkZFJlbWlzc2lvblJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZlcmVuY2V9L2ZlZXMvJHtmZWVJZH0vcmVtaXNzaW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIGRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAgZm9yOiAnLCBmZWVJZCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZGVsZXRlKGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2ZlZXMvJHtmZWVJZH1gKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwb3N0UGF5bWVudFRvUGF5SHViKGJvZHk6IFBheW1lbnRUb1BheWh1YlJlcXVlc3QsIHBheW1lbnRHcm91cFJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudEdyb3VwUmVmfS9jYXJkLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cblxuICBwb3N0UGF5bWVudEFudGVubmFUb1BheUh1Yihib2R5OiBQYXlodWJBbnRlbm5hUmVxdWVzdCwgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZ9L3RlbGVwaG9ueS1jYXJkLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgZG93bmxvYWRTZWxlY3RlZFJlcG9ydChyZXBvcnROYW1lOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOnN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcmVwb3J0L2RhdGE/ZGF0ZV9mcm9tPSR7c3RhcnREYXRlfSZkYXRlX3RvPSR7ZW5kRGF0ZX0mcmVwb3J0X3R5cGU9JHtyZXBvcnROYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZ2V0KHVybCwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkucGlwZSggY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpKTtcbiAgfVxuICBnZXRCU2ZlYXR1cmUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5nZXQoJ2FwaS9wYXltZW50LWhpc3RvcnkvYnVsay1zY2FuLWZlYXR1cmUnLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KS5waXBlKCBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcikpO1xuICB9XG4gIGdldFNpdGVJRCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLmdldCgnYXBpL3BheW1lbnQtaGlzdG9yeS9yZWZkYXRhL2xlZ2FjeS1zaXRlcycsIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pLnBpcGUoIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGF5bWVudFZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYXltZW50LXZpZXcnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJnb3Z1ay13aWR0aC1jb250YWluZXJcIj5cblxuICA8ZGl2IGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICA8b2wgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdFwiPlxuICAgICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiPlxuICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGlua1wiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyIGdvdnVrLSEtcGFkZGluZy10b3AtMFwiIGlkPVwibWFpbi1jb250ZW50XCIgcm9sZT1cIm1haW5cIj5cblxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBQYXltZW50IGRldGFpbHMgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1hbGlnbm1lbnRcIiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgcGF5bWVudEdyb3VwXCI+XG5cbiAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nUEFZTUVOVERFVEFJTFMnPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlIGdvdnVrLSEtbWFyZ2luLXRvcC0wXCI+UGF5bWVudCBkZXRhaWxzPC9oMT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwiaXNUdXJuT2ZmXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgZ3JvdXAgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQ+w4LCo3t7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50c1swXSAmJiBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkdvdlBheSBUcmFuc2FjdGlvbiBJRDwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5leHRlcm5hbF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgYXNzZXQgbnVtYmVyKERDTik8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmJhbmtlZF9kYXRlIHwgZGF0ZTonZGQgTU1NIHl5eXknIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPkZlZSBhbmQgcmVtaXNzaW9uIGRldGFpbHM8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZD5BcHBsaWNhdGlvbiBmb3Ige3sgZmVlLmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5GZWUgY29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgZmVlLmNvZGUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9ucyAmJiAhaXNUdXJuT2ZmIH1cIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RyLWJvcmRlcic6ICFmZWUuYXBwb3J0aW9uX2Ftb3VudCAmJiAhZmVlLnJlbWlzc2lvbnMgJiYgIWlzVHVybk9mZiB9XCI+w4LCo3t7IGZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5uZXRfYW1vdW50ICYmIGlzVHVybk9mZlwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9uc31cIiA+TmV0IGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLmFwcG9ydGlvbl9hbW91bnQgJiYgIWZlZS5yZW1pc3Npb25zfVwiPsOCwqN7eyBmZWUubmV0X2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5hcHBvcnRpb25fYW1vdW50XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13IHRyLWJvcmRlclwiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPkFsbG9jYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPsOCwqN7eyBmZWUuYXBwb3J0aW9uX2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLnJlbWlzc2lvbnNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tmZWUucmVtaXNzaW9ucy5od2ZfcmVmZXJlbmNlfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLnJlbWlzc2lvbnNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXcgdHItYm9yZGVyXCI+UmVtaXNzaW9uIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ci1ib3JkZXJcIj7DgsKje3sgZmVlLnJlbWlzc2lvbnMuaHdmX2Ftb3VudCB8IG51bWJlcjonLjInfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gY2FyZCBkZXRhaWxzIC0tPlxuICAgICAgPGNjcGF5LWNhcmQtZGV0YWlscyAqbmdJZj1cImlzQ2FyZFBheW1lbnQgJiYgIWlzVGVsZXBob255UGF5bWVudFwiPjwvY2NwYXktY2FyZC1kZXRhaWxzPlxuXG4gICAgICA8IS0tIHBiYSBkZXRhaWxzIC0tPlxuICAgICAgPGNjcGF5LXBiYS1kZXRhaWxzICpuZ0lmPVwiIWlzQ2FyZFBheW1lbnRcIiBbcGF5bWVudF09XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF1cIj48L2NjcGF5LXBiYS1kZXRhaWxzPlxuXG4gICAgICA8IS0tIFN0YXR1cyBoaXN0b3JpZXMgLS0+XG4gICAgICA8Y2NwYXktcGF5bWVudC1zdGF0dXNlcyAqbmdJZj1cImlzU3RhdHVzQWxsb2NhdGVkXCI+PC9jY3BheS1wYXltZW50LXN0YXR1c2VzPlxuXG4gICAgPC9kaXY+XG5cbiAgPC9tYWluPlxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgLnRiLWNvbC13e3dpZHRoOjMzMHB4fS50ci1ib3JkZXJ7Ym9yZGVyLWJvdHRvbToycHggc29saWR9LnBheW1lbnQtdmlldy1hbGlnbm1lbnR7bWFyZ2luLWxlZnQ6MzBweH1gXVxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBkY25OdW1iZXI6IHN0cmluZztcbiAgaXNTdGF0dXNBbGxvY2F0ZWQ6IGJvb2xlYW47XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBsZXQgZmVlcyA9IFtdO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgaWYocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXNcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSwgIFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgXG4gIH1cblxuICBnZXQgaXNDYXJkUGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ubWV0aG9kID09PSAnY2FyZCc7XG4gIH1cblxuICBnZXQgaXNUZWxlcGhvbnlQYXltZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5jaGFubmVsID09PSAndGVsZXBob255JztcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGF5bWVudExpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtbGlzdCc7XG4gIH1cblxuICBnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7SUNhcmREZXRhaWxzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lDYXJkRGV0YWlscyc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZERldGFpbHNTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlKSB7IH1cblxuICBnZXRDYXJkRGV0YWlscyhwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElDYXJkRGV0YWlscz4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ0NhcmQtZGV0YWlsLXNlcnZpY2UgZ2V0Q2FyZERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElDYXJkRGV0YWlscz4oYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FyZC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9L2RldGFpbHNgLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkRGV0YWlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJkLWRldGFpbHMvY2FyZC1kZXRhaWxzLnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2FyZERldGFpbHN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUNhcmREZXRhaWxzJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXJkLWRldGFpbHMnLFxuICB0ZW1wbGF0ZTogYFxuPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlBheW1lbnQgbWV0aG9kPC9oMj5cbjwvZGl2PlxuXG48ZGl2IHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgUGF5bWVudCBtZXRob2QgdW5hdmFpbGFibGUsIFRoZSBwYXltZW50IGhhcyBlaXRoZXIgZXhwaXJlZCBvciB1bnN1Y2Nlc3NmdWwuXG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgY2FyZERldGFpbHNcIj5cblxuPHRhYmxlPlxuICA8dGJvZHk+XG4gIDx0cj5cbiAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+TWV0aG9kPC90ZD5cbiAgICA8dGQ+Q2FyZDwvdGQ+XG4gIDwvdHI+XG4gIDx0cj5cbiAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+VHlwZTwvdGQ+XG4gICAgPHRkPnt7IGNhcmREZXRhaWxzLmNhcmRfYnJhbmQgfX08L3RkPlxuICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLnRiLWNvbC13e3dpZHRoOjMzMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIENhcmREZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnQ2FyZCBkZXRhaWxzJztcbiAgY2FyZERldGFpbHM6IElDYXJkRGV0YWlscztcbiAgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhcmREZXRhaWxzU2VydmljZTogQ2FyZERldGFpbHNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FyZERldGFpbHNTZXJ2aWNlLmdldENhcmREZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBjYXJkRGV0YWlscyA9PiB0aGlzLmNhcmREZXRhaWxzID0gY2FyZERldGFpbHMsXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yXG4gICAgKTtcbiAgfVxuXG4gIGdldCBnZXRQYXltZW50UmVmZXJlbmNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudFJlZmVyZW5jZTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6IGBcbiAgICA8aDE+VGhpcyBpcyBub3QgdGhlIHBhZ2UgeW91IHdlcmUgbG9va2luZyBmb3IhPC9oMT5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VOb3RGb3VuZENvbXBvbmVudCB7IH1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRMaWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSVN0YXR1c0hpc3RvcmllcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN0YXR1c0hpc3Rvcmllcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RhdHVzSGlzdG9yeVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIGdldFBheW1lbnRTdGF0dXNlc0J5UmVmZXJlbmNlKHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxJU3RhdHVzSGlzdG9yaWVzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnU3RhdHVzLWhpc3Rvcnktc2VydmljZSBnZXRQYXltZW50U3RhdHVzZXNCeVJlZmVyZW5jZSBmb3I6ICcsIHBheW1lbnRSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVN0YXR1c0hpc3Rvcmllcz4ocGF5bWVudE1ldGhvZCA9PT0gJ2NhcmQnIHx8IHBheW1lbnRNZXRob2QgPT09ICdjYXNoJyB8fCBwYXltZW50TWV0aG9kID09PSAnY2hlcXVlJyB8fCBwYXltZW50TWV0aG9kID09PSAncG9zdGFsIG9yZGVyJyA/XG4gICAgICAgICAgYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FyZC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9L3N0YXR1c2VzYCA6XG4gICAgICAgICAgYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY3JlZGl0LWFjY291bnQtcGF5bWVudHMvJHtwYXltZW50UmVmZXJlbmNlfS9zdGF0dXNlc2AsIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTdGF0dXNIaXN0b3JpZXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTdGF0dXNIaXN0b3JpZXMnO1xuaW1wb3J0IHsgU3RhdHVzSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYXltZW50LXN0YXR1c2VzJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+e3sgcGFnZVRpdGxlIH19PC9oMj5cbjwvZGl2PlxuXG5cbjxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgIFBheW1lbnQgc3RhdHVzIGhpc3RvcnkgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICA8L2gyPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBzdGF0dXNlc1wiPlxuICA8dGFibGU+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICA8dGg+QW1vdW50PC90aD5cbiAgICAgICAgICA8dGg+RGF0ZTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPiBcbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdGF0dXMgb2Ygc3RhdHVzZXMuc3RhdHVzX2hpc3Rvcmllc1wiPlxuICAgICAgICAgIDx0ZD57eyBzdGF0dXMuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICA8dGQ+w4LCo3t7IHN0YXR1c2VzLmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgc3RhdHVzLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IGhoOm1tOnNzJ319PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgU3RhdHVzSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBhZ2VUaXRsZTogc3RyaW5nID0gJ1BheW1lbnQgc3RhdHVzIGhpc3RvcnknO1xuICBzdGF0dXNlczogSVN0YXR1c0hpc3RvcmllcztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0dXNIaXN0b3J5U2VydmljZTogU3RhdHVzSGlzdG9yeVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdGF0dXNIaXN0b3J5U2VydmljZS5nZXRQYXltZW50U3RhdHVzZXNCeVJlZmVyZW5jZSh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSwgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QpLnN1YnNjcmliZShcbiAgICAgIHN0YXR1c2VzID0+IHRoaXMuc3RhdHVzZXMgPSBzdGF0dXNlcyxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICApO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGJhLWRldGFpbHMnLFxuICB0ZW1wbGF0ZTogYFxuICA8aDIgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+UGF5bWVudCBtZXRob2Q8L2gyPlxuICA8dGFibGU+XG4gICAgPHRib2R5PlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5NZXRob2Q8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZVwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgIDwvdHI+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlR5cGU8L3RkPlxuICAgICAgPHRkPkNyZWRpdDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50Lm9yZ2FuaXNhdGlvbl9uYW1lXCI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIGFjY291bnQgbmFtZTwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5vcmdhbmlzYXRpb25fbmFtZSB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50LmFjY291bnRfbnVtYmVyXCI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIG51bWJlcjwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5hY2NvdW50X251bWJlciB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50LmN1c3RvbWVyX3JlZmVyZW5jZVwiPlxuICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkN1c3RvbWVyIGludGVybmFsIHJlZmVyZW5jZTwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5jdXN0b21lcl9yZWZlcmVuY2UgfX08L3RkPlxuICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbmAsXG4gIHN0eWxlczogW2AuY2FwaXRhbGl6ZTo6Zmlyc3QtbGV0dGVye3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udGItY29sLXd7d2lkdGg6MzMwcHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgUGJhRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHBheW1lbnQ6IElQYXltZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5cbmV4cG9ydCBsZXQgaXNEZWJ1Z01vZGUgPSBmYWxzZTtcblxuY29uc3Qgbm9vcCA9ICgpOiBhbnkgPT4gdW5kZWZpbmVkO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb25zb2xlTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIExvZ2dlciB7XG5cbiAgZ2V0IGluZm8oKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH1cbiAgfVxuXG4gIGdldCB3YXJuKCkge1xuICAgIGlmIChpc0RlYnVnTW9kZSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gIH1cblxuICBnZXQgZXJyb3IoKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gIH1cblxuICBpbnZva2VDb25zb2xlTWV0aG9kKHR5cGU6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ0ZuOiBGdW5jdGlvbiA9IChjb25zb2xlKVt0eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wO1xuICAgIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIFthcmdzXSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7RXJyb3JIYW5kbGVyU2VydmljZX0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZVxuICAgICAgICAgICAgICApIHsgfVxuXG4gIGdldFBheW1lbnRHcm91cHMoY2NkQ2FzZU51bWJlcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJUGF5bWVudEdyb3VwW10+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdDYXNlLXRyYW5zYWN0aW9ucy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cHMgZm9yOiAnLCBjY2RDYXNlTnVtYmVyKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50R3JvdXBbXT4oYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FzZXMvJHtjY2RDYXNlTnVtYmVyfS9wYXltZW50Z3JvdXBzYCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFcnJvckhhbmRsZXJTZXJ2aWNlfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkNvbXBvbmVudEh0dHBDbGllbnQgfSBmcm9tICcuLi9zaGFyZWQvaHR0cGNsaWVudC93ZWJjb21wb25lbnQuaHR0cC5jbGllbnQnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGh0dHBzOiBXZWJDb21wb25lbnRIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlXG4gICAgICAgICAgICAgICkgeyB9XG5cbiAgZ2V0QlNQYXltZW50c0J5Q0NEKGNjZENhc2VOdW1iZXI6IHN0cmluZyk6IE9ic2VydmFibGU8SUJTUGF5bWVudHM+IHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElCU1BheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbiAgZ2V0QlNQYXltZW50c0J5RENOKGRjbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJQlNQYXltZW50cz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElCU1BheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9jYXNlcz9kb2N1bWVudF9jb250cm9sX251bWJlcj0ke2Rjbn1gLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuICBwb3N0QlNBbGxvY2F0ZVBheW1lbnQoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCwgcGF5bWVudFJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudFJlZn0vYnVsay1zY2FuLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcG9zdEJTUGF5bWVudFN0cmF0ZWdpYyhib2R5OiBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0LCBwYXltZW50R3JvdXBSZWY6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy8ke3BheW1lbnRHcm91cFJlZn0vYnVsay1zY2FuLXBheW1lbnRzLXN0cmF0ZWdpY2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU1dvUEdTdHJhdGVnaWMoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9idWxrLXNjYW4tcGF5bWVudHMtc3RyYXRlZ2ljYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcGF0Y2hCU0NoYW5nZVN0YXR1cyhkY25OdW1iZXI6IHN0cmluZywgc3RhdHVzOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBhdGNoKGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2J1bGstc2Nhbi1wYXltZW50cy8ke2Rjbk51bWJlcn0vc3RhdHVzLyR7c3RhdHVzfWAsIHN0YXR1cykucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICBsZXQgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDA7XG5cbiAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICB9KTtcbiAgICB9ICAgXG4gICAgcmV0dXJuIChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgfVxuXG4gIHJlbW92ZVVud2FudGVkU3RyaW5nKGlucHV0OiBzdHJpbmcsIHJlcGxhY2VUZXh0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gL1tcXF9dL2dpO1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VUZXh0KTtcbiAgfVxuXG4gIGRvd25sb2FkU2VsZWN0ZWRSZXBvcnQocmVwb3J0TmFtZTogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTpzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLmdldChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9yZXBvcnQvZGF0YT9kYXRlX2Zyb209JHtzdGFydERhdGV9JmRhdGVfdG89JHtlbmREYXRlfSZyZXBvcnRfdHlwZT0ke3JlcG9ydE5hbWV9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG59XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtDYXNlVHJhbnNhY3Rpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtJRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtJUGF5bWVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQge0lSZW1pc3Npb259IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIGxzIGZyb20gXCJsb2NhbC1zdG9yYWdlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWNhc2UtdHJhbnNhY3Rpb25zJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZ292dWstd2lkdGgtY29udGFpbmVyXCI+XG5cbiAgPG1haW4gY2xhc3M9XCJnb3Z1ay1tYWluLXdyYXBwZXJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4nJiYgIWlzVHVybk9mZiAmJiB0YWtlUGF5bWVudFwiPlxuXG5cbiAgICA8ZGl2ICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5DYXNlIHRyYW5zYWN0aW9uczwvaDE+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgICAqbmdJZj1cInRha2VQYXltZW50XCIgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiAqbmdJZj0nIWlzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHMgZ292dWstIS1wYWRkaW5nLWJvdHRvbS02IGdvdnVrLSEtcGFkZGluZy10b3AtNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkNDRCByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9J2lzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHMgZ292dWstIS1wYWRkaW5nLWJvdHRvbS02IGdvdnVrLSEtcGFkZGluZy10b3AtNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkV4Y2VwdGlvbiByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay10YWJsZV9faGVhZGVyLS1jdXN0b21cIiBzY29wZT1cImNvbFwiICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUmVtaXNzaW9ucyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgc3VtbWFyeS10YWJsZS1mb250XCI+e3sgY2xBbW91bnREdWUgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FzZS10cmFuc2FjdGlvbl9fY29sb3Igc3VtbWFyeS10YWJsZS1mb250XCIgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCI+e3t1bnByb2Nlc3NlZFJlY29yZENvdW50fX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCIgKm5nSWY9XCJ0YWtlUGF5bWVudFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FkZEZlZUJ0bkVuYWJsZWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT0nIWlzQWRkRmVlQnRuRW5hYmxlZCA/IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLWJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICBUYWtlIHRlbGVwaG9ueSBwYXltZW50XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuXG4gICAgICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICAgICAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIlxuICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0FueUZlZUdyb3VwQXZpbGFibGVcIlxuICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgW1BBWU1FTlRSRUZdPVwicGF5bWVudFJlZlwiXG4gICAgICBbSVNORVdQQ0lQQUxPRkZdPVwiaXNOZXdQY2lwYWxPZmZcIlxuICAgICAgW0lTT0xEUENJUEFMT0ZGXT1cImlzT2xkUGNpcGFsT2ZmXCJcbiAgICAgIChnZXRVbnByb2Nlc3NlZEZlZUNvdW50KSA9IFwiZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQpID0gXCJzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiIGdvdnVrLSEtbWFyZ2luLXRvcC05XCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5GZWVzPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudCBkdWU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BY3Rpb248L3RkPlxuXG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nRm9yPVwibGV0IHBheW1lbnRHcm91cCBvZiBwYXltZW50R3JvdXBzO1wiPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPlx0e3tmZWUuY29kZX19IDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e2ZlZS5kZXNjcmlwdGlvbn19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ZmVlLnZvbHVtZT8gZmVlLnZvbHVtZSA6ICctJ319PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tmZWUuY2FsY3VsYXRlZF9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCIgIFthdHRyLnJvd3NwYW5dPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoXCIgKm5nSWY9XCJwYXltZW50R3JvdXAub2xkICYmIGk9PTBcIj4ge3tnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCl8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0qIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cIiFwYXltZW50R3JvdXAub2xkXCI+IHt7Y2FsY3VsYXRlQW1vdW50RHVlKGZlZSkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319IDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cIiFwYXltZW50R3JvdXAub2xkXCI+XG4gICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmVGZWUoZmVlLmlkKVwiIFtuZ0NsYXNzXT0nIWlzQ2hlY2tBbW91bnRkdWVFeGlzdChmZWUuYW1vdW50X2R1ZSkgfHwgZmVlLnJlbWlzc2lvbnMgPyBcImRpc2FibGUtbGlua1wiIDogXCJcIic+UmVtb3ZlPC9hPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cInBheW1lbnRHcm91cC5vbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjb25maXJtUmVtb3ZlRmVlKGZlZS5pZClcIiBbbmdDbGFzc109J3BheW1lbnRHcm91cC5wYXltZW50cz8ubGVuZ3RoID4gMCB8fCBwYXltZW50R3JvdXAucmVtaXNzaW9ucz8ubGVuZ3RoID4gMCA/IFwiZGlzYWJsZS1saW5rXCIgOiBcIlwiJz5SZW1vdmU8L2E+XG4gICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiID5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI3XCI+Tm8gZmVlcyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtYmFubmVyXCIgKm5nSWY9XCJpc0hpc3RvcmljR3JvdXBBdmFpbGFibGVcIj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImhtY3RzLWJhbm5lcl9faWNvblwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGhlaWdodD1cIjI1XCIgd2lkdGg9XCIyNVwiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMy43LDE4LjVoLTIuNHYtMi40aDIuNFYxOC41eiBNMTIuNSwxMy43Yy0wLjcsMC0xLjItMC41LTEuMi0xLjJWNy43YzAtMC43LDAuNS0xLjIsMS4yLTEuMnMxLjIsMC41LDEuMiwxLjJ2NC44XG4gICAgICAgICAgQzEzLjcsMTMuMiwxMy4yLDEzLjcsMTIuNSwxMy43eiBNMTIuNSwwLjVjLTYuNiwwLTEyLDUuNC0xMiwxMnM1LjQsMTIsMTIsMTJzMTItNS40LDEyLTEyUzE5LjEsMC41LDEyLjUsMC41elwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJobWN0cy1iYW5uZXJfX21lc3NhZ2VcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhtY3RzLWJhbm5lcl9fYXNzaXN0aXZlXCI+aW5mb3JtYXRpb248L3NwYW4+XG4gICAgICAgICAgKiBUaGVzZSBmZWVzIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvZmZsaW5lLiBDaGVjayB0aGUgbm90ZXMgaW4gQ0NEIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLW5vLS1zdHlsZVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDAgfHwgcmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDwhLS0gcGF5bWVudHMgLS0+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5QYXltZW50czwvaDM+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjhcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2hhbm5lbDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPk1ldGhvZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTE1XCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbGxvY2F0aW9uIHN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgc3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgYWxsUGF5bWVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjYXBpdGFsaXplIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmFtb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI3XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5SZW1pc3Npb25zPC9oMz5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIGNvZGU8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInJlbWlzc2lvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHJlbWlzc2lvbiBvZiByZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmZlZV9jb2RlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmh3Zl9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZW1pc3Npb25zPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+Tm8gcmVtaXNzaW9ucyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cInRha2VQYXltZW50ICYmIGlzVHVybk9mZlwiPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy14bFwiPkNhc2UgdHJhbnNhY3Rpb25zPC9oMT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLW9uZS10aGlyZFwiIGFsaWduPVwicmlnaHRcIiA+XG4gICAgICAgIDxhIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUnOiAhaXNBZGRGZWVCdG5FbmFibGVkfSBcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiYnV0dG9uXCI+QWRkIGEgbmV3IGZlZTwvYT5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkNDRCByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgdG90YWxQYXltZW50cyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyB0b3RhbFJlbWlzc2lvbnMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgKHRvdGFsRmVlcyAtIHRvdGFsUmVtaXNzaW9ucykgLSB0b3RhbFBheW1lbnRzIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBObyBmZWVzIHN0YXJ0IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPkV4aXN0aW5nIGZlZXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkdyb3VwIGFtb3VudCBvdXRzdGFuZGluZzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjZcIj5ObyBmZWVzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE5vIGZlZXMgZW5kIC0tPlxuXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcGF5bWVudEdyb3VwIG9mIHBheW1lbnRHcm91cHNcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstZ3JpZC1jb2x1bW4tZnVsbC0tZ3JcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkdyb3VwIHJlZmVyZW5jZToge3twYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2V9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG5cbiAgICAgICAgPCEtLU5ldyBDb2RlIHN0YXJ0LS0+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctc21hbGxcIj5FeGlzaXRpbmcgZmVlczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9ZmVlY2xhc3M+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Db2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNhbGN1bGF0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyb3VwYW1vdW50IGdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkdyb3VwIGFtb3VudCBvdXRzdGFuZGluZzwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgIGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMVwiPnt7ZmVlLmNvZGV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMlwiPiB7e2ZlZS5kZXNjcmlwdGlvbn19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMyBhbGlnbi1jZW50ZXJcIj4ge3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w0XCI+IHt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w1XCI+IHt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w2IGdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDZcIiBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwiaT09MFwiPlxuICAgICAgICAgICAgICB7e2dldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGg9PTBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1pbnNldC10ZXh0IGdvdnVrLWluc2V0LXRleHRfX25vLWJvcmRlclwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnBheW1lbnRzIHx8IHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICA8ZGV0YWlscz5cbiAgICAgICAgPHN1bW1hcnkgY2xhc3M9XCJnb3Z1ay1oaWRldGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnlcIj5BbGxvY2F0ZWQgcGF5bWVudHMgYW5kIHJlbWlzc2lvbnM8L3NwYW4+XG4gICAgICAgIDwvc3VtbWFyeT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1ib3JkZXItbmFycm93XCI+XG4gICAgICAgICAgICAgIDwhLS0gcGF5bWVudHMgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5QYXltZW50czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNoYW5uZWw8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbGxvY2F0aW9uIHN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIHBheW1lbnRHcm91cC5wYXltZW50c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHBheW1lbnQucmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnJlZmVyZW5jZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGFubmVsIGdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuY2hhbm5lbCB8IGxvd2VyY2FzZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjYXBpdGFsaXplIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5hbW91bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5SZW1pc3Npb25zPC9zcGFuPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYXBwbGllZCBhZ2FpbnN0PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgcmVtaXNzaW9uIG9mIHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5mZWVfY29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX2Ftb3VudCB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnJlbWlzc2lvbnM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+Tm8gcmVtaXNzaW9ucyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICBcblxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFrZVBheW1lbnRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJsb2FkRmVlU3VtbWFyeVBhZ2UocGF5bWVudEdyb3VwKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApIDw9IDAgfHwgaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT0nKGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSA8PSAwIHx8IGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCkgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay1idXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgICAgICAgQWRkIHRlbGVwaG9uZSBwYXltZW50XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgICAgICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiXG4gICAgICBbSVNfQlVUVE9OX0VOQUJMRV09XCJ0YWtlUGF5bWVudFwiXG4gICAgICBbSVNUVVJOT0ZGXT1cImlzVHVybk9mZlwiXG4gICAgICBbSVNORVdQQ0lQQUxPRkZdPVwiaXNOZXdQY2lwYWxPZmZcIlxuICAgICAgW0lTT0xEUENJUEFMT0ZGXT1cImlzT2xkUGNpcGFsT2ZmXCJcbiAgICAgIFtJU1NGRU5BQkxFXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcbiAgICAgIFtGRUVfUkVDT1JEU19FWElTVFNdPVwiaXNGZWVSZWNvcmRzRXhpc3RcIiBcbiAgICAgIFtJU19PU19BTVRfQVZBSUxBQkxFXT1cImlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZVwiIFxuICAgICAgKHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCkgPSBcInNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCgkZXZlbnQpXCI+XG4gICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHNcIiAgKm5nSWY9XCJ0b3RhbFJlZnVuZEFtb3VudCA+IDAgJiYgdGFrZVBheW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHMtY29sMVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlN1cnBsdXMgcGF5bWVudHM8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICBUb3RhbCBzdXJwbHVzIHBheW1lbnRzIHJlY2VpdmVkOiB7e3RvdGFsUmVmdW5kQW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZSAmJiAhdGFrZVBheW1lbnRcIlxuICBbSVNfQlVUVE9OX0VOQUJMRV09XCJ0YWtlUGF5bWVudFwiXG4gIFtJU1RVUk5PRkZdPVwiaXNUdXJuT2ZmXCJcbiAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICBbRkVFX1JFQ09SRFNfRVhJU1RTXT1cImlzRmVlUmVjb3Jkc0V4aXN0XCIgXG4gIFtJU19PU19BTVRfQVZBSUxBQkxFXT1cImlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZVwiIFxuICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbjwvY2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzPlxuXG48ZGl2ICpuZ0lmPVwiIXRha2VQYXltZW50XCIgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvdyBnb3Z1ay1ncmlkX19zdXJwbHVzLXBheW1lbnRzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5Qcm9jZXNzZWQgcGF5bWVudHM8L3NwYW4+XG4gICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EYXRlIHVwZGF0ZWQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2hhbm5lbDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFsbG9jYXRpb24gc3RhdHVzPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlN0YXR1czwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICAqbmdGb3I9XCJsZXQgcGF5bWVudCBvZiBhbGxQYXltZW50c1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudC5yZWZlcmVuY2UsIHBheW1lbnQubWV0aG9kKVwiPnt7IHBheW1lbnQucmVmZXJlbmNlIH19PC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV91cGRhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNoYW5uZWwgZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5jaGFubmVsIHwgbG93ZXJjYXNlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhcGl0YWxpemUgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5tZXRob2QgfCBsb3dlcmNhc2V9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmFtb3VudCB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3tnZXRBbGxvY2F0aW9uU3RhdHVzKHBheW1lbnQpfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiOFwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbjwvZGl2PlxuPC9kaXY+XG5cbjxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nRkVFUkVNT1ZBTENPTkZJUk1BVElPTl8yJz5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbidcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmZWU/XG4gICAgPC9zdHJvbmc+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLWdyYlwiPlxuICAgIDxmb3JtIG5vdmFsaWRhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxSZW1vdmFsKClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlbW92ZUJ0bkRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0naXNSZW1vdmVCdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJ1xuICAgICAgKGNsaWNrKT1cInJlbW92ZUZlZShmZWVJZClcIj5cbiAgICAgICAgUmVtb3ZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4gIDwvbWFpbj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AuZ292dWstZ3JpZC1jb2x1bW4tZnVsbC0tZ3J7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpncmV5O3BvaW50ZXItZXZlbnRzOm5vbmV9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHN7bWFyZ2luOjIwcHggMH0uZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cz4uZ292dWstZ3JpZC1jb2x1bW4tZnVsbHtwYWRkaW5nOjB9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHMtY29sMXttYXJnaW4tYm90dG9tOjEwcHh9LmdvdnVrLWluc2V0LXRleHRfX25vLWJvcmRlcntib3JkZXItbGVmdDowfS5nb3Z1ay1oaWRldGV4dHtmb250LXNpemU6MjJweDtwYWRkaW5nLWJvdHRvbToxMHB4fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jaGFubmVsOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5nb3Z1ay1oZWFkaW5nLXhse2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MXB4fS5nb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDB9LnRvdGFscGF5bWVudHMuZ292dWstdGFibGVfX3Jvd3tib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDAwIWltcG9ydGFudH0uZ292dWstaW5zZXQtdGV4dHttYXJnaW4tbGVmdDoxZW19LmdvdnVrLWJ1dHRvbntmb250LXNpemU6MTlweH0uZ292dWstdGFibGVfX2NlbGwuZ292dWstdGFibGVfX2NlbGwtLWNvbDYuZ292dWstdGFibGVfX2N1c3RvbS0tY29sNiwuZ3JvdXBhbW91bnQuZ292dWstdGFibGVfX2hlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0fS5mZWVjbGFzc3twYWRkaW5nLWxlZnQ6LjdlbX0uYWxpZ24tY2VudGVye3RleHQtYWxpZ246Y2VudGVyfWRldGFpbHMgc3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX0uY2FzZS10cmFuc2FjdGlvbl9fY29sb3J7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGl0YWxpemU6OmZpcnN0LWxldHRlcnt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmdvdnVrLWluc2V0LXRleHRfX25vLWxlZnQtbWFyZ2lue21hcmdpbi1sZWZ0OjA7cGFkZGluZy1sZWZ0OjB9LndoaXRlc3BhY2UtaW5oZXJpdHt3aGl0ZS1zcGFjZTppbmhlcml0IWltcG9ydGFudH0uZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFre21hcmdpbjoxMHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDAhaW1wb3J0YW50fS5leGlzaXRuZy1mZWVze21hcmdpbi1sZWZ0OjEycHh9LmFkZC10ZWxlcGhvbnktcGF5bWVudHttYXJnaW4tdG9wOi0yZW07bWFyZ2luLWxlZnQ6LTJlbX0uZ292dWstdGFibGVfX2hlYWRlci0tY3VzdG9te3RleHQtYWxpZ246Y2VudGVyfS5kaXNhYmxlLWxpbmt7Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjojOGU4YzhjfS5wYW5lbC1uby0tc3R5bGV7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZX0uY29sLTI4e3dpZHRoOjI4JX0uY29sLTE1e3dpZHRoOjE1JX0uaG1jdHMtYmFubmVyPi5obWN0cy1iYW5uZXJfX21lc3NhZ2V7Zm9udC1zaXplOjE5cHg7bGluZS1oZWlnaHQ6MS4yNX0uc3VtbWFyeS10YWJsZS1mb250e2ZvbnQtc2l6ZTozNnB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIENhc2VUcmFuc2FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0YWtlUGF5bWVudDogYm9vbGVhbjtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBleGNSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwczogYW55W10gPSBbXTtcbiAgcGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgbm9uUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgYWxsUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIGZlZXM6IElGZWVbXSA9IFtdO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdG90YWxGZWVzOiBudW1iZXI7XG4gIHRvdGFsUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxOb25PZmZQYXltZW50czogbnVtYmVyO1xuICB0b3RhbFJlbWlzc2lvbnM6IG51bWJlcjtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZztcbiAgZGNuTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnRSZWY6IHN0cmluZztcbiAgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0V4Y2VwdGlvblJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXhjZXB0aW9uUmVjb3JkUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzQW55RmVlR3JvdXBBdmlsYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICBpc1JlbWlzc2lvbnNNYXRjaDogYm9vbGVhbjtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgaXNSZW1vdmVCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmZWVJZDpJRmVlO1xuICBjbEFtb3VudER1ZTogbnVtYmVyID0gMDtcbiAgdW5wcm9jZXNzZWRSZWNvcmRDb3VudDogbnVtYmVyO1xuICBpc0ZlZVJlY29yZHNFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG90YWxSZWZ1bmRBbW91bnQ6IE51bWJlcjtcbiAgY2FzZVR5cGU6IFN0cmluZztcbiAgbHNDY2ROdW1iZXI6IGFueSA9IGxzLmdldDxhbnk+KCdjY2ROdW1iZXInKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICBwcml2YXRlIGNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlOiBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5jYXNlVHlwZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRTtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuaXNOZXdQY2lwYWxPZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkY7XG4gICAgdGhpcy5pc09sZFBjaXBhbE9mZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICBpZih0aGlzLmxzQ2NkTnVtYmVyICE9PSB0aGlzLmNjZENhc2VOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NjZC1zZWFyY2g/dGFrZVBheW1lbnQ9dHJ1ZWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ107XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzID0gcGF5bWVudEdyb3Vwc1sncGF5bWVudF9ncm91cHMnXTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3I7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk7XG4gIH1cblxuICBzZXREZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gMC4wMDtcbiAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxGZWVzID0gMC4wMDtcbn1cblxuZ2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50czogYW55KXtcblxuICBsZXQgcGF5bWVudEFsbG9jYXRpb24gPSBwYXltZW50cy5wYXltZW50X2FsbG9jYXRpb24sXG4gICAgICBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+MDtcbiAgcmV0dXJuIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID8gcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgOiAnLSc7XG4gIC8vcmV0dXJuIFwiLVwiO1xuXG59XG5cbmNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk6IHZvaWQge1xuICBpZih0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlDQ0QodGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICByZWNvcmREYXRhID0+IHtcbiAgICAgICBpZihyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPiAwICYmIHJlY29yZERhdGFbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlID4wKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+MCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnZGNuJykge1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPiAwKVxuICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuICBjYWxjdWxhdGVBbW91bnRzKCk6IHZvaWQge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSAwLjAwO1xuICBcbiAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICAgICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgICAgIGlmKGZlZS5kYXRlX2NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgbGV0IGEgPSBmZWUuYW1vdW50X2R1ZSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBsZXQgYiA9IGZlZS5hbW91bnRfZHVlIDw9IDA7XG4gICAgICAgICAgICAgIHRoaXMuY2xBbW91bnREdWUgPSBhID8gdGhpcy5jbEFtb3VudER1ZSArIGZlZS5uZXRfYW1vdW50IDogYiA/IHRoaXMuY2xBbW91bnREdWUgKyAwIDogdGhpcy5jbEFtb3VudER1ZSArIGZlZS5hbW91bnRfZHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVlWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddID0gcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddO1xuICAgICAgICAgICAgdGhpcy5mZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICAgICAgdGhpcy5mZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZih0aGlzLmlzVHVybk9mZil7XG4gICAgICAgIHRoaXMudG90YWxGZWVzID0gZmVlc1RvdGFsO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICAgICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgICAgIGxldCBhbGxvY2F0aW9uTGVuID0gcGF5bWVudC5wYXltZW50X2FsbG9jYXRpb247XG5cbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgaWYoYWxsb2NhdGlvbkxlbi5sZW5ndGggPT09IDAgfHwgYWxsb2NhdGlvbkxlbi5sZW5ndGggPiAwICYmIGFsbG9jYXRpb25MZW5bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09J0FsbG9jYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBub25PZmZMaW5lUGF5bWVudCA9IG5vbk9mZkxpbmVQYXltZW50ICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYoIGFsbG9jYXRpb25MZW4ubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vblBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGFsbG9jYXRpb25MZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcbiAgICAgICAgICAgIHRoaXMuYWxsUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFBheW1lbnRzID0gcGF5bWVudHNUb3RhbDtcbiAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgIGlmKCF0aGlzLmlzVHVybk9mZil7XG4gICAgICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IG5vbk9mZkxpbmVQYXltZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc2lzb24gPT4ge1xuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzaXNvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9ucy5wdXNoKHJlbWlzaXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSByZW1pc3Npb25zVG90YWw7XG4gICAgfSk7XG5cbiAgfVxuICBjYWxjdWxhdGVSZWZ1bmRBbW91bnQoKSB7XG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgbGV0IGlzTmV3UGF5bWVudEdyb3VwID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2goKHBheW1lbnRHcm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgICAgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICAgIGZlZXMgPSBbXTtcblxuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG5cbiAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmKGZlZS5kYXRlX2NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpc05ld1BheW1lbnRHcm91cCA9IHRydWU7XG4gICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XVsnb2xkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGF5bWVudEdyb3Vwc1tpbmRleF0uZmVlcyA9IGZlZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICAgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAoZmVlc1RvdGFsIC0gcmVtaXNzaW9uc1RvdGFsKSAtIHBheW1lbnRzVG90YWw7XG4gICAgICAgICAgICBpZihncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRSZWYgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihwYXltZW50R3JvdXAuZmVlcyAmJiBwYXltZW50R3JvdXAuZmVlcy5sZW5ndGggPiAwICYmIGdycE91dHN0YW5kaW5nQW1vdW50IDw9IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmKCghaXNOZXdQYXltZW50R3JvdXAgJiYgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUpIHx8ICghaXNOZXdQYXltZW50R3JvdXAgJiYgIXRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSkge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0b3RhbFJlZnVuZEFtb3VudCA9IDAsXG4gICAgICAgIGlzRmVlQW1vdW50WmVybyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICAgIGxldCBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IDAuMDAsXG4gICAgICAgICAgICBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwO1xuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgICAgdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgICAgaWYoZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAgXG4gICAgICAgICAgICBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgICAgICAgICAgIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgaWYodG90YWxSZWZ1bmRBbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0b3RhbFJlZnVuZEFtb3VudCA9IGdycE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gKHRvdGFsUmVmdW5kQW1vdW50ICsgZ3JwT3V0c3RhbmRpbmdBbW91bnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGdycE91dHN0YW5kaW5nQW1vdW50ID4gMCB8fCAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPT09IDAgJiYgaXNGZWVBbW91bnRaZXJvKSkge1xuICAgICAgICAgICAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG90YWxSZWZ1bmRBbW91bnQgKiAtMTtcbiAgICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7O1xuICB9XG5cbiAgcmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYoIXRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlIHx8IHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgbGV0IHVybCA9IHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgICB1cmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICAgdXJsICs9YCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgICAgdXJsICs9IHRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICAgdXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRSZWY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cbiAgbG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24gPSBudWxsO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gIH1cblxuICBnb1RvUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwOiBhbnkpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCA9IHBheW1lbnRHcm91cC5wYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gIH1cblxuICBnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KHtwYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnRSZWZlcmVuY2UsIHBheW1lbnRNZXRob2R9KTtcbiAgfVxuXG4gIHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCh1bnByb2Nlc3NlZFJlY29yZElkOiBzdHJpbmcpIHtcbiAgICBpZiAoIHVucHJvY2Vzc2VkUmVjb3JkSWQgKSB7XG4gICAgICBpZih0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICB9ICAgICAgXG4gICAgICB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXRVbnByb2Nlc3NlZEZlZUNvdW50KHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcikge1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRDb3VudCA9IHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnREdWUoZmVlOiBJRmVlKSB7XG5cbiAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFtb3VudF9kdWUgIT09IHVuZGVmaW5lZD8gZmVlLmFtb3VudF9kdWUgOiBmZWUubmV0X2Ftb3VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiMC4wMFwiO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmVGZWUoZmVlOiBJRmVlKXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuICBjYW5jZWxSZW1vdmFsKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuICByZW1vdmVGZWUoZmVlOiBhbnkpe1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWUpLnN1YnNjcmliZShcbiAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYXltZW50VG9QYXlodWJSZXF1ZXN0IHtcbiAgY3VycmVuY3kgPSAnR0JQJztcbiAgZGVzY3JpcHRpb24gPSAnUGF5QnViYmxlIHBheW1lbnQnO1xuICBjaGFubmVsID0gJ3RlbGVwaG9ueSc7XG4gIHByb3ZpZGVyID0gJ3BjaSBwYWwnO1xuICBjYXNlX3R5cGU6IHN0cmluZztcblxuICBjY2RfY2FzZV9udW1iZXI6IHN0cmluZztcbiAgYW1vdW50OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY2NkX2Nhc2VfbnVtYmVyOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBjYXNlVHlwZTogc3RyaW5nKSB7XG4gIHRoaXMuY2NkX2Nhc2VfbnVtYmVyID0gY2NkX2Nhc2VfbnVtYmVyO1xuICB0aGlzLmFtb3VudCA9IDxhbnk+YW1vdW50LnRvRml4ZWQoMik7XG4gIHRoaXMuY2FzZV90eXBlPSBjYXNlVHlwZTtcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFBheWh1YkFudGVubmFSZXF1ZXN0IHtcbiAgY3VycmVuY3kgPSAnR0JQJztcbiAgY2FzZV90eXBlOiBzdHJpbmc7XG4gIGNjZF9jYXNlX251bWJlcjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihjY2RfY2FzZV9udW1iZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGNhc2VUeXBlOiBzdHJpbmcpIHtcbiAgdGhpcy5jY2RfY2FzZV9udW1iZXIgPSBjY2RfY2FzZV9udW1iZXI7XG4gIHRoaXMuYW1vdW50ID0gPGFueT5hbW91bnQudG9GaXhlZCgyKTtcbiAgdGhpcy5jYXNlX3R5cGU9IGNhc2VUeXBlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5aHViQW50ZW5uYVJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheWh1YkFudGVubmFSZXF1ZXN0JztcbmltcG9ydCB7IFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWZlZS1zdW1tYXJ5JyxcbiAgdGVtcGxhdGU6IGBcbjxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiICpuZ0lmPVwiaXNCYWNrQnV0dG9uRW5hYmxlXCI+XG4gIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiICpuZ0lmPVwiIWlzVHVybk9mZlwiPlxuICAgICAgPGEgKGNsaWNrKT1cImxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmsgZ292dWstbGFiZWxcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgPC9vbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZlZS1zdW1tYXJ5XCIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cbiAgICA8bWFpbiBjbGFzcz1cImdvdnVrLW1haW4td3JhcHBlclwiPlxuICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVTVU1NQVJZJz5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIj5cbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmcteGxhcmdlXCI+RmVlIFN1bW1hcnk8L2gxPlxuICAgIDwvZGl2PlxuXG5cbiAgICDDgsKgPGRpdsOCwqBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLW9uZS10aGlyZFwiw4LCoGFsaWduPVwicmlnaHRcIj5cbiAgICAgIMOCwqDDgsKgw4LCoMOCwqDDgsKgw4LCoDxidXR0b27DgsKgICpuZ0lmPVwiIWlzVHVybk9mZlwiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQsJ3N1bW1hcnknKVwiXG4gICAgICDDgsKgw4LCoMOCwqDDgsKgw4LCoMOCwqBbZGlzYWJsZWRdPVwiaXNQYXltZW50RXhpc3RcIlxuICAgICAgw4LCoMOCwqDDgsKgw4LCoMOCwqDDgsKgW25nQ2xhc3NdPSdpc1BheW1lbnRFeGlzdCA/w4LCoFwiYnV0dG9uw4LCoGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiw4LCoDrDgsKgXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICAgICAgQWRkIGEgbmV3IGZlZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxhICpuZ0lmPVwiaXNUdXJuT2ZmXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCIgY2xhc3M9XCJidXR0b25cIj5BZGQgYSBuZXcgZmVlPC9hPlx0XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cbiAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICAgIFBheW1lbnQgR3JvdXAgZGV0YWlscyBjb3VsZCBub3QgYmUgcmV0cmlldmVkXG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIiAgKm5nSWY9XCIhZXJyb3JNZXNzYWdlICYmIHBheW1lbnRHcm91cFwiPlxuICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCIgc2NvcGU9XCJjb2xcIj5GZWUgQ29kZTwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCIgc2NvcGU9XCJjb2xcIj5GZWUgZGVzY3JpcHRpb248L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIGNvZGU8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgZmVlIG9mIHBheW1lbnRHcm91cC5mZWVzOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5jb2RlIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBncmV5LXRleHRcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ3JleS10ZXh0IHN1YmNvbHVtbi0xXCI+RmVlIGFtb3VudDo8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCIgKm5nSWY9XCIhaXNUdXJuT2ZmXCI+XG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmVGZWUoZmVlLmlkKVwiIFtuZ0NsYXNzXT0naXNQYXltZW50RXhpc3QgfHwgZmVlLnJlbWlzc2lvbnMgPyBcImRpc2FibGUtbGlua1wiIDogXCJcIic+cmVtb3ZlIGZlZTwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY29uZmlybVJlbW92ZUZlZShmZWUuaWQpXCI+cmVtb3ZlIGZlZTwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nSWY9XCJmZWUudm9sdW1lICYmIGZlZS52b2x1bWUgPiAwXCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5Wb2x1bWU6PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZmVlLnZvbHVtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ3JleS10ZXh0IHN1YmNvbHVtbi0xXCI+RmVlIHRvdGFsOjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tMlwiPnt7IGZlZS5jYWxjdWxhdGVkX2Ftb3VudCAgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ3JleS10ZXh0IHN1YmNvbHVtbi0xXCI+UmVtaXNzaW9uIGFtb3VudDo8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50PyAoIGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicpIDogJy0nIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCIgKm5nSWY9XCIhaXNUdXJuT2ZmXCI+IFxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJhZGRSZW1pc3Npb24oZmVlKVwiICpuZ0lmPVwiKGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgPT09IDAgfHwgIWdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQpICYmICFpc1BheW1lbnRFeGlzdFwiPlxuICAgICAgICAgICAgICAgICAgRGVkdWN0IHJlbWlzc2lvblxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj4gXG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImFkZFJlbWlzc2lvbihmZWUpXCIgKm5nSWY9XCJnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ID09PSAwIHx8ICFnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgRGVkdWN0IHJlbWlzc2lvblxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ3JleS10ZXh0IHN1YmNvbHVtbi0xXCI+VG90YWwgYWZ0ZXIgcmVtaXNzaW9uOjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tMlwiPnt7IGZlZS5uZXRfYW1vdW50ICB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGQgc3ViY29sdW1uLTFcIj5Ub3RhbCBwYXltZW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgdG90YWxBZnRlclJlbWlzc2lvbiAtIG91dFN0YW5kaW5nQW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ292dWstIS1mb250LXdlaWdodC1ib2xkIHN1YmNvbHVtbi0xXCI+VG90YWwgb3V0c3RhbmRpbmcgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgb3V0U3RhbmRpbmdBbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nSWY9XCIhYnNQYXltZW50RGNuTnVtYmVyICYmIGlzT2xkUGNpcGFsT2ZmICYmIGlzTmV3UGNpcGFsT2ZmXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwIGdvdnVrLWZvcm0tZ3JvdXAtLW1nXCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiPlxuICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1tXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZyBnb3Z1ay1maWVsZHNldF9faGVhZGluZy0tZnpcIj5cbiAgICAgICAgICAgICAgICAgIFdoaWNoIHN5c3RlbSBhcmUgeW91IHVzaW5nIHRvIHRha2UgdGhlIHBheW1lbnQ/XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiY2hhbmdlZC1uYW1lXCIgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgWyhuZ01vZGVsKV09XCJwbGF0Rm9ybVwiIHR5cGU9XCJyYWRpb1wiIGFyaWEtbGFiZWw9XCI4eDhcIiB2YWx1ZT1cIjh4OFwiPlx0XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiY2hhbmdlZC1uYW1lXCI+XHRcbiAgICAgICAgICAgICAgICAgICAgOHg4XHRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHRcbiAgICAgICAgICAgICAgICA8L2Rpdj5cdFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cdFxuICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiY2hhbmdlZC1uYW1lLTJcIiBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBbKG5nTW9kZWwpXT1cInBsYXRGb3JtXCIgdHlwZT1cInJhZGlvXCIgYXJpYS1sYWJlbD1cIkFudGVubmFcIiB2YWx1ZT1cIkFudGVubmFcIj5cdFxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbFwiIGZvcj1cImNoYW5nZWQtbmFtZS0yXCI+XHRcbiAgICAgICAgICAgICAgICAgICAgQW50ZW5uYVx0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlx0XG4gICAgICAgICAgICAgICAgPC9kaXY+XHRcbiAgICAgICAgICAgICAgPC9kaXY+XHRcbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+IFxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhYnNQYXltZW50RGNuTnVtYmVyXCIgdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJ0YWtlUGF5bWVudCgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidG90YWxGZWUgPD0gMCB8fCAhcGxhdEZvcm0gfHwgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPSd0b3RhbEZlZSA8PSAwIHx8ICFwbGF0Rm9ybSB8fCBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgICAgICAgICBUYWtlIHBheW1lbnRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2Uob3V0U3RhbmRpbmdBbW91bnQsIGlzRmVlQW1vdW50WmVybylcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvdXRTdGFuZGluZ0Ftb3VudCA+IDAgfHwgKGlzRmVlQW1vdW50WmVybyAmJiBvdXRTdGFuZGluZ0Ftb3VudCA9PT0gMClcIj5cbiAgICAgICAgICAgICAgICAgIEFsbG9jYXRlIHBheW1lbnRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvdXRTdGFuZGluZ0Ftb3VudCA8IDAgfHwgKCFpc0ZlZUFtb3VudFplcm8gJiYgb3V0U3RhbmRpbmdBbW91bnQgPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICBDb250aW51ZVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L21haW4+XG48L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nXCI+XG4gICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVSRU1PVkFMQ09ORklSTUFUSU9OXzEnPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmVlP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncmJcIj5cbiAgICAgICAgPGZvcm0gbm92YWxpZGF0ZT5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxSZW1pc3Npb24oKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZW1vdmVCdG5EaXNhYmxlZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPSdpc1JlbW92ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZlZShjdXJyZW50RmVlKVwiPlxuICAgICAgICAgICAgUmVtb3ZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPGNjcGF5LWFkZC1yZW1pc3Npb24gKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkX3JlbWlzc2lvbicgJiYgY3VycmVudEZlZVwiXG4gW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuIFtpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiIFxuIFtpc09sZFBjaXBhbE9mZl09XCJpc09sZFBjaXBhbE9mZlwiIFxuIFtpc05ld1BjaXBhbE9mZl09XCJpc05ld1BjaXBhbE9mZlwiIFxuIFtmZWVdPVwiY3VycmVudEZlZVwiIFxuIFtjYXNlVHlwZV09XCJjYXNlVHlwZVwiIFxuIFtjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIiBcbiBbcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cFJlZlwiIFxuIChjYW5jZWxSZW1pc3Npb24pPVwiY2FuY2VsUmVtaXNzaW9uKClcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG4gPGlucHV0ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheWh1Yl92aWV3JyAmJiBwYXlodWJIdG1sXCIgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1BDSVBBTCc+XG48ZGl2ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheWh1Yl92aWV3JyAmJiBwYXlodWJIdG1sXCIgW2lubmVySFRNTF09XCJwYXlodWJIdG1sIHwgc2FuaXRpemVIdG1sXCIgaWQ9XCJwYXlodWItaHRtbC1pZFwiPjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5mZWUtc3VtbWFyeSAuZ3JleS10ZXh0e2NvbG9yOiM2YjczNzY7Zm9udC13ZWlnaHQ6NTAwfS5mZWUtc3VtbWFyeSAuZ292dWstdGFibGV7bWFyZ2luLWJvdHRvbTowfS5mZWUtc3VtbWFyeSAubm8tYm9yZGVye2JvcmRlcjpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZmVlLXN1bW1hcnkgdGFibGUgdGQsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoe2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjUwMDt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWF4LXdpZHRoOjMyMHB4fS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAubm8tcGFkZGluZywuZmVlLXN1bW1hcnkgdGFibGUgdGggLm5vLXBhZGRpbmd7cGFkZGluZzowfS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAuc3ViY29sdW1uLTEsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5zdWJjb2x1bW4tMXt3aWR0aDo0NSV9LmZlZS1zdW1tYXJ5IHRhYmxlIHRkIC5zdWJjb2x1bW4tMiwuZmVlLXN1bW1hcnkgdGFibGUgdGggLnN1YmNvbHVtbi0ye3dpZHRoOjI1JTt0ZXh0LWFsaWduOnJpZ2h0fS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAuc3ViY29sdW1uLTMsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5zdWJjb2x1bW4tM3t3aWR0aDozMCU7dGV4dC1hbGlnbjpjZW50ZXJ9LmdvdnVrLWJ1dHRvbi1ncmJ7cGFkZGluZy1ib3R0b206MjBweH0uZ292dWstYnV0dG9uLWdyYiAuZ292dWstYnV0dG9uLS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojZGVlMGUyO2JveC1zaGFkb3c6MCAycHggMCAjODU4Njg4O2NvbG9yOiMwYjBjMGM7bWFyZ2luLXJpZ2h0OjEwcHh9LmdvdnVrLWZvcm0tZ3JvdXAtLW1ne21hcmdpbi10b3A6MTBweCFpbXBvcnRhbnR9LmdvdnVrLWZpZWxkc2V0X19oZWFkaW5nLS1mentmb250LXNpemU6MTZweH0ucmVtaXNzaW9uRGlzYWJsZXtjb2xvcjpncmV5O2N1cnNvcjpkZWZhdWx0fS5oZWFkaW5nLXhsYXJnZXttYXJnaW46MCAwIDE0cHggLTIwcHh9LmdvdnVrLXNlbGVjdC0tY3VzdG9te3dpZHRoOjUwJX0uZGlzYWJsZS1saW5re2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6IzhlOGM4Y31gXVxufSlcblxuZXhwb3J0IGNsYXNzIEZlZVN1bW1hcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IHN0cmluZztcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IHN0cmluZztcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IHN0cmluZztcblxuXG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBjdXJyZW50RmVlOiBJRmVlO1xuICB0b3RhbEZlZTogbnVtYmVyO1xuICBwYXlodWJIdG1sOiBTYWZlSHRtbDtcbiAgc2VydmljZTogc3RyaW5nID0gXCJcIjtcbiAgcGxhdEZvcm06IHN0cmluZyA9IFwiXCI7XG4gIHVwUGF5bWVudEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjpzdHJpbmc7XG4gIGlzQmFja0J1dHRvbkVuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIG91dFN0YW5kaW5nQW1vdW50OiBudW1iZXI7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlOztcbiAgdG90YWxBZnRlclJlbWlzc2lvbjogbnVtYmVyID0gMDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbW92ZUJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudEV4aXN0OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uc0V4aXN0OiBCb29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuXG4gICAgaWYgKCghdGhpcy5pc09sZFBjaXBhbE9mZiAmJiB0aGlzLmlzTmV3UGNpcGFsT2ZmKSkge1xuICAgICAgdGhpcy5wbGF0Rm9ybSA9ICc4eDgnO1xuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNPbGRQY2lwYWxPZmYgJiYgIXRoaXMuaXNOZXdQY2lwYWxPZmYpKSB7XG4gICAgICB0aGlzLnBsYXRGb3JtID0gJ0FudGVubmEnO1xuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNPbGRQY2lwYWxPZmYgJiYgdGhpcy5pc05ld1BjaXBhbE9mZikpe1xuICAgICAgdGhpcy5wbGF0Rm9ybSA9ICc4eDgnO1xuICAgIH1cblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAodGhpcy5ic1BheW1lbnREY25OdW1iZXIpIHtcbiAgICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0UGF5bWVudEdyb3VwKCk7XG4gIH1cblxuICAgIGdldFVuYXNzaWduZWRQYXltZW50bGlzdCgpIHtcbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gPT09ICdkY24nKSB7XG4gICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlEQ04odGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVIpLnN1YnNjcmliZShcbiAgICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgICBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cykge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucmVzcG9uc2libGVfc2VydmljZV9pZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSAnZXJyb3InO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgICBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cykge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucmVzcG9uc2libGVfc2VydmljZV9pZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSAnZXJyb3InOyAgXG4gICAgICAgICAgfSAgICAgIFxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG4gIGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWVDb2RlOiBzdHJpbmcpOiBJUmVtaXNzaW9uIHtcbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXAgJiYgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucyAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgIHJldHVybiByZW1pc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhZGRSZW1pc3Npb24oZmVlOiBJRmVlKSB7XG4gICAgdGhpcy5jdXJyZW50RmVlID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdhZGRfcmVtaXNzaW9uJztcbiAgfVxuXG4gIGdldFBheW1lbnRHcm91cCgpIHtcbiAgICBsZXQgZmVlcyA9IFtdO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnRHcm91cERldGFpbHModGhpcy5wYXltZW50R3JvdXBSZWYpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuICAgICAgICB0aGlzLmlzUGF5bWVudEV4aXN0ID0gcGF5bWVudEdyb3VwLnBheW1lbnRzID8gcGF5bWVudEdyb3VwLnBheW1lbnRzLmxlbmd0aCA+IDAgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNFeGlzdCA9IHBheW1lbnRHcm91cC5yZW1pc3Npb25zID8gcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMubGVuZ3RoID4gMCA6IGZhbHNlO1xuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uICA9IHRoaXMudG90YWxBZnRlclJlbWlzc2lvbiAgKyBmZWUubmV0X2Ftb3VudDtcbiAgICAgICAgICAgICAgaWYoZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZlZUFtb3VudFplcm8gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmKHJlbS5mZWVfY29kZSA9PT0gZmVlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgICAgICBpZighdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCkge1xuICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMgPSBmZWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRTdGFuZGluZ0Ftb3VudCA9IHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5jYWxjdWxhdGVPdXRTdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmVGZWUoZmVlOiBJRmVlKXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRGZWUgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nO1xuICB9XG5cbiAgcmVtb3ZlRmVlKGZlZTogYW55KXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlKS5zdWJzY3JpYmUoXG4gICAgICAoc3VjY2VzczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucGF5bWVudEdyb3VwLmZlZXMgJiYgdGhpcy5wYXltZW50R3JvdXAuZmVlcy5sZW5ndGggPiAxKXtcbiAgICAgICAgICB0aGlzLnRvdGFsQWZ0ZXJSZW1pc3Npb24gPSAwO1xuICAgICAgICAgIHRoaXMuZ2V0UGF5bWVudEdyb3VwKCk7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiBsb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgZmVhdHVyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbGV0IHBhcnRVcmwgPSBgc2VsZWN0ZWRPcHRpb249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OfWA7XG4gICAgICBwYXJ0VXJsICs9dGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICAgcGFydFVybCArPWAmY2FzZVR5cGU9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0FTRVRZUEV9YDtcbiAgICAgIHBhcnRVcmwgKz10aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLmlzT2xkUGNpcGFsT2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcblxuICAgIGxldCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJiR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuICBjYW5jZWxSZW1pc3Npb24oKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG4gIHJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKGV2ZW50OiBhbnksIHBhZ2U/OiBzdHJpbmcpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCBwYXJ0VXJsID10aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgICBwYXJ0VXJsICs9YCZjYXNlVHlwZT0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRX1gO1xuICAgICAgcGFydFVybCArPXRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICAgcGFydFVybCArPXRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuXG4gICAgaWYodGhpcy52aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbicgfHwgdGhpcy52aWV3U3RhdHVzID09PSAnYWRkX3JlbWlzc2lvbicpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHVybCA9IGAvZmVlLXNlYXJjaD9jY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT059JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuICB0YWtlUGF5bWVudCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUGF5bWVudFRvUGF5aHViUmVxdWVzdCh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMub3V0U3RhbmRpbmdBbW91bnQsIHRoaXMuY2FzZVR5cGUpLFxuICAgICAgYW50ZW5uYVJlcUJvZHkgPSBuZXcgUGF5aHViQW50ZW5uYVJlcXVlc3QodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLm91dFN0YW5kaW5nQW1vdW50LCB0aGlzLmNhc2VUeXBlKTtcblxuICAgIGlmKHRoaXMucGxhdEZvcm0gPT09ICc4eDgnKSB7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudFRvUGF5SHViKHJlcXVlc3RCb2R5LCB0aGlzLnBheW1lbnRHcm91cFJlZikuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2NhdGlvbi5nbyhgcGF5bWVudC1oaXN0b3J5P3ZpZXc9ZmVlLXN1bW1hcnlgKTtcbiAgICAgICAgICB0aGlzLnBheWh1Ykh0bWwgPSByZXNwb25zZTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5aHViX3ZpZXcnO1xuICAgICAgICAgIHRoaXMuaXNCYWNrQnV0dG9uRW5hYmxlPWZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL3BjaS1wYWwtZmFpbHVyZScpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSBpZih0aGlzLnBsYXRGb3JtID09PSAnQW50ZW5uYScpIHtcblxuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRBbnRlbm5hVG9QYXlIdWIoYW50ZW5uYVJlcUJvZHksIHRoaXMucGF5bWVudEdyb3VwUmVmKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmlzQmFja0J1dHRvbkVuYWJsZT1mYWxzZTtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvbWFrZVBheW1lbnRCeVRlbGVwaG9uZXlQcm92aWRlcic7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvcGNpLXBhbC1mYWlsdXJlJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBnb1RvQWxsb2NhdGVQYWdlKG91dFN0YW5kaW5nQW1vdW50OiBudW1iZXIsIGlzRmVlQW1vdW50WmVybzogQm9vbGVhbikge1xuICAgIGlmIChvdXRTdGFuZGluZ0Ftb3VudCA+IDAgfHwgKG91dFN0YW5kaW5nQW1vdW50ID09PSAwICYmIGlzRmVlQW1vdW50WmVybykpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRHcm91cFJlZjtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdhbGxvY2F0ZS1wYXltZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9XG4gIH1cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWVycm9yLWJhbm5lcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlcIiBhcmlhLWxhYmVsbGVkYnk9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCIgcm9sZT1cImFsZXJ0XCIgdGFiaW5kZXg9XCItMVwiIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiPlxuICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZSBnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZS1jdXN0b21cIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICAgIHt7ZXJyb3JNZXNzYWdlLnRpdGxlfX1cbiAgPC9oMj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgICB7e2Vycm9yTWVzc2FnZS5ib2R5fX1cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5gLFxuICBzdHlsZXM6IFtgLmdvdnVrLWVycm9yLXN1bW1hcnkgaDJ7Zm9udC1zaXplOjI0cHh9LmdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3QgbGl7Zm9udC1zaXplOjE5cHh9YF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBFcnJvckJhbm5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnZXJyb3JNZXNzYWdlJykgZXJyb3JNZXNzYWdlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxufVxuIiwiXG5leHBvcnQgY2xhc3MgVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0IHtcbiAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czogYW55O1xuICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50X3JlZmVyZW5jZTogc3RyaW5nO1xuICB1bmlkZW50aWZpZWRfcmVhc29uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudF9yZWZlcmVuY2UgOiBzdHJpbmcsIHVuaWRlbnRpZmllZF9yZWFzb246IGFueSkge1xuICAgIHRoaXMucGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1cyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIG5hbWU6IFwiVW5pZGVudGlmaWVkXCJcbiAgICB9O1xuICAgIHRoaXMucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPSBwYXltZW50X2dyb3VwX3JlZmVyZW5jZSA7XG4gICAgdGhpcy5wYXltZW50X3JlZmVyZW5jZT0gcGF5bWVudF9yZWZlcmVuY2U7XG4gICAgdGhpcy51bmlkZW50aWZpZWRfcmVhc29uPSB1bmlkZW50aWZpZWRfcmVhc29uO1xuXG4gIH1cblxuXG5cbn1cbiIsImltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSBcIi4vSUJTUGF5bWVudHNcIjtcblxuZXhwb3J0IGNsYXNzIEFsbG9jYXRlUGF5bWVudFJlcXVlc3Qge1xuICBhbW91bnQ6IE51bWJlcjtcbiAgYmFua2VkX2RhdGU6IFN0cmluZztcbiAgY2NkX2Nhc2VfbnVtYmVyOiBTdHJpbmc7XG4gIGV4Y2VwdGlvbl9yZWNvcmQ6IHN0cmluZztcbiAgY3VycmVuY3k6IFN0cmluZztcbiAgZG9jdW1lbnRfY29udHJvbF9udW1iZXI6IFN0cmluZztcbiAgZXh0ZXJuYWxfcHJvdmlkZXI6IFN0cmluZztcbiAgZ2lyb19zbGlwX25vOiBTdHJpbmc7XG4gIHBheWVyX25hbWU6IFN0cmluZztcbiAgcGF5bWVudF9jaGFubmVsOiBPYmplY3Q7XG4gIHBheW1lbnRfc3RhdHVzOiBPYmplY3Q7XG4gIHBheW1lbnRfbWV0aG9kOiBTdHJpbmc7XG4gIGNhc2VfdHlwZTogU3RyaW5nO1xuICBwYXltZW50X2FsbG9jYXRpb25fZHRvPzoge1xuICAgIGFsbG9jYXRpb25fcmVhc29uOiBTdHJpbmcsXG4gICAgYWxsb2NhdGlvbl9zdGF0dXM6IFN0cmluZyxcbiAgICBleHBsYW5hdGlvbjogU3RyaW5nLFxuICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IE9iamVjdCxcbiAgICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogU3RyaW5nLFxuICAgIHBheW1lbnRfcmVmZXJlbmNlOiBTdHJpbmcsXG4gICAgcmVhc29uOiBTdHJpbmcsXG4gICAgcmVjZWl2aW5nX29mZmljZTogU3RyaW5nLFxuICAgIHVuaWRlbnRpZmllZF9yZWFzb246IFN0cmluZyxcbiAgICB1c2VyX2lkOiBTdHJpbmcsXG4gICAgdXNlcl9uYW1lOiBTdHJpbmcsXG4gICAgY2FzZV90eXBlOiBTdHJpbmdcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNjZF9jYXNlX251bWJlciA6IHN0cmluZywgdW5BbGxvY2F0ZWRQYXltZW50OiBJQlNQYXltZW50cywgY2FzZVR5cGU6IHN0cmluZywgZXhjZXB0aW9uUmVjb3JkOiBzdHJpbmcsIGFsbG9jYXRlZFJlcXVlc3Q/OiBhbnkpIHtcbiAgICB0aGlzLmFtb3VudCA9IHVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQ7XG4gICAgdGhpcy5iYW5rZWRfZGF0ZSA9IHVuQWxsb2NhdGVkUGF5bWVudC5kYXRlX2JhbmtlZDtcbiAgICB0aGlzLmNjZF9jYXNlX251bWJlciA9IGNjZF9jYXNlX251bWJlcjtcbiAgICB0aGlzLmV4Y2VwdGlvbl9yZWNvcmQgPSBleGNlcHRpb25SZWNvcmQ7XG4gICAgdGhpcy5jdXJyZW5jeT0gdW5BbGxvY2F0ZWRQYXltZW50LmN1cnJlbmN5O1xuICAgIHRoaXMuZG9jdW1lbnRfY29udHJvbF9udW1iZXIgPSB1bkFsbG9jYXRlZFBheW1lbnQuZGNuX3JlZmVyZW5jZTtcbiAgICB0aGlzLmV4dGVybmFsX3Byb3ZpZGVyID0gJ2V4ZWxhJztcbiAgICB0aGlzLmdpcm9fc2xpcF9ubyA9IHVuQWxsb2NhdGVkUGF5bWVudC5iZ2NfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5ZXJfbmFtZSA9IHVuQWxsb2NhdGVkUGF5bWVudC5wYXllcl9uYW1lO1xuICAgIHRoaXMucGF5bWVudF9jaGFubmVsID0ge1xuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgbmFtZTogJ2J1bGsgc2NhbidcbiAgICB9O1xuICAgIHRoaXMucGF5bWVudF9zdGF0dXMgPXtcbiAgICAgIGRlc2NyaXB0aW9uOiAnYnVsayBzY2FuIHBheW1lbnQgY29tcGxldGVkJyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH1cbiAgICB0aGlzLnBheW1lbnRfbWV0aG9kID0gdW5BbGxvY2F0ZWRQYXltZW50LnBheW1lbnRfbWV0aG9kO1xuICAgIHRoaXMuY2FzZV90eXBlPSBjYXNlVHlwZTtcbiAgICBpZihhbGxvY2F0ZWRSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnBheW1lbnRfYWxsb2NhdGlvbl9kdG8gPSBhbGxvY2F0ZWRSZXF1ZXN0O1xuICAgIH1cblxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1VuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1hcmstdW5pZGVudGlmaWVkLXBheW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJta3BheS11bmlkZW50aWZpZWRcIiA+XG4gIDxkaXYgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbkZvcm0nXCI+XG4gICAgPGlucHV0ICNteUlucHV0ICB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nTUFSS1VOSURFTlRJRklFRCc+XG4gICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPk1hcmsgcGF5bWVudCBhcyB1bmlkZW50aWZpZWQ8L2gxPlxuXG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICBcbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7dW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmRhdGVfYmFua2VkIHwgZGF0ZTonZGQgTU1NIHl5eXknfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3RyaW1VbmRlcnNjb3JlKHVuYXNzaWduZWRSZWNvcmQucGF5bWVudF9tZXRob2QpIHwgbG93ZXJjYXNlfX0gIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJtYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm1cIiBub3ZhbGlkYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ1bmlkZW50aWZpZWRTdWJUZXh0XCI+XG4gICAgICAgICAgR2l2ZSBhIHJlYXNvbiBmb3IgbWFya2luZyB0aGlzIHBheW1lbnQgYXMgdW5pZGVudGlmaWVkLlxuICAgICAgICAgIDxici8+XG4gICAgICAgICAgSW5jbHVkZSBhbnkgaW52ZXN0aWdhdGlvbnMgeW91J3ZlIG1hZGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiIGZvcj1cImludmVzdGljYXRpb25EZXRhaWxcIj5cblxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLTMtNFwiIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgfHwgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yIHx8IGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvciB8fCBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3J9XCIgbmFtZT1cImludmVzdGljYXRpb25EZXRhaWxcIiBpZD1cImludmVzdGljYXRpb25EZXRhaWxcIiByb3dzPVwiNVwiIGZvcm1Db250cm9sTmFtZT1cImludmVzdGljYXRpb25EZXRhaWxcIj5cbiAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgfHwgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yIHx8IGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvciB8fCBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3JcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW52ZXN0aWNhdGlvbkRldGFpbEVtcHR5XCI+RW50ZXIgYSByZWFzb24gZm9yIG1hcmtpbmcgdGhpcyBwYXltZW50IGFzIHVuaWRlbnRpZmllZC48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnZlc3RpY2F0aW9uRGV0YWlsSGFzRXJyb3JcIj5FbnRlciBhIHZhaWxkIHJlYXNvbjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImludmVzdGljYXRpb25EZXRhaWxNYXhIYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgMjU1IGNoYXJhY3RlcnMgb3IgdW5kZXIuPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbmRDb250aW51ZSgpXCI+XG4gICAgICAgICAgQ29udGludWVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygnY2FuY2VsJylcIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICd1bmlkZW50aWZpZWRDb250aW51ZUNvbmZpcm0nXCI+XG4gICAgICA8Y2NwYXktZXJyb3ItYmFubmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlLnNob3dFcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCI+PC9jY3BheS1lcnJvci1iYW5uZXI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1VOSURFTlRJRklFRENPTkZJUk1BVElPTic+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbWFyayB0aGlzIHBheW1lbnQgYXMgdW5pZGVudGlmaWVkPyA8L2gxPlxuICAgICAgICAgXG4gICAgICAgIDwvc3Ryb25nPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICAgIDxociBjbGFzcz1cImdvdnVrLXNlY3Rpb24tYnJlYWsgZ292dWstc2VjdGlvbi1icmVhay0tdmlzaWJsZVwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5JbnZlc3RpZ2F0aW9uczwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7aW52ZXN0aWdhdGlvbkNvbW1lbnR9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0NvbmZpcm1CdXR0b25kaXNhYmxlZFwiIChjbGljayk9XCJjb25maXJtUGF5bWVudHMoKVwiPlxuICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3VuaWRlbnRpZmllZENhbmNlbENvbmZpcm0nXCI+XG4gICAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FOQ0VMVU5JREVOVElGSUVEJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWw/XG4gICAgICAgIDwvc3Ryb25nPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKClcIj5cbiAgICAgICAgICBZZXNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgTm9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5ta3BheS11bmlkZW50aWZpZWR7bWFyZ2luOjEwcHggMCAyMHB4fS5ta3BheS11bmlkZW50aWZpZWQgLmdvdnVrLWJ1dHRvbi0tZ3JvdXAgLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e21hcmdpbi1sZWZ0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojYjNiOGJkZjJ9Lm1rcGF5LXVuaWRlbnRpZmllZCAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0ubWtwYXktdW5pZGVudGlmaWVkIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9LmdvdnVrLWdyaWQtY29sdW1uLWZ1bGx7cGFkZGluZzowfS51bmlkZW50aWZpZWRTdWJUZXh0e2xpbmUtaGVpZ2h0OjQ1cHh9LmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dHtmb250LXNpemU6MTlweH0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0uY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtVbmlkZW50aWZpZWRQYXltZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcbiAgbWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtOiBGb3JtR3JvdXA7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICB1bmFzc2lnbmVkUmVjb3JkOklCU1BheW1lbnRzO1xuICBzaXRlSUQ6IHN0cmluZyA9IG51bGw7XG4gIGludmVzdGlnYXRpb25Db21tZW50OiBzdHJpbmc7XG4gIGlzQ29uZmlybUJ1dHRvbmRpc2FibGVkOkJvb2xlYW4gPSBmYWxzZTtcbiAgY2NkUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBleGNlcHRpb25SZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcblxuICAgIHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnZlc3RpY2F0aW9uRGV0YWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpXG4gICAgICBdKSlcbiAgICB9KTtcbiAgfVxuIGdldFVuYXNzaWduZWRQYXltZW50KCkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlEQ04odGhpcy5ic3BheW1lbnRkY24pLnN1YnNjcmliZShcbiAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnVuYXNzaWduZWRSZWNvcmQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cy5maWx0ZXIocGF5bWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICAgYmVFeGNlcHRpb25OdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSxcbiAgICAgICAgICBleGNlcHRpb25SZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyID09PSB0aGlzLmNjZENhc2VOdW1iZXIgPyBudWxsIDogdGhpcy5jY2RDYXNlTnVtYmVyIDogdGhpcy5jY2RDYXNlTnVtYmVyO1xuICAgICAgICB0aGlzLmNjZFJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgOiBudWxsO1xuICAgICAgICB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlRXhjZXB0aW9uTnVtYmVyID8gYmVFeGNlcHRpb25OdW1iZXIgOiBleGNlcHRpb25SZWZlcmVuY2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbiAgY29uc3QgaW52ZXN0aWNhdGlvbkZpZWxkID0gdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uY29udHJvbHMuaW52ZXN0aWNhdGlvbkRldGFpbDtcbiAgY29uc3QgZm9ybWVycm9yID0gaW52ZXN0aWNhdGlvbkZpZWxkLmVycm9ycztcbiAgICBpZiAodGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuaW52ZXN0aWdhdGlvbkNvbW1lbnQgPSB0aGlzLm1hcmtQYXltZW50VW5pZGVudGlmaWVkRm9ybS5jb250cm9scy5pbnZlc3RpY2F0aW9uRGV0YWlsLnZhbHVlO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3VuaWRlbnRpZmllZENvbnRpbnVlQ29uZmlybSc7XG4gICAgfWVsc2Uge1xuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlICE9ICcnICYmIGludmVzdGljYXRpb25GaWVsZC5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5taW5sZW5ndGggJiYgZm9ybWVycm9yLm1pbmxlbmd0aC5hY3R1YWxMZW5ndGggPCAzICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5tYXhsZW5ndGggJiYgZm9ybWVycm9yLm1heGxlbmd0aC5hY3R1YWxMZW5ndGggPiAyNTUgKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwpIHtcbiAgICAgIHRoaXMuaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmludmVzdGljYXRpb25EZXRhaWxIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaW52ZXN0aWNhdGlvbkRldGFpbE1pbkhhc0Vycm9yID0gdmFsWzJdO1xuICAgICAgdGhpcy5pbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gIH1cbiAgY29uZmlybVBheW1lbnRzKCkge1xuICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHJlYXNvbiA9IHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtLmdldCgnaW52ZXN0aWNhdGlvbkRldGFpbCcpLnZhbHVlO1xuXG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonVW5pZGVudGlmaWVkJyxcbiAgICAgICAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBuYW1lOiAnVW5pZGVudGlmaWVkJ1xuICAgICAgICB9LFxuICAgICAgICB1bmlkZW50aWZpZWRfcmVhc29uOiByZWFzb24sXG4gICAgICAgIHVzZXJfaWQ6IHRoaXMuY2FzZVR5cGUsXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0U3RyYXRlZ2ljQm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5hc3NpZ25lZFJlY29yZCwgdGhpcy5jYXNlVHlwZSwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UsIGFsbG9jYXRlZFJlcXVlc3QpO1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU1dvUEdTdHJhdGVnaWMocG9zdFN0cmF0ZWdpY0JvZHkpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdQUk9DRVNTRUQnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzMSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAgICh0aGlzLmNjZFJlZmVyZW5jZSwgdGhpcy51bmFzc2lnbmVkUmVjb3JkLCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UpXG4gICAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0QlNQYXltZW50cyhyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZTIgPSBKU09OLnBhcnNlKHJlczIpLFxuICAgICAgICAgICAgICAgICAgcmVxQm9keSA9IG5ldyBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCByZWFzb24pO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTIuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTVW5pZGVudGlmaWVkUGF5bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZTMgPSBKU09OLnBhcnNlKHJlczMpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICB9XG4gIGNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cyh0eXBlPzpzdHJpbmcpe1xuICAgIGlmKHR5cGUgJiYgdHlwZSA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgaWYodGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uZ2V0KCdpbnZlc3RpY2F0aW9uRGV0YWlsJykudmFsdWUhPT1cIlwiKXtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5pZGVudGlmaWVkQ2FuY2VsQ29uZmlybSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW5Gb3JtJztcbiAgICB9XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIH1cbiAgZ2V0RXJyb3JNZXNzYWdlKGlzRXJyb3JFeGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogXCJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZVwiLFxuICAgICAgYm9keTogXCJUcnkgYWdhaW4gbGF0ZXJcIixcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxufVxuIiwiXG5leHBvcnQgY2xhc3MgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3Qge1xuICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiBhbnk7XG4gIHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlY2VpdmluZ19vZmZpY2U6IHN0cmluZztcbiAgcmVjZWl2aW5nX2VtYWlsX2FkZHJlc3M6IHN0cmluZztcbiAgc2VuZGluZ19lbWFpbF9hZGRyZXNzOiBzdHJpbmc7XG4gIHVuaWRlbnRpZmllZF9yZWFzb246IHN0cmluZztcbiAgY29uc3RydWN0b3IocGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudF9yZWZlcmVuY2UgOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nLHJlc3BvbnNpYmxlX29mZmljZTogc3RyaW5nLCByZXNwb25zaWJsZV9wZXJzb246c3RyaW5nLGVtYWlsX2lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXMgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIG5hbWU6IFwiVHJhbnNmZXJyZWRcIlxuICAgIH07XG4gICAgdGhpcy5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSA9IHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudF9yZWZlcmVuY2U9IHBheW1lbnRfcmVmZXJlbmNlO1xuICAgIHRoaXMudW5pZGVudGlmaWVkX3JlYXNvbj0gcmVhc29uO1xuICAgIHRoaXMucmVjZWl2aW5nX29mZmljZT0gcmVzcG9uc2libGVfb2ZmaWNlO1xuICAgIHRoaXMucmVjZWl2aW5nX2VtYWlsX2FkZHJlc3M9IGVtYWlsX2lkO1xuICAgIHRoaXMuc2VuZGluZ19lbWFpbF9hZGRyZXNzPSByZXNwb25zaWJsZV9wZXJzb247XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBVbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbG9jYXRlUGF5bWVudFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FsbG9jYXRlUGF5bWVudFJlcXVlc3QnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrLXVuc29saWNpdGVkLXBheW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJta3BheS11bmlkZW50aWZpZWRcIj5cbiAgPGRpdiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdtYWluRm9ybSdcIj5cbiAgPGNjcGF5LWVycm9yLWJhbm5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiPjwvY2NwYXktZXJyb3ItYmFubmVyPlxuICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+TWFyayBwYXltZW50IGFzIHRyYW5zZmVycmVkPC9oMT5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3t1bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2V9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuZGF0ZV9iYW5rZWQgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXBpdGFsaXplIGdvdnVrLXRhYmxlX19jZWxsXCI+IHt7dHJpbVVuZGVyc2NvcmUodW5hc3NpZ25lZFJlY29yZC5wYXltZW50X21ldGhvZCkgfCBsb3dlcmNhc2V9fSAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG4gIFxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtXCIgbm92YWxpZGF0ZT5cbiAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J01BUktUUkFOU0ZFUlJFRCc+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGN1c3RvbS1nb3Z1ay1sYWJlbCBjdXN0b20tZ292dWstbGFiZWxcIiBmb3I9XCJyZWFzb25cIj5cbiAgICAgICAgUmVhc29uIGZvciBwYXltZW50IGJlaW5nIG1hcmtlZCBhcyB0cmFuc2ZlcnJlZCAgIFxuICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTRcIiBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1jbGFzcyc6IHJlYXNvbkhhc0Vycm9yIHx8IHJlYXNvbk1pbkhhc0Vycm9yIHx8IHJlYXNvbk1heEhhc0Vycm9yfVwiIG5hbWU9XCJyZWFzb25cIiBpZD1cInJlYXNvblwiIHJvd3M9XCI1XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVhc29uXCI+XG4gICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzUmVhc29uRW1wdHkgfHwgcmVhc29uSGFzRXJyb3IgfHwgcmVhc29uTWluSGFzRXJyb3IgfHwgcmVhc29uTWF4SGFzRXJyb3JcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVhc29uRW1wdHlcIj5FbnRlciBhIHJlYXNvbiBmb3IgbWFya2luZyB0aGlzIHBheW1lbnQgYXMgdHJhbnNmZXJyZWQuPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVhc29uSGFzRXJyb3JcIj5FbnRlciBhIHZhbGlkIHJlYXNvbjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlYXNvbk1pbkhhc0Vycm9yXCI+UmVhc29uIHNob3VsZCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVhc29uTWF4SGFzRXJyb3JcIj5SZWFzb24gc2hvdWxkIGJlIDI1NSBjaGFyYWN0ZXJzIG9yIHVuZGVyLjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBjdXN0b20tZ292dWstbGFiZWxcIiBmb3I9XCJyZXNwb25zaWJsZU9mZmljZVwiPlxuICAgICAgICBSZWNlaXZpbmcgU2l0ZSBJRCAoUmVjZWl2aW5nIGNvdXJ0L0J1bGsgY2VudHJlIHNpdGUgSUQpICAgIFxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2hvcnQtaW5wdXRcIiBpZD1cInJlc3BvbnNpYmxlT2ZmaWNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVzcG9uc2libGVPZmZpY2VcIiAoY2hhbmdlKT1cInNlbGVjdGNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnPlBsZWFzZSBzZWxlY3Q8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiAgKm5nRm9yPVwibGV0IHNpdGVJRCBvZiBzaXRlSURMaXN0O1wiIHZhbHVlPVwie3tzaXRlSUQuc2l0ZUlkfX1cIj57e3NpdGVJRC5zaXRlTmFtZX19ICh7e3NpdGVJRC5zaXRlSWR9fSk8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNSZXNwb25zaWJsZU9mZmljZUVtcHR5IHx8IHJlc3BvbnNpYmxlT2ZmaWNlSGFzRXJyb3JcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1Jlc3BvbnNpYmxlT2ZmaWNlRW1wdHlcIj5QbGVhc2Ugc2VsZWN0IFJlY2VpdmluZyBTaXRlIElEPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlc3BvbnNpYmxlT2ZmaWNlSGFzRXJyb3JcIj5QbGVhc2Ugc2VsZWN0IGEgdmFsaWQgUmVjZWl2aW5nIFNpdGUgSUQ8L3NwYW4+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzQ29udGludWVCdXR0b25kaXNhYmxlZFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbmRDb250aW51ZSgpXCI+XG4gICAgICAgIENvbmZpcm1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHMoJ2NhbmNlbCcpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbiAgXG48L2Rpdj5cbiAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3Vuc29saWNpdGVkQ29udGludWVDb25maXJtJ1wiPlxuICAgICAgICAgIDxjY3BheS1lcnJvci1iYW5uZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2Uuc2hvd0Vycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIj48L2NjcGF5LWVycm9yLWJhbm5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLXNtYWxsXCI+IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBtYXJrIHRoaXMgcGF5bWVudCBhcyB0cmFuc2ZlcnJlZD8gPC9oMT5cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nVFJBTlNGRVJSRURDT05GSVJNQVRJT04nPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVhc29uPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVjZWl2aW5nIHNpdGUgSUQ8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e3JlYXNvbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tzZWxlY3RlZFNpdGVOYW1lfX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiaXNDb25maXJtQnV0dG9uZGlzYWJsZWRcIiAoY2xpY2spPVwiY29uZmlybVBheW1lbnRzKClcIj5cbiAgICAgICAgICBDb25maXJtXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxNYXJrVW5zb2xpY2l0ZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3Vuc29saWNpdGVkQ2FuY2VsQ29uZmlybSdcIj5cbiAgICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdDQU5DRUxUUkFOU0ZFUlJFRCc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpXCI+XG4gICAgICAgICAgWWVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxNYXJrVW5zb2xpY2l0ZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgTm9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AubWtwYXktdW5pZGVudGlmaWVke21hcmdpbjoxMHB4IDAgMjBweH0ubWtwYXktdW5pZGVudGlmaWVkIC5nb3Z1ay1idXR0b24tLXNlY29uZGFyeXttYXJnaW4tbGVmdDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2IzYjhiZGYyfS5ta3BheS11bmlkZW50aWZpZWQgLmlubGluZS1lcnJvci1jbGFzc3tvdXRsaW5lOiNhNzE0MTQgc29saWQgM3B4O291dGxpbmUtb2Zmc2V0OjB9Lm1rcGF5LXVuaWRlbnRpZmllZCAuaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXple3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9LmN1c3RvbS1nb3Z1ay1sYWJlbCwuZ292dWstd2FybmluZy10ZXh0X190ZXh0e2ZvbnQtc2l6ZToxOXB4fSNyZXNwb25zaWJsZU9mZmljZXtjb2xvcjojMDAwO3dpZHRoOjc1JTtmb250LXdlaWdodDojZmZmfXNlbGVjdCBvcHRpb257YmFja2dyb3VuZDojZmZmfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtVbnNvbGljaXRlZFBheW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBtYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybTogRm9ybUdyb3VwO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIHJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhc29uTWluSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhc29uTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVzcG9uc2libGVPZmZpY2VIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Jlc3BvbnNpYmxlT2ZmaWNlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICB1bmFzc2lnbmVkUmVjb3JkOiBJQlNQYXltZW50cztcbiAgc2l0ZUlEOiBzdHJpbmcgPSBudWxsO1xuICByZWFzb246IHN0cmluZztcbiAgcmVzcG9uc2libGVQZXJzb246IHN0cmluZztcbiAgcmVzcG9uc2libGVPZmZpY2U6IHN0cmluZztcbiAgZW1haWxJZDogc3RyaW5nO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogQm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgY2NkUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBleGNlcHRpb25SZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIHNlbGVjdGVkU2l0ZUlkOiBzdHJpbmc7XG4gIHNlbGVjdGVkU2l0ZU5hbWU6IHN0cmluZztcbiAgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBzaXRlSURMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FsbCcpO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFNpdGVJRCgpLnN1YnNjcmliZShcbiAgICAgIHNpdGVpZHMgPT4ge1xuICAgICAgICB0aGlzLmlzQ29udGludWVCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zaXRlSURMaXN0ID0gSlNPTi5wYXJzZShzaXRlaWRzKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIHRoaXMuaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICAgIFxuICAgIHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxccyxcXFxcLl0qKSQnKVxuICAgICAgXSkpLFxuICAgICAgcmVzcG9uc2libGVPZmZpY2U6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxcc1xcXFxuLFxcXFwuLTpdKikkJylcbiAgICAgIF0pKSxcbiAgICAgIHJlc3BvbnNpYmxlUGVyc29uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZW1haWxJZDogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gIGNvbmZpcm1QYXltZW50cygpIHtcbiAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHM7XG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonVHJhbnNmZXJyZWQnLFxuICAgICAgICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIG5hbWU6ICdUcmFuc2ZlcnJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgdW5pZGVudGlmaWVkX3JlYXNvbjogY29udHJvbHMucmVhc29uLnZhbHVlLFxuICAgICAgICByZWNlaXZpbmdfb2ZmaWNlOiB0aGlzLnNlbGVjdGVkU2l0ZUlkLFxuICAgICAgICB1c2VyX2lkOiB0aGlzLmNhc2VUeXBlLFxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFN0cmF0ZWdpY0JvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuY2FzZVR5cGUsIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlLCBhbGxvY2F0ZWRSZXF1ZXN0KTtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNXb1BHU3RyYXRlZ2ljKHBvc3RTdHJhdGVnaWNCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAvLyBjb250cm9scy5yZXNwb25zaWJsZU9mZmljZS5zZXRWYWx1ZSgnUDIxOScpO1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBjb25zdCByZXNwb25zZTEgPSBKU09OLnBhcnNlKHJlczEpLFxuICAgICAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSlcbiAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTUGF5bWVudHMocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKSxcbiAgICAgICAgICAgIHJlcUJvZHkgPSBuZXcgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCBjb250cm9scy5yZWFzb24udmFsdWUsIHRoaXMuc2VsZWN0ZWRTaXRlSWQsIGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlLCBjb250cm9scy5lbWFpbElkLnZhbHVlKTtcbiAgICAgICAgICAgICBpZiAocmVzcG9uc2UyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTVW5zb2xpY2l0ZWRQYXltZW50cyhyZXFCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMyA9IEpTT04ucGFyc2UocmVzMyk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcbiAgICAgICAgY29uc3QgZm9ybWVycm9yID0gdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS5jb250cm9scy5yZWFzb24uZXJyb3JzO1xuICAgICAgICBjb25zdCByZWFzb25GaWVsZCA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVhc29uO1xuICAgICAgICAvL2NvbnN0IG9mZmljZUlkRmllbGQgPSB0aGlzLnNlbGVjdGVkU2l0ZUlkO1xuICAgICAgICBjb25zdCBvZmZpY2VJZEZpZWxkICA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVzcG9uc2libGVPZmZpY2U7XG4gICAgaWYgKHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgY29udHJvbHMgPSB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzO1xuICAgICAgdGhpcy5lbWFpbElkID0gY29udHJvbHMuZW1haWxJZC52YWx1ZTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2UgPSBvZmZpY2VJZEZpZWxkLnZhbHVlO1xuICAgICAgdGhpcy5yZXNwb25zaWJsZVBlcnNvbiA9IGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlO1xuICAgICAgdGhpcy5yZWFzb24gPSBjb250cm9scy5yZWFzb24udmFsdWU7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDb250aW51ZUNvbmZpcm0nO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKCByZWFzb25GaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihyZWFzb25GaWVsZC52YWx1ZSAhPSAnJyAmJiB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlYXNvbi5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKGZvcm1lcnJvciAmJiBmb3JtZXJyb3IubWlubGVuZ3RoICYmIGZvcm1lcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihmb3JtZXJyb3IgJiYgZm9ybWVycm9yLm1heGxlbmd0aCAmJiBmb3JtZXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlXSwgJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlICE9ICcnICYmIG9mZmljZUlkRmllbGQuaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZV0sJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlYXNvbkhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5yZWFzb25NaW5IYXNFcnJvciA9IHZhbFsyXTtcbiAgICAgIHRoaXMucmVhc29uTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3Jlc3BvbnNpYmxlT2ZmaWNlJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVzcG9uc2libGVPZmZpY2VFbXB0eSA9IHZhbFs0XTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2VIYXNFcnJvciA9IHZhbFs1XTtcbiAgICB9XG4gIH1cblxuY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHModHlwZT86c3RyaW5nKXtcbiAgICBpZih0eXBlICYmIHR5cGUgPT09ICdjYW5jZWwnKSB7XG4gICAgICBpZih0aGlzLmNoZWNraW5nRm9ybVZhbHVlKCkpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDYW5jZWxDb25maXJtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlc3BvbnNpYmxlT2ZmaWNlLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgfVxuICB9XG4gIGNoZWNraW5nRm9ybVZhbHVlKCl7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0udmFsdWU7XG4gICAgbGV0IHZhbHVlRXhpc3RzID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBmaWVsZCBpbiBmb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkgJiYgZm9ybUZpZWxkc1tmaWVsZF0gIT09XCJcIikge1xuICAgICAgICB2YWx1ZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVFeGlzdHM7XG4gIH1cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG4gICBnZXRVbmFzc2lnbmVkUGF5bWVudCgpIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMuYnNwYXltZW50ZGNuKS5zdWJzY3JpYmUoXG4gICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICBcbiAgICAgIHRoaXMudW5hc3NpZ25lZFJlY29yZCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzLmZpbHRlcihwYXltZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgfSlbMF07XG4gICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICBiZUV4Y2VwdGlvbk51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLFxuICAgICAgICAgZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA9PT0gdGhpcy5jY2RDYXNlTnVtYmVyID8gbnVsbCA6IHRoaXMuY2NkQ2FzZU51bWJlciA6IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgICAgICAgdGhpcy5jY2RSZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyIDogbnVsbDtcbiAgICAgICAgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UgPSBiZUV4Y2VwdGlvbk51bWJlciA/IGJlRXhjZXB0aW9uTnVtYmVyIDogZXhjZXB0aW9uUmVmZXJlbmNlO1xuICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoaXNFcnJvckV4aXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwiLFxuICAgICAgYm9keTogXCJQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpeyBcbiAgICB0aGlzLnNlbGVjdGVkU2l0ZUlkID0gYXJncy50YXJnZXQudmFsdWU7IFxuICAgIHRoaXMuc2VsZWN0ZWRTaXRlTmFtZSA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQuc2VsZWN0ZWRJbmRleF0udGV4dDsgXG4gIH0gXG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsSW5wdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQlNQYXltZW50cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUJTUGF5bWVudHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInVucHJvY2Vzc2VkLXBheW1lbnRzIGdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FTRVRSQU5TQUNUSU9OJz5cbiAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIiAqbmdJZj1cIiFJU19CVVRUT05fRU5BQkxFXCI+VW5wcm9jZXNzZWQgcGF5bWVudHM8L2gzPlxuICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiICpuZ0lmPVwiSVNfQlVUVE9OX0VOQUJMRVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC9oMz5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmICFpc1R1cm5PZmZcIj5TZWxlY3Q8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmIGlzVHVybk9mZlwiPjxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cInVucHJvY2Vzc2VkUGF5bWVudFVuU2VsZWN0RXZlbnQoJGV2ZW50KVwiPlVuc2VsZWN0PC9hPjwvdGQ+XG5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHVuYXNzaWduZWRSZWNvcmQgb2YgdW5hc3NpZ25lZFJlY29yZExpc3Q7IGxldCBpIG9mIGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpcGxlLWNob2ljZSB1bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiJ3VucGFpZWRGZWUnK2krJydcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ1bmFzc2lnbmVkUmVjb3JkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidW5hc3NpZ25lZFJlY29yZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZElkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQodW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlKVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7e3VuYXNzaWduZWRSZWNvcmQuZGNuX3JlZmVyZW5jZX19XCIgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmFkaW8taW5saW5lLTFcIj48L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj5cbiAgICAgICAgICAgICAge3t1bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2V9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuZGF0ZV9iYW5rZWQgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3sgdHJpbVVuZGVyc2NvcmUodW5hc3NpZ25lZFJlY29yZC5wYXltZW50X21ldGhvZCkgfCBsb3dlcmNhc2V9fSAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJ1cFBheW1lbnRFcnJvck1lc3NhZ2UgIT09IG51bGxcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHVuYWxsb2NhdGVkIHBheW1lbnRzIHJlY29yZCBhdmFpbGFibGU8L3RkPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgIWlzVHVybk9mZlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiIWlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID8gJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnIDogJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xJ1wiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGEgbmV3IGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzQWxsb2NhdGVUb0V4aXN0aW5nRmVlYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2UoKVwiPlxuICAgICAgICBBbGxvY2F0ZSB0byBhbiBleGlzdGluZyBmZWVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc01hcmtBc1VuaWRlbnRpZmllZGJ0bkVuYWJsZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bmlkZW50aWZpZWRQYWdlJylcIj5cbiAgICAgICAgTWFyayBhcyB1bmlkZW50aWZpZWRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bnNvbGljaXRlZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHRyYW5zZmVycmVkXG4gICAgICA8L2J1dHRvbj4gIFxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgaXNUdXJuT2ZmXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPyAnYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMScgOiAnYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIj5cbiAgICAgICAgQWxsb2NhdGUgdG8gYSBuZXcgZmVlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSchaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID8gIFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJyAoY2xpY2spPVwiZ29Ub0FsbG9jYXRlUGFnZSgpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGFuIGV4aXN0aW5nIGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3VuaWRlbnRpZmllZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHVuaWRlbnRpZmllZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3Vuc29saWNpdGVkUGFnZScpXCI+XG4gICAgICAgIE1hcmsgYXMgdHJhbnNmZXJyZWRcbiAgICAgIDwvYnV0dG9uPiBcbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLnVucHJvY2Vzc2VkLXBheW1lbnRzIC51bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9ue2JvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6LjUyNjMxNWVtIC43ODk0NzNlbSAuMjYzMTU3ZW07Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgyM2I7cG9pbnRlci1ldmVudHM6bm9uZTtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuMjU7b3V0bGluZTp0cmFuc3BhcmVudCBzb2xpZCAxcHg7b3V0bGluZS1vZmZzZXQ6LTFweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93OjAgMnB4IDAgIzAwMzYxOH0uYnV0dG9uLmRpc2FibGVkLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdLC5idXR0b25bZGlzYWJsZWRde3pvb206MTtvcGFjaXR5Oi41fS5idXR0b24uZGlzYWJsZWQ6YWN0aXZlLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdOmFjdGl2ZSwuYnV0dG9uW2Rpc2FibGVkXTphY3RpdmV7dG9wOjA7Ym94LXNoYWRvdzowIDJweCAwICMwMDM2MTh9LmJ1dHRvbltkaXNhYmxlZD1kaXNhYmxlZF17YmFja2dyb3VuZDojMDA4MjNifS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXplOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS53aGl0ZXNwYWNlLWluaGVyaXR7d2hpdGUtc3BhY2U6aW5oZXJpdCFpbXBvcnRhbnR9YF1cbn0pXG5leHBvcnQgY2xhc3MgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCdGRUVfUkVDT1JEU19FWElTVFMnKSBGRUVfUkVDT1JEU19FWElTVFM6IGJvb2xlYW47XG4gIEBJbnB1dCgnUEFZTUVOVFJFRicpIFBBWU1FTlRSRUY6IHN0cmluZztcbiAgQElucHV0KCdJU1RVUk5PRkYnKSBJU1RVUk5PRkY6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfQlVUVE9OX0VOQUJMRScpIElTX0JVVFRPTl9FTkFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfT1NfQU1UX0FWQUlMQUJMRScpIElTX09TX0FNVF9BVkFJTEFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNORVdQQ0lQQUxPRkYnKSBJU05FV1BDSVBBTE9GRjogYm9vbGVhbjtcbiAgQElucHV0KCdJU09MRFBDSVBBTE9GRicpIElTT0xEUENJUEFMT0ZGOiBib29sZWFuO1xuICBASW5wdXQoJ0lTU0ZFTkFCTEUnKSBJU1NGRU5BQkxFOiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ2V0VW5wcm9jZXNzZWRGZWVDb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgdW5hc3NpZ25lZFJlY29yZExpc3Q6IElCU1BheW1lbnRzO1xuICB1cFBheW1lbnRFcnJvck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgcmVjb3JkSWQ6IHN0cmluZyA9IG51bGw7XG4gIGlzUmVjb3JkRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGNuTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0V4Y2VwdGlvbkNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VydmljZUlkOiBzdHJpbmcgPSBudWxsO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICBpc05ld3BjaXBhbG9mZjtcbiAgaXNPbGRwY2lwYWxvZmY7XG4gIGlzVHVybk9mZjogYm9vbGVhbiA9IHRydWU7XG4gIGlzU3RGaXhFbmFibGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBUb2RvIC4uLlxuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT04udG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzTmV3cGNpcGFsb2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGO1xuICAgIHRoaXMuaXNPbGRwY2lwYWxvZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkY7XG4gICAgdGhpcy5pc1N0Rml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG5cbiAgICB0aGlzLmdldFVuYXNzaWduZWRQYXltZW50bGlzdCgpO1xuICB9XG5cbiAgZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCkge1xuICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gJ2RjbicpIHtcbiAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLmRjbk51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICAgIGlmKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddICYmIHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlc0ZvclVuYXNzaWduZWRSZWNvcmQodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ3BheW1lbnRzJ10pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmdldFVucHJvY2Vzc2VkRmVlQ291bnQuZW1pdCgnMCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KCcwJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgICBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXSAmJiB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cykge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXNGb3JVbmFzc2lnbmVkUmVjb3JkKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddKTtcbiAgICAgICAgICB9IGVsc2UgaWYodW5hc3NpZ25lZFBheW1lbnRzWydwYXltZW50cyddKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlc0ZvclVuYXNzaWduZWRSZWNvcmQodW5hc3NpZ25lZFBheW1lbnRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSAnZXJyb3InO1xuICAgICAgICAgICAgdGhpcy5nZXRVbnByb2Nlc3NlZEZlZUNvdW50LmVtaXQoJzAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmdldFVucHJvY2Vzc2VkRmVlQ291bnQuZW1pdCgnMCcpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICB9XG4gIHNldFZhbHVlc0ZvclVuYXNzaWduZWRSZWNvcmQodW5hc3NpZ25lZFBheW1lbnRzKSB7XG4gICAgdGhpcy51bmFzc2lnbmVkUmVjb3JkTGlzdCA9IHVuYXNzaWduZWRQYXltZW50cy5wYXltZW50cztcbiAgICB0aGlzLnNlcnZpY2VJZCA9IHVuYXNzaWduZWRQYXltZW50cy5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgIGlmICh1bmFzc2lnbmVkUGF5bWVudHNbJ2NjZF9yZWZlcmVuY2UnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRXhjZXB0aW9uQ2FzZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuaXNSZWNvcmRFeGlzdCA9ICB0aGlzLnVuYXNzaWduZWRSZWNvcmRMaXN0Lmxlbmd0aCA9PT0gMDtcbiAgICB0aGlzLmdldFVucHJvY2Vzc2VkRmVlQ291bnQuZW1pdCg8YW55PnRoaXMudW5hc3NpZ25lZFJlY29yZExpc3QubGVuZ3RoKTtcbiAgfVxuICBmb3JtYXRVbmFzc2lnbmVkUmVjb3JkSWQoSUQ6IE51bWJlcikge1xuICAgIHJldHVybiBgdW5hc3NpZ25yZWNvcmQtJHtJRH1gO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gIHJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCB1cmwgPSB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgIHVybCArPSB0aGlzLklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1N0Rml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgdXJsICs9YCZjYXNlVHlwZT0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRX1gO1xuICAgIHVybCArPSB0aGlzLmlzT2xkcGNpcGFsb2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc05ld3BjaXBhbG9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvZmVlLXNlYXJjaD9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9JmRjbj0ke3RoaXMucmVjb3JkSWR9JHt1cmx9YCk7XG4gIH1cbiAgbG9hZFVuc29saWNpdGVkUGFnZSh2aWV3TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gdmlld05hbWU7XG4gIH1cbiAgdW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2U6IGFueSkge1xuICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgdGhpcy52YWxpZGF0ZUJ1dHRvbnMoKTtcbiAgIHRoaXMuc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50LmVtaXQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2UpO1xuICB9XG4gIGdvVG9BbGxvY2F0ZVBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnVuUHJvY2Vzc2VkUGF5bWVudFNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUlkXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuSVNUVVJOT0ZGO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc05ld1BjaXBhbE9mZiA9IHRoaXMuSVNORVdQQ0lQQUxPRkY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzT2xkUGNpcGFsT2ZmID0gdGhpcy5JU09MRFBDSVBBTE9GRjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRSA9IHRoaXMuaXNTdEZpeEVuYWJsZTtcblxuICAgIGlmKCF0aGlzLklTVFVSTk9GRikge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHRoaXMuUEFZTUVOVFJFRjtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IG51bGw7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnYWxsb2NhdGUtcGF5bWVudHMnO1xuICAgIH1cblxuICB9XG5cbiAgdmFsaWRhdGVCdXR0b25zKCkge1xuICBpZiAoIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkICAmJiB0aGlzLmlzRXhjZXB0aW9uQ2FzZSkge1xuICAgICAgICB0aGlzLmlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICggdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgICYmICF0aGlzLmlzRXhjZXB0aW9uQ2FzZSAmJiAhdGhpcy5GRUVfUkVDT1JEU19FWElTVFMpIHtcbiAgICAgIHRoaXMuaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkICYmICF0aGlzLmlzRXhjZXB0aW9uQ2FzZSAmJiB0aGlzLkZFRV9SRUNPUkRTX0VYSVNUUyApIHtcbiAgICAgIGlmKCF0aGlzLklTVFVSTk9GRikge1xuICAgICAgICB0aGlzLmlzQWxsb2NhdGVUb0V4aXN0aW5nRmVlYnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID0gdGhpcy5JU19PU19BTVRfQVZBSUxBQkxFO1xuICAgICAgICB0aGlzLmlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdW5wcm9jZXNzZWRQYXltZW50VW5TZWxlY3RFdmVudChldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJlY29yZElkID0gbnVsbDtcbiAgICB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkID0gZmFsc2U7XG4gICAgLy90aGlzLnZhbGlkYXRlQnV0dG9ucygpO1xuICAgIHRoaXMuc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50LmVtaXQoJycpO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFwcC1wcm9jZXNzZWQtcGF5bWVudHMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwcm9jZXNzZWQtcGF5bWVudHMgZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5Qcm9jZXNzZWQgcGF5bWVudHM8L2gzPlxuICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IGFzc2V0IG51bWJlciAoRENOKTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5CYW5rZWQgZGF0ZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFsbG9jYXRpb24gc3RhdHVzPC90ZD5cbiAgICAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiID5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCBwcm9jZXNzZWRSZWNvcmQgb2YgTk9OUEFZTUVOVFNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJyZWRpcmVjdFRvUGF5bWVudFZpZXdQYWdlKHByb2Nlc3NlZFJlY29yZC5wYXltZW50R3JvdXBSZWZlcmVuY2UsIHByb2Nlc3NlZFJlY29yZC5yZWZlcmVuY2UsIHByb2Nlc3NlZFJlY29yZC5tZXRob2QpXCI+e3twcm9jZXNzZWRSZWNvcmQuZG9jdW1lbnRfY29udHJvbF9udW1iZXJ9fTwvYT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3Byb2Nlc3NlZFJlY29yZC5iYW5rZWRfZGF0ZSB8IGRhdGU6J2RkIE1NTSB5eXl5J319PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+IHt7cHJvY2Vzc2VkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbFwiPiB7eyB0cmltVW5kZXJzY29yZShwcm9jZXNzZWRSZWNvcmQubWV0aG9kKSB8IGxvd2VyY2FzZX19ICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbFwiPiB7eyBwcm9jZXNzZWRSZWNvcmQucGF5bWVudF9hbGxvY2F0aW9uWzBdID8gcHJvY2Vzc2VkUmVjb3JkLnBheW1lbnRfYWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA6ICctJyB9fSAgPC90ZD5cblxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0lmPVwiTk9OUEFZTUVOVFMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+XG4gICAgICAgICAgICAgIE5vIHByb2Nlc3NlZCBwYXltZW50c1xuICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0uY2FwaXRhbGl6ZTo6Zmlyc3QtbGV0dGVye3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1gXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCdOT05QQVlNRU5UUycpIE5PTlBBWU1FTlRTOiBJUGF5bWVudFtdO1xuICBAT3V0cHV0KCkgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZVxuICAgICkgeyB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdHJpbVVuZGVyc2NvcmUobWV0aG9kOiBzdHJpbmcpe1xuICAgICAgcmV0dXJuIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5yZW1vdmVVbndhbnRlZFN0cmluZyhtZXRob2QsJyAnKTtcbiAgICB9XG4gICAgcmVkaXJlY3RUb1BheW1lbnRWaWV3UGFnZShwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50LmVtaXQoe3BheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudFJlZmVyZW5jZSwgcGF5bWVudE1ldGhvZH0pO1xuICAgIH1cbn1cbiIsIlxuZXhwb3J0IGNsYXNzIElBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0IHtcbiAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czogYW55O1xuICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50X3JlZmVyZW5jZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXhwbGFuYXRpb246IHN0cmluZztcbiAgdXNlcl9uYW1lOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRfcmVmZXJlbmNlIDogc3RyaW5nLCByZWFzb24/IDogc3RyaW5nLCBleHBsYW5hdGlvbj8gOiBzdHJpbmcsIHVzZXJOYW1lPyA6IHN0cmluZykge1xuICAgIHRoaXMucGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1cyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIG5hbWU6IFwiQWxsb2NhdGVkXCJcbiAgICB9O1xuICAgIHRoaXMucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPSBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRfcmVmZXJlbmNlPSBwYXltZW50X3JlZmVyZW5jZTtcbiAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbiA/IHJlYXNvbiA6IG51bGw7XG4gICAgdGhpcy5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uID8gZXhwbGFuYXRpb24gOiBudWxsO1xuICAgIHRoaXMudXNlcl9uYW1lID0gdXNlck5hbWUgPyB1c2VyTmFtZSA6IG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5zZXJ2aWNlJzsgXG5pbXBvcnQge0J1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtJQlNQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQge0FsbG9jYXRlUGF5bWVudFJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWxsb2NhdGVQYXltZW50UmVxdWVzdCc7XG5pbXBvcnQge0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFsbG9jYXRlLXBheW1lbnRzJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiYWxsb2NhdGUtcGF5bWVudHNcIj5cbiAgPGRpdiAqbmdJZj1cInZpZXdTdGF0dXM9PT0nbWFpbkZvcm0nICYmIGlzVHVybk9mZlwiPlxuICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQUxMT0NBVEVQQVlNRU5UUyc+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzXCIgKm5nSWY9XCJwYXltZW50UmVmXCI+XG4gICAgICA8b2wgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdFwiPlxuICAgICAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCI+XG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwiZ290b1N1bW1hcnlQYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGlua1wiPkJhY2s8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L29sPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXNlY3Rpb25cIj5cbiAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5BbGxvY2F0ZSBwYXltZW50IHRvIGZlZSBncm91cDwvaDE+XG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5BbW91bnQgbGVmdCB0byBiZSBhbGxvY2F0ZWQ6XG4gICAgICAgIHt7IHVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBheW1lbnQtZ3JvdXAtc2VjdGlvblwiICpuZ0Zvcj1cImxldCBwYXltZW50R3JvdXAgb2YgcGF5bWVudEdyb3Vwc1wiPlxuICAgICAgPGgzIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+R3JvdXAgcmVmZXJlbmNlOiB7e3BheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZX19PC9oMz5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Vm9sdW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2FsY3VsYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+R3JvdXAgYW1vdW50IG91dHN0YW5kaW5nPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgZmVlIG9mIHBheW1lbnRHcm91cC5mZWVzOyAgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wxIGdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDFcIlxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwiaT09MFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtY2hvaWNlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidW5wYWllZEZlZS17e2l9fVwiIG5hbWU9XCJ1bmFzc2lnbmVkUmVjb3JkXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFBheW1lbnRHcm91cChwYXltZW50R3JvdXApXCIgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidW5wYWllZEZlZS17e2l9fVwiPjwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wxXCI+e3tmZWUuY29kZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wyXCI+IHt7ZmVlLmRlc2NyaXB0aW9ufX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wzXCI+IHt7ZmVlLnZvbHVtZT8gZmVlLnZvbHVtZSA6ICctJ319IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNFwiPlxuICAgICAgICAgICAgICB7eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNVwiPlxuICAgICAgICAgICAgICB7e2ZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNiBnb3Z1ay10YWJsZV9fY3VzdG9tLS1jb2w2XCJcbiAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGhcIiAqbmdJZj1cImk9PTBcIj5cbiAgICAgICAgICAgICAge3tnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fSA8L3RkPlxuXG4gICAgICAgICAgPC90cj5cblxuICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoPT0wXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cC1hbGxvY2F0ZVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIFtkaXNhYmxlZF09XCJpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZUFuZENvbnRpbnVlKClcIj5cbiAgICAgICAgQ29udGludWVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIodmlld1N0YXR1cyA9PT0gJ21haW5Gb3JtJyAmJiAhaXNUdXJuT2ZmKSB8fCB2aWV3U3RhdHVzID09PSAnYWxsb2NhdGVQYXltZW50Q29uZmlybWF0aW9uJ1wiPlxuICAgIDxjY3BheS1lcnJvci1iYW5uZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2Uuc2hvd0Vycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIj48L2NjcGF5LWVycm9yLWJhbm5lcj5cbiAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J3t7ZmVlZGJhY2tVcmxMYWJlbH19Jz5cbiAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXhsXCI+Q29uZmlybSBhc3NvY2lhdGlvbjwvaDE+XG4gICAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1sIGdvdnVrLWhlYWRpbmctbC0tY3VzdG9tXCI+XG4gICAgICBBbW91bnQgdG8gYmUgYWxsb2NhdGVkOiB7e2Ftb3VudEZvckFsbG9jYXRpb24gfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319XG4gICAgPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1ncm91cC1zZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXBcIj5cbiAgICAgIDxoMyBjbGFzcz1cImdvdnVrLWhlYWRpbmctbS0tY3VzdG9tXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5Hcm91cCByZWZlcmVuY2U6IHt7cGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlfX1cbiAgICAgIDwvaDM+XG4gICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Vm9sdW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2FsY3VsYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50IER1ZTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wxXCI+e3tmZWUuY29kZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wyXCI+IHt7ZmVlLmRlc2NyaXB0aW9ufX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wzXCI+IHt7ZmVlLnZvbHVtZT8gZmVlLnZvbHVtZSA6ICctJ319IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNFwiPlxuICAgICAgICAgICAgICB7eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNVwiPlxuICAgICAgICAgICAgICB7e2ZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w2XCIgW2F0dHIucm93c3Bhbl09XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAqbmdJZj1cImk9PTBcIj4ge3thZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmcgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319IDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRHdFplcm8gfHwgaXNSZW1haW5pbmdBbW91bnRMdFplcm8gfHwgcmVtYWluaW5nQW1vdW50ID09PSAwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0IGdvdnVrLXdhcm5pbmctdGV4dF9fY3VzdG9tXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICB7e3BheW1lbnRTZWN0aW9uTGFiZWwudGl0bGV9fSB7eyByZW1haW5pbmdBbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fVxuICAgICAgPC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiAqbmdJZj1cImlzUmVtYWluaW5nQW1vdW50R3RaZXJvIHx8IGlzUmVtYWluaW5nQW1vdW50THRaZXJvXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsLWhpbnRcIj5cbiAgICAgICAgICA8c3BhbiBpZD1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtaGludFwiIGNsYXNzPVwiZ292dWstaGludFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1tZXNzYWdlJzogcGF5bWVudFJlYXNvbkhhc0Vycm9yfVwiPlxuICAgICAgICAgICAge3twYXltZW50U2VjdGlvbkxhYmVsLnJlYXNvbn19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBheW1lbnRSZWFzb25IYXNFcnJvciA/ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCBmb3JtLWdyb3VwLWVycm9yJyA6ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCdcIlxuICAgICAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1yYWRpb3NcIiAqbmdJZj1cImlzUmVtYWluaW5nQW1vdW50R3RaZXJvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCIgKm5nRm9yPVwibGV0IHJlYXNvbiBvZiByZWFzb25MaXN0Lm92ZXJQYXltZW50IHwga2V5VmFsdWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwie3tyZWFzb24ua2V5fX1cIiBuYW1lPVwicGF5bWVudFJlYXNvblwiIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXltZW50UmVhc29uXCIgdmFsdWU9e3tyZWFzb24udmFsdWV9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1mb250X19jdXN0b21cIiBmb3I9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAge3tyZWFzb24udmFsdWV9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwicGF5bWVudFJlYXNvbkhhc0Vycm9yID8gJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsIGZvcm0tZ3JvdXAtZXJyb3InIDogJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsJ1wiXG4gICAgICAgICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRMdFplcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgcmVhc29uIG9mIHJlYXNvbkxpc3Quc2hvcnRGYWxsIHwga2V5VmFsdWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwie3tyZWFzb24ua2V5fX1cIiBuYW1lPVwicGF5bWVudFJlYXNvblwiIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXltZW50UmVhc29uXCIgdmFsdWU9e3tyZWFzb24udmFsdWV9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1mb250X19jdXN0b21cIiBmb3I9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAge3tyZWFzb24udmFsdWV9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtaGludFwiPlxuICAgICAgICAgIDxzcGFuIGlkPVwiaG93LWNvbnRhY3RlZC1jb25kaXRpb25hbC1oaW50XCIgY2xhc3M9XCJnb3Z1ay1oaW50XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLW1lc3NhZ2UnOiBwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvcn1cIj5cbiAgICAgICAgICAgIFByb3ZpZGUgYW4gZXhwbGFuYXRvcnkgbm90ZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvciA/ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCBmb3JtLWdyb3VwLWVycm9yJyA6ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCdcIlxuICAgICAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1yYWRpb3NcIiAqbmdJZj1cImlzUmVtYWluaW5nQW1vdW50R3RaZXJvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCIgKm5nRm9yPVwibGV0IGV4cGxhbmF0aW9uIG9mIGV4cGxhbmF0aW9uTGlzdC5vdmVyUGF5bWVudCB8IGtleVZhbHVlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cInt7ZXhwbGFuYXRpb24ua2V5fX1cIiBuYW1lPVwicGF5bWVudEV4cGxhbmF0aW9uXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBheW1lbnRFeHBsYW5hdGlvblwiIHZhbHVlPXt7ZXhwbGFuYXRpb24udmFsdWV9fVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYWRpb0J1dHRvbihleHBsYW5hdGlvbi5rZXksICdleHBsYW5hdGlvbicpXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstZm9udF9fY3VzdG9tXCIgZm9yPVwiaG93LWNvbnRhY3RlZC1jb25kaXRpb25hbFwiPlxuICAgICAgICAgICAgICAgIHt7ZXhwbGFuYXRpb24udmFsdWV9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvciA/ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCBmb3JtLWdyb3VwLWVycm9yJyA6ICdnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbCdcIlxuICAgICAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1yYWRpb3NcIiAqbmdJZj1cImlzUmVtYWluaW5nQW1vdW50THRaZXJvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCIgKm5nRm9yPVwibGV0IGV4cGxhbmF0aW9uIG9mIGV4cGxhbmF0aW9uTGlzdC5zaG9ydEZhbGwgfCBrZXlWYWx1ZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJ7e2V4cGxhbmF0aW9uLmtleX19XCIgbmFtZT1cInBheW1lbnRFeHBsYW5hdGlvblwiIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXltZW50RXhwbGFuYXRpb25cIiB2YWx1ZT17e2V4cGxhbmF0aW9uLnZhbHVlfX1cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFkaW9CdXR0b24oZXhwbGFuYXRpb24ua2V5LCAnZXhwbGFuYXRpb24nKVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWZvbnRfX2N1c3RvbVwiIGZvcj1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICB7e2V4cGxhbmF0aW9uLnZhbHVlfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm92ZXJVbmRlclBheW1lbnRGb3JtXCIgbm92YWxpZGF0ZT5cbiAgICAgIDxkaXZcbiAgICAgICAgW25nQ2xhc3NdPVwiaXNNb3JlRGV0YWlsc0JveEhpZGUgPyAnZ292dWstcmFkaW9zX19jb25kaXRpb25hbCBnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsLS1oaWRkZW4nIDogaXNQYXltZW50RGV0YWlsc0VtcHR5IHx8IGlzUGF5bWVudERldGFpbHNJbnZhbGlkIHx8IHBheW1lbnREZXRhaWxzTWluSGFzRXJyb3IgfHwgcGF5bWVudERldGFpbHNNYXhIYXNFcnJvciA/ICdnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsIGlubGluZS1lcnJvci1ib3JkZXInIDogJ2dvdnVrLXJhZGlvc19fY29uZGl0aW9uYWwnXCJcbiAgICAgICAgaWQ9XCJjb25kaXRpb25hbC1ob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8c3BhbiBpZD1cIm1vcmUtZGV0YWlsLWhpbnRcIiBjbGFzcz1cImdvdnVrLWhpbnQgZ292dWstZm9udF9fY3VzdG9tXCI+XG4gICAgICAgICAgICBQbGVhc2UgZW50ZXIgZGV0YWlsc1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJnb3Z1ay10ZXh0YXJlYVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1jbGFzcyc6IGlzUGF5bWVudERldGFpbHNFbXB0eSB8fCBpc1BheW1lbnREZXRhaWxzSW52YWxpZCB8fCBwYXltZW50RGV0YWlsc01pbkhhc0Vycm9yIHx8IHBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3J9XCJcbiAgICAgICAgICAgIGlkPVwibW9yZURldGFpbHNcIiBuYW1lPVwibW9yZURldGFpbHNcIiByb3dzPVwiNVwiIGZvcm1Db250cm9sTmFtZT1cIm1vcmVEZXRhaWxzXCI+XG4gICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNQYXltZW50RGV0YWlsc0VtcHR5IHx8IGlzUGF5bWVudERldGFpbHNJbnZhbGlkIHx8IHBheW1lbnREZXRhaWxzTWluSGFzRXJyb3IgfHwgcGF5bWVudERldGFpbHNNYXhIYXNFcnJvclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1BheW1lbnREZXRhaWxzRW1wdHlcIj5FbnRlciBhIGV4cGxhbmF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1BheW1lbnREZXRhaWxzSW52YWxpZFwiPkVudGVyIGEgdmFsaWQgZXhwbGFuYXRpb248L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBheW1lbnREZXRhaWxzTWluSGFzRXJyb3JcIj5FeHBsYW5hdGlvbiBzaG91bGQgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGF5bWVudERldGFpbHNNYXhIYXNFcnJvclwiPkV4cGxhbmF0aW9uIHNob3VsZCBiZSAyNTUgY2hhcmFjdGVycyBvciB1bmRlci48L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzQ29uZmlybUJ1dHRvbmRpc2FibGVkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJpc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA/ICdidXR0b24gYnV0dG9uLS1kaXNhYmxlZCcgOiAnYnV0dG9uJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1BbGxvY2F0ZVBheWVtZW50KClcIj5cbiAgICAgICAgICBDb25maXJtXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxBbGxvY2F0ZVBheW1lbnQoJGV2ZW50KVwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5gLFxuICBzdHlsZXM6IFtgLmFsbG9jYXRlLXBheW1lbnRze21hcmdpbjoyMHB4IDB9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sMSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2wze3dpZHRoOjEwJX0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2wyLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDZ7d2lkdGg6MjUlfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDQsLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sNXt3aWR0aDoxNSV9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1idXR0b24tZ3JvdXAtYWxsb2NhdGV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstYnV0dG9uLS1zZWNvbmRhcnl7bWFyZ2luLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOiNiM2I4YmRmMn0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWN1c3RvbS13YXJuaW5nX19tZXNzYWdle2ZvbnQtc2l6ZTozMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoxMnB4O2ZvbnQtd2VpZ2h0OjcwMH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXdhcm5pbmctdGV4dC1jdXN0b217bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudDtwYWRkaW5nOjEwcHggMCA1cHh9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY3VzdG9tLS1jb2wxe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MjBweDtwYWRkaW5nLWxlZnQ6MTVweH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDZ7dGV4dC1hbGlnbjpjZW50ZXJ9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1saXN0X19jdXN0b217cGFkZGluZy1sZWZ0OjIwcHh9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1mb250X19jdXN0b20sLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1oZWFkaW5nLW0tLWN1c3RvbSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWhpbnQsLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1sYWJlbC0tbSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWxpc3RfX2N1c3RvbSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXJhZGlvc19faXRlbSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXdhcm5pbmctdGV4dF9fY3VzdG9te2ZvbnQtc2l6ZToxOXB4fS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstcmFkaW9zX19jb25kaXRpb25hbC0taGlkZGVue2Rpc3BsYXk6bm9uZX0uYWxsb2NhdGUtcGF5bWVudHMgLmZvcm0tZ3JvdXAtZXJyb3J7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICNiMTBlMWU7cGFkZGluZy1sZWZ0OjE1cHh9LmFsbG9jYXRlLXBheW1lbnRzIC5pbmxpbmUtZXJyb3ItY2xhc3N7b3V0bGluZTojYTcxNDE0IHNvbGlkIDNweDtvdXRsaW5lLW9mZnNldDowfS5hbGxvY2F0ZS1wYXltZW50cyAuaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fS5hbGxvY2F0ZS1wYXltZW50cyAuaW5saW5lLWVycm9yLWJvcmRlcntib3JkZXItY29sb3I6I2E3MTQxNH1gXVxufSlcbmV4cG9ydCBjbGFzcyBBbGxvY2F0ZVBheW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuXG4gIG92ZXJVbmRlclBheW1lbnRGb3JtOiBGb3JtR3JvdXA7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgZmVlZGJhY2tVcmxMYWJlbDpzdHJpbmc7XG4gIHVuQWxsb2NhdGVkUGF5bWVudDogSUJTUGF5bWVudHMgPSB7XG4gICAgYW1vdW50OiAwXG4gIH07XG4gIHNpdGVJRDogc3RyaW5nID0gbnVsbDtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gIHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cDtcbiAgcGF5bWVudEdyb3VwczogSVBheW1lbnRHcm91cFtdID0gW107XHRcbiAgcmVtYWluaW5nQW1vdW50OiBudW1iZXI7XG4gIGlzUmVtYWluaW5nQW1vdW50R3RaZXJvOiBib29sZWFuO1xuICBpc01vcmVEZXRhaWxzQm94SGlkZTogYm9vbGVhbiAgPSB0cnVlO1xuICBpc1JlbWFpbmluZ0Ftb3VudEx0WmVybzogYm9vbGVhbjtcbiAgYWZ0ZXJGZWVBbGxvY2F0ZU91dHN0YW5kaW5nOiBudW1iZXI7XG4gIGFtb3VudEZvckFsbG9jYXRpb246IG51bWJlcjtcbiAgaXNDb25maXJtQnV0dG9uZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgb3RoZXJQYXltZW50RXhwbGFuYXRpb246IHN0cmluZyA9IG51bGw7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0ZlZUFtb3VudFplcm86IGJvb2xlYW4gPSBmYWxzZTtcdFxuXG4gIHBheW1lbnRSZWFzb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREZXRhaWxzRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXltZW50RGV0YWlsc0ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGF5bWVudERldGFpbHNNaW5IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RGV0YWlsc01heEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzVXNlck5hbWVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1VzZXJOYW1lSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjY2RSZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIGV4Y2VwdGlvblJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgcGF5bWVudFJlYXNvbjogc3RyaW5nID0gbnVsbDtcbiAgcGF5bWVudEV4cGxhbmF0aW9uOiBzdHJpbmcgPSBudWxsO1xuICB1c2VyTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcGF5bWVudFNlY3Rpb25MYWJlbDogYW55O1xuICBwYXltZW50UmVmOiBzdHJpbmcgPSBudWxsO1xuICBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGNvb2tpZVVzZXJOYW1lOiBzdHJpbmdbXSA9IFtdO1xuICBlbkNvb2tpZVVzZXJOYW1lOiBhbnk7XG4gIHVzZXJOYW1lRmllbGQ6IHN0cmluZyA9IG51bGw7XG5cbiAgcmVhc29uTGlzdDogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH09IHtcbiAgICBvdmVyUGF5bWVudDoge1xuICAgICAgaHdmUmV3YXJkOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXdhcmRlZC4gIFBsZWFzZSBpbmNsdWRlIHRoZSBIV0YgcmVmZXJlbmNlIG51bWJlciBpbiB0aGUgZXhwbGFuYXRvcnkgbm90ZScsXG4gICAgICB3cm9uZ0ZlZTogJ0luY29ycmVjdCBwYXltZW50IHJlY2VpdmVkJyxcbiAgICAgIG5vdElzc3VlQ2FzZTogJ1VuYWJsZSB0byBpc3N1ZSBjYXNlJyxcbiAgICAgIG90aGVyRGVkdWN0aW9uOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhlbHBXaXRoRmVlOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXBwbGljYXRpb24gZGVjbGluZWQnLFxuICAgICAgd3JvbmdGZWU6ICdJbmNvcnJlY3QgcGF5bWVudCByZWNlaXZlZCcsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuICBleHBsYW5hdGlvbkxpc3QgPSB7XG4gICAgb3ZlclBheW1lbnQ6IHtcbiAgICAgIHJlZmVyUmVmdW5kOiAnRGV0YWlscyBpbiBjYXNlIG5vdGVzLiAgUmVmdW5kIGR1ZScsXG4gICAgICBub1JlZnVuZDogJ0RldGFpbHMgaW4gY2FzZSBub3Rlcy4gTm8gcmVmdW5kIGR1ZScsXG4gICAgICBub0Nhc2U6ICdObyBjYXNlIGNyZWF0ZWQuICBSZWZ1bmQgZHVlJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhvbGRDYXNlOiAnSSBoYXZlIHB1dCBhIHN0b3Agb24gdGhlIGNhc2UgYW5kIGNvbnRhY3RlZCB0aGUgYXBwbGljYW50IHJlcXVlc3RpbmcgdGhlIGJhbGFuY2Ugb2YgcGF5bWVudCcsXG4gICAgICBoZWxkQ2FzZTogJ0kgaGF2ZSBwdXQgYSBzdG9wIG9uIHRoZSBjYXNlLiAgVGhlIGFwcGxpY2FudCBuZWVkcyB0byBiZSBjb250YWN0ZWQgdG8gcmVxdWVzdCB0aGUgYmFsYW5jZSBvZiBwYXltZW50JyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICBwcml2YXRlIGNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlOiBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSxcbiAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCxcbiAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbkZvcm0nO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5ic3BheW1lbnRkY24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMucGF5bWVudFJlZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT047XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZjtcbiAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBtb3JlRGV0YWlsczogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxccyxcXFxcLl0qKSQnKVxuICAgICAgXSkpLFxuICAgICAgdXNlck5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxcc10qKSQnKVxuICAgICAgXSkpLFxuICAgIH0pO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcbiAgfVxuICBnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5jYWxjdWxhdGVPdXRTdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApO1xuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwRGV0YWlscygpe1xuXG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnRHcm91cERldGFpbHModGhpcy5wYXltZW50UmVmKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cCAgPSBwYXltZW50R3JvdXA7XG4gICAgICAgICAgdGhpcy5zYXZlQW5kQ29udGludWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddLmZpbHRlcihwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgICBpZihmZWUuY2FsY3VsYXRlZF9hbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmVlQW1vdW50WmVybyA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZnN0Q29uID0gdGhpcy5nZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KDxJUGF5bWVudEdyb3VwPnBheW1lbnRHcm91cCksXG4gICAgICAgICAgICBzY25kQ24gPSBmc3RDb24gPiAwIHx8IChmc3RDb24gPT0gMCAmJiB0aGlzLmlzRmVlQW1vdW50WmVybykgJiYgcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID09PSB0aGlzLnBheW1lbnRSZWY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXltZW50UmVmID8gIHNjbmRDbiA6IGZzdENvbiA+IDAgfHwgKGZzdENvbiA9PSAwICYmIHRoaXMuaXNGZWVBbW91bnRaZXJvKTtcbiAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbiAgc2VsZWN0ZWRQYXltZW50R3JvdXAocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKSB7XHRcbiAgICB0aGlzLmlzQ29udGludWVCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1x0XG4gICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XHRcbiAgfVx0XG5cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgfVxuXG4gIGdvdG9TdW1tYXJ5UGFnZShldmVudDogYW55KSB7IFxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIH1cblxuICBjYW5jZWxBbGxvY2F0ZVBheW1lbnQoZXZlbnQ6IGFueSl7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FsbCcpO1xuICAgIGlmKCF0aGlzLmlzVHVybk9mZil7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW5Gb3JtJztcdFxuICAgIH1cbiAgfVxuICBjb25maXJtQWxsb2NhdGVQYXllbWVudCgpe1xuICAgIHRoaXMuZW5Db29raWVVc2VyTmFtZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZChyb3cgPT4gcm93LmluY2x1ZGVzKFwidXNlci1pbmZvXCIpKS5zcGxpdChcIj1cIilbMV0uc3BsaXQoXCI7XCIpO1xuICAgIHRoaXMuY29va2llVXNlck5hbWUgPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVuQ29va2llVXNlck5hbWUpKTtcbiAgICBcbiAgICBjb25zdCBmdWxsTmFtZSA9IHRoaXMuY29va2llVXNlck5hbWVbJ2ZvcmVuYW1lJ10gKyAnICcgKyB0aGlzLmNvb2tpZVVzZXJOYW1lWydzdXJuYW1lJ107XG5cbiAgICBjb25zdCBwYXltZW50RGV0YWlsc0ZpZWxkID0gdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5jb250cm9scy5tb3JlRGV0YWlscyxcbiAgICAgIHBheW1lbnRGb3JtRXJyb3IgPSB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmNvbnRyb2xzLm1vcmVEZXRhaWxzLmVycm9ycyxcbiAgICAgIHVzZXJOYW1lRmllbGQgPSBmdWxsTmFtZSxcbiAgICAgIGlzRW1wdHlDb25kdGlvbiA9IHRoaXMucGF5bWVudFJlYXNvbiAmJiB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbixcbiAgICAgIGlzT3RoZXJPcHRpb25TZWxlY3RlZCA9IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID09PSAnT3RoZXInO1xuXG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbGwnKTtcbiAgICBpZiAoICghdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyAmJiAhdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybykgfHwgaXNFbXB0eUNvbmR0aW9uICYmICghaXNPdGhlck9wdGlvblNlbGVjdGVkICYmIHVzZXJOYW1lRmllbGQubGVuZ3RoID4gMCB8fCBpc090aGVyT3B0aW9uU2VsZWN0ZWQgJiYgdXNlck5hbWVGaWVsZC5sZW5ndGggPiAwICYmIHBheW1lbnREZXRhaWxzRmllbGQudmFsaWQpKSB7XG4gICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMub3RoZXJQYXltZW50RXhwbGFuYXRpb24gPSB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbiA9PT0gJ090aGVyJyA/IHBheW1lbnREZXRhaWxzRmllbGQudmFsdWUgOiB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbjtcbiAgICAgIHRoaXMudXNlck5hbWUgPSB1c2VyTmFtZUZpZWxkO1xuICAgICAgdGhpcy5maW5hbFNlcnZpY2VDYWxsKCk7XG4gICAgfWVsc2Uge1xuICAgICAgaWYoIXRoaXMucGF5bWVudFJlYXNvbikge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZighdGhpcy5wYXltZW50RXhwbGFuYXRpb24pIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2V4cGxhbmF0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZih0aGlzLnBheW1lbnRFeHBsYW5hdGlvbiAmJiBpc090aGVyT3B0aW9uU2VsZWN0ZWQpIHtcbiAgICAgICAgaWYocGF5bWVudERldGFpbHNGaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwYXltZW50RGV0YWlsc0ZpZWxkLnZhbHVlICE9ICcnICYmIHBheW1lbnREZXRhaWxzRmllbGQuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwYXltZW50Rm9ybUVycm9yICYmIHBheW1lbnRGb3JtRXJyb3IubWlubGVuZ3RoICYmIHBheW1lbnRGb3JtRXJyb3IubWlubGVuZ3RoLmFjdHVhbExlbmd0aCA8IDMgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocGF5bWVudEZvcm1FcnJvciAmJiBwYXltZW50Rm9ybUVycm9yLm1heGxlbmd0aCAmJiBwYXltZW50Rm9ybUVycm9yLm1heGxlbmd0aC5hY3R1YWxMZW5ndGggPiAyNTUgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHVzZXJOYW1lRmllbGQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICd1c2VybmFtZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXNldEZvcm0odmFscywgZmllbGQpIHtcbiAgICBpZihmaWVsZD09PSdyZWFzb24nIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMucGF5bWVudFJlYXNvbkhhc0Vycm9yID0gdmFsc1swXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nZXhwbGFuYXRpb24nIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMucGF5bWVudEV4cGxhbmF0aW9uSGFzRXJyb3IgPSB2YWxzWzFdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdvdGhlcicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzRW1wdHkgPSB2YWxzWzJdO1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzSW52YWxpZCA9IHZhbHNbM107XG4gICAgICB0aGlzLnBheW1lbnREZXRhaWxzTWluSGFzRXJyb3IgPSB2YWxzWzRdO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01heEhhc0Vycm9yID0gdmFsc1s1XTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0ndXNlcm5hbWUnIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNVc2VyTmFtZUVtcHR5ID0gdmFsc1s2XTtcbiAgICAgIHRoaXMuaXNVc2VyTmFtZUludmFsaWQgPSB2YWxzWzddO1xuICAgIH1cbiAgfVxuICBmaW5hbFNlcnZpY2VDYWxsKCkge1xuICAgIGlmKCF0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlKSB7XG4gICAgICBsZXQgYWxsb2NhdGVkUmVxdWVzdCA9IHtcbiAgICAgICAgcmVhc29uOiB0aGlzLnBheW1lbnRSZWFzb24sXG4gICAgICAgIGFsbG9jYXRpb25fc3RhdHVzOidBbGxvY2F0ZWQnLFxuICAgICAgICBleHBsYW5hdGlvbjogdGhpcy5vdGhlclBheW1lbnRFeHBsYW5hdGlvbixcbiAgICAgICAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBuYW1lOiAnQWxsb2NhdGVkJ1xuICAgICAgICB9LFxuICAgICAgICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogdGhpcy5wYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsXG4gICAgICAgIGNhc2VfdHlwZTogdGhpcy5jYXNlVHlwZSxcbiAgICAgICAgdXNlcl9uYW1lOiB0aGlzLnVzZXJOYW1lXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0U3RyYXRlZ2ljQm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LCB0aGlzLmNhc2VUeXBlLCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSwgYWxsb2NhdGVkUmVxdWVzdCk7XG4gICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucG9zdEJTUGF5bWVudFN0cmF0ZWdpYyhwb3N0U3RyYXRlZ2ljQm9keSAsIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bkFsbG9jYXRlZFBheW1lbnQuZGNuX3JlZmVyZW5jZSwgJ1BST0NFU1NFRCcpLnN1YnNjcmliZShcbiAgICAgIHJlczEgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBsZXQgcmVzcG9uc2UxID0gSlNPTi5wYXJzZShyZXMxKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlMS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICh0aGlzLmNjZFJlZmVyZW5jZSwgdGhpcy51bkFsbG9jYXRlZFBheW1lbnQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSk7XG4gICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU0FsbG9jYXRlUGF5bWVudChyZXF1ZXN0Qm9keSwgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlczIgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxQm9keSA9IG5ldyBJQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdFxuICAgICAgICAgICAgICAocmVzcG9uc2UyWydkYXRhJ10ucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHJlc3BvbnNlMlsnZGF0YSddLnJlZmVyZW5jZSwgdGhpcy5wYXltZW50UmVhc29uLCB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uLCB0aGlzLnVzZXJOYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMi5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTQWxsb2NhdGlvblBheW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZShcbiAgXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlMyA9IEpTT04ucGFyc2UocmVzMyk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApOyAgXG4gIH1cbiAgfVxuXG4gIHNhdmVBbmRDb250aW51ZSgpe1xuICAgIGlmKHRoaXMucGF5bWVudEdyb3VwKSB7XG4gICAgICB0aGlzLmlzTW9yZURldGFpbHNCb3hIaWRlID0gdHJ1ZTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCdtb3JlRGV0YWlscycpLnJlc2V0KCk7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgnbW9yZURldGFpbHMnKS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgndXNlck5hbWUnKS5yZXNldCgpO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ3VzZXJOYW1lJykuc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5wYXltZW50UmVhc29uID0gJyc7XG4gICAgICB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbiA9ICcnO1xuICAgICAgbGV0IEdyb3VwT3V0c3RhbmRpbmdBbW91bnQgPSB0aGlzLmdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQodGhpcy5wYXltZW50R3JvdXApO1xuICAgICAgY29uc3QgcmVtYWluaW5nVG9CZUFzc2lnbmVkID0gdGhpcy51bkFsbG9jYXRlZFBheW1lbnQuYW1vdW50IC0gR3JvdXBPdXRzdGFuZGluZ0Ftb3VudDtcbiAgICAgIHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPiAwO1xuICAgICAgdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA9IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCA8IDA7XG4gICAgICB0aGlzLnBheW1lbnRTZWN0aW9uTGFiZWwgPSB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8geyBcbiAgICAgICAgICB0aXRsZTogJ1RoZXJlIGlzIGFuIE92ZXIgcGF5bWVudCBvZicsXG4gICAgICAgICAgcmVhc29uOiAnUHJvdmlkZSBhIHJlYXNvbi4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gdGhlIFJlZnVuZCBwcm9jZXNzLicsXG4gICAgICAgIH06IHRoaXMuaXNSZW1haW5pbmdBbW91bnRMdFplcm8gPyB7IFxuICAgICAgICAgIHRpdGxlOiAnVGhlcmUgaXMgYW4gVW5kZXIgcGF5bWVudCBvZicsXG4gICAgICAgICAgcmVhc29uOiAnUHJvdmlkZSBhIHJlYXNvbicsXG4gICAgICAgIH06IHsgXG4gICAgICAgICAgdGl0bGU6J0Ftb3VudCBsZWZ0IHRvIGJlIGFsbG9jYXRlZCcsXG4gICAgICAgICAgcmVhc29uOicnLFxuICAgICAgICB9O1xuICAgICAgdGhpcy5mZWVkYmFja1VybExhYmVsID0gdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyA/ICdDT05GSVJNQUxMT0NBVElPTl9TVVJQTFVTJyA6IHRoaXMuaXNSZW1haW5pbmdBbW91bnRMdFplcm8gPyAnQ09ORklSTUFMTE9DQVRJT05fU0hPUlRGQUxMJyA6ICdDT05GSVJNQUxMT0NBVElPTic7XG4gICAgICB0aGlzLnJlbWFpbmluZ0Ftb3VudCA9ICB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8gcmVtYWluaW5nVG9CZUFzc2lnbmVkIDogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCAqIC0xIDogMDtcbiAgICAgIHRoaXMuYWZ0ZXJGZWVBbGxvY2F0ZU91dHN0YW5kaW5nID0gcmVtYWluaW5nVG9CZUFzc2lnbmVkID49IDAgPyAwIDogKHJlbWFpbmluZ1RvQmVBc3NpZ25lZCAqIC0xKTtcbiAgICAgIHRoaXMuYW1vdW50Rm9yQWxsb2NhdGlvbiA9IEdyb3VwT3V0c3RhbmRpbmdBbW91bnQgPj0gdGhpcy51bkFsbG9jYXRlZFBheW1lbnQuYW1vdW50ID8gdGhpcy51bkFsbG9jYXRlZFBheW1lbnQuYW1vdW50IDogR3JvdXBPdXRzdGFuZGluZ0Ftb3VudDtcbiAgICAgIGlmKHRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2FsbG9jYXRlUGF5bWVudENvbmZpcm1hdGlvbic7XHRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgIGdldFVuYXNzaWduZWRQYXltZW50KCkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlEQ04odGhpcy5ic3BheW1lbnRkY24pLnN1YnNjcmliZShcbiAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50ID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMuZmlsdGVyKHBheW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXltZW50ICYmIHBheW1lbnQuZGNuX3JlZmVyZW5jZSA9PSB0aGlzLmJzcGF5bWVudGRjbjtcbiAgICAgICAgfSlbMF07XG4gICAgICAgIHRoaXMuc2l0ZUlEID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucmVzcG9uc2libGVfc2VydmljZV9pZDtcbiAgICAgICAgY29uc3QgYmVDY2ROdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlLFxuICAgICAgICBiZUV4Y2VwdGlvbk51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLFxuICAgICAgICBleGNlcHRpb25SZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyID09PSB0aGlzLmNjZENhc2VOdW1iZXIgPyBudWxsIDogdGhpcy5jY2RDYXNlTnVtYmVyIDogdGhpcy5jY2RDYXNlTnVtYmVyO1xuICAgICAgIHRoaXMuY2NkUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA6IG51bGw7XG4gICAgICAgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UgPSBiZUV4Y2VwdGlvbk51bWJlciA/IGJlRXhjZXB0aW9uTnVtYmVyIDogZXhjZXB0aW9uUmVmZXJlbmNlO1xuICAgICAgIHRoaXMuZ2V0UGF5bWVudEdyb3VwRGV0YWlscygpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHNlbGVjdFJhZGlvQnV0dG9uKGtleSwgdHlwZSkge1xuICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgIGlmKCB0eXBlID09PSAnZXhwbGFuYXRpb24nICYmIGtleSA9PT0gJ290aGVyJyApe1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzRW1wdHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNaW5IYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01heEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTW9yZURldGFpbHNCb3hIaWRlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi9JRmVlJztcblxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvblJlcXVlc3Qge1xuICBiZW5lZmljaWFyeV9uYW1lOiBzdHJpbmc7XG4gIGNjZF9jYXNlX251bWJlcjogc3RyaW5nO1xuICBmZWU6IElGZWU7XG4gIGh3Zl9hbW91bnQ6IG51bWJlcjtcbiAgaHdmX3JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nO1xuICBjYXNlX3R5cGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihjY2RfY2FzZV9udW1iZXI6IHN0cmluZywgZmVlOiBJRmVlLCBod2ZfYW1vdW50OiBudW1iZXIsIGh3Zl9yZWZlcmVuY2U6IHN0cmluZywgY2FzZVR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuY2NkX2Nhc2VfbnVtYmVyID0gY2NkX2Nhc2VfbnVtYmVyO1xuICAgIHRoaXMuZmVlID0gZmVlO1xuICAgIHRoaXMuaHdmX2Ftb3VudCA9IGh3Zl9hbW91bnQ7XG4gICAgdGhpcy5od2ZfcmVmZXJlbmNlID0gaHdmX3JlZmVyZW5jZTtcbiAgICB0aGlzLmNhc2VfdHlwZSA9IGNhc2VUeXBlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImFkZC1yZW1pc3Npb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICAgICAgRXJyb3IgaW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4nXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0FERFJFTUlTU0lPTic+XG4gICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+QWRkIHJlbWlzc2lvbjwvaDE+XG4gICAgICA8Zm9ybSBub3ZhbGlkYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwicmVtaXNzaW9uRm9ybVwiIG5vdmFsaWRhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1sYWJlbC0tc1wiIGZvcj1cInJlbWlzc2lvbi1jb2RlXCI+XG4gICAgICAgICAgICAgICAgICBBZGQgcmVtaXNzaW9uIHRvIHt7IGZlZS5jb2RlIH19Ont7IGZlZS5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+RW50ZXIgcmVtaXNzaW9uIGZvciByZWZlcmVuY2UuIEZvciBleGFtcGxlOiBIV0YtQTFCLTIzQzwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNSZW1pc3Npb25Db2RlRW1wdHkgfHwgcmVtaXNzaW9uQ29kZUhhc0Vycm9yfVwiIGNsYXNzPVwiZ292dWstaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTIwIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiBpZD1cInJlbWlzc2lvbkNvZGVcIiBhcmlhLWxhYmVsPVwicmVtaXNzaW9uQ29kZVwiICBuYW1lPVwicmVtaXNzaW9uQ29kZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVtaXNzaW9uQ29kZVwiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1JlbWlzc2lvbkNvZGVFbXB0eSB8fCByZW1pc3Npb25Db2RlSGFzRXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVtaXNzaW9uQ29kZUVtcHR5XCI+RW50ZXIgYSByZW1pc3Npb24gY29kZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlbWlzc2lvbkNvZGVIYXNFcnJvclwiPkVudGVyIGEgdmFpbGQgcmVtaXNzaW9uIGNvZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstbGFiZWwtLXNcIiBmb3I9XCJhbW91bnRcIj5cbiAgICAgICAgICAgICAgICBIb3cgbXVjaCBkb2VzIHRoZSBhcHBsaWNhbnQgbmVlZCB0byBwYXk/XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgPGRpdiBpZD1cImFtb3VudC1jdXJyZW5jeVwiIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+aW4gcG91bmRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhtY3RzLWN1cnJlbmN5LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhtY3RzLWN1cnJlbmN5LWlucHV0X19zeW1ib2xcIiBhcmlhLWhpZGRlbj1cInRydWVcIj7DgsKjPC9kaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTEwXCIgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItY2xhc3MnOiBpc0Ftb3VudEVtcHR5IHx8IGFtb3VudEhhc0Vycm9yIHx8IGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcn1cIiBpZD1cImFtb3VudFwiIGFyaWEtbGFiZWw9XCJhbW91bnRcIiAgbmFtZT1cImFtb3VudFwiIHR5cGU9XCJ0ZXh0XCIgYXJpYS1kZXNjcmliZWRieT1cImFtb3VudC1jdXJyZW5jeVwiIGZvcm1Db250cm9sTmFtZT1cImFtb3VudFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzQW1vdW50RW1wdHkgfHwgYW1vdW50SGFzRXJyb3IgfHwgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzQW1vdW50RW1wdHlcIj5FbnRlciBhIGFtb3VudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYW1vdW50SGFzRXJyb3JcIj5FbnRlciBhIHZhaWxkIGFtb3VudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yXCI+VGhlIHJlbWlzc2lvbiBhbW91bnQgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGZlZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImFkZFJlbWlzc2lvbigpXCI+XG4gICAgICAgICAgICAgIFN1Ym1pdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdjb25maXJtYXRpb24nXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0FERFJFTUlTU0lPTkNPTkZJUk1BVElPTic+IFxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gYWRkIHJlbWlzc2lvbiB0byB0aGlzIGZlZT9cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlJlbWlzc2lvbiBjb2RlOjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPkZlZSBjb2RlOjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5jb2RlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+RmVlIGRlc2NyaXB0aW9uOjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPkFtb3VudCB0aGUgYXBwbGljYW50IG11c3QgcGF5OjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ICByZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSAgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuXG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxSZW1pc3Npb24uZW1pdCgpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSdpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAoY2xpY2spPVwiY29uZmlybVJlbWlzc2lvbigpXCI+XG4gICAgICAgIENvbmZpcm1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLmFkZC1yZW1pc3Npb24gLmJ1dHRvbnttYXJnaW46MjBweCAycHh9LmFkZC1yZW1pc3Npb24gdGQuZ292dWstdGFibGVfX2NlbGx7d2lkdGg6NTAlfS5hZGQtcmVtaXNzaW9uIC5nb3Z1ay1idXR0b24tLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNkZWUwZTI7Ym94LXNoYWRvdzowIDJweCAwICM4NTg2ODg7Y29sb3I6IzBiMGMwYzttYXJnaW4tcmlnaHQ6LjVlbX0uYWRkLXJlbWlzc2lvbiAuZ292dWstbGFiZWwtLXMsLmFkZC1yZW1pc3Npb24gLmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dCwuYWRkLXJlbWlzc2lvbiAuaG1jdHMtY3VycmVuY3ktaW5wdXRfX3N5bWJvbHtmb250LXNpemU6MTlweH0uYWRkLXJlbWlzc2lvbiAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0uYWRkLXJlbWlzc2lvbiAuaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZlZTogSUZlZTtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc09sZFBjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2FuY2VsUmVtaXNzaW9uOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xuICBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgb3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuXG4gIGlzUmVtaXNzaW9uQ29kZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbkNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCcpXG4gICAgICBdKSksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKCkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29uZmlybWF0aW9uJztcbiAgICB9ZWxzZSB7XG5cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCl7XG4gICAgaWYoZmllbGQ9PT0ncmVtaXNzaW9uQ29kZScgfHwgZmllbGQ9PT0nQWxsJykge1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0nYW1vdW50JyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLmNhc2VUeXBlKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkuc3VjY2Vzcykge1xuICAgICAgICAgIGxldCBMRFVybCA9IHRoaXMuaXNUdXJuT2ZmID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgICAgICAgICBMRFVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgICAgTERVcmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSdcbiAgICAgICAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9ZmVlLXN1bW1hcnkmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0mcGF5bWVudEdyb3VwUmVmPSR7dGhpcy5wYXltZW50R3JvdXBSZWZ9JmRjbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY259JHtMRFVybH1gKTtcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA9IHRoaXMuaXNOZXdQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID0gdGhpcy5pc09sZFBjaXBhbE9mZjtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG5cbiAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5AUGlwZSh7XG4gIG5hbWU6ICdjY2RIeXBoZW5zJ1xufSlcbmV4cG9ydCBjbGFzcyBDY2RIeXBoZW5zUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBhcmdzPzogYW55KTogYW55IHtcbiAgICBjb25zdCBwYXR0ZXJuID0gL14oWzAtOV17NH0pKyhbMC05XXs0fSkrKFswLTldezR9KSsoWzAtOV17NH0pJC87XG4gICAgaWYgKCB2YWx1ZS5tYXRjaChwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwnJDEtJDItJDMtJDQnKSAgXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQFBpcGUoe1xuICBuYW1lOiAna2V5VmFsdWUnXG59KVxuZXhwb3J0IGNsYXNzIGtleVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHRyYW5zZm9ybShpbnB1dDogYW55KTogYW55IHtcbiAgICBsZXQga2V5cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBpbiBpbnB1dCkge1xuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAga2V5cy5wdXNoKHsga2V5OiBrZXksIHZhbHVlOiBpbnB1dFtrZXldfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBQaXBlKHsgbmFtZTogJ3Nhbml0aXplSHRtbCcgfSlcbmV4cG9ydCBjbGFzcyBTYW5pdGl6ZUh0bWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55KTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG5pbXBvcnQgKiBhcyBYTFNYU3R5bGUgZnJvbSAneGxzeC1zdHlsZSc7XG5cblxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbmNvbnN0IEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBYbEZpbGVTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIHB1YmxpYyBleHBvcnRBc0V4Y2VsRmlsZShqc29uOiBhbnlbXSwgZXhjZWxGaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQ7IFxuICAgIGxldCB3b3JrYm9vazogWExTWC5Xb3JrQm9vazsgXG5cbiAgICBpZihleGNlbEZpbGVOYW1lLm1hdGNoKCdEYXRhX0xvc3MnKSE9PSBudWxsKXtcbiAgICAgd29ya3NoZWV0ID0gIFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uLHtoZWFkZXI6Wydsb3NzX3Jlc3AnLCdwYXltZW50X2Fzc2V0X2RjbicsJ2Vudl9yZWYnLCdlbnZfaXRlbScsJ3Jlc3Bfc2VydmljZV9pZCcsJ3Jlc3Bfc2VydmljZV9uYW1lJywnZGF0ZV9iYW5rZWQnLCdiZ2NfYmF0Y2gnLCdwYXltZW50X21ldGhvZCcsJ2Ftb3VudCddfSk7XG4gICAgIHdvcmtzaGVldCA9ICB0aGlzLnNldERhdGFMb3NzUmVwb3J0SGVhZGVycyh3b3Jrc2hlZXQpO1xuICAgICB3b3Jrc2hlZXQgPSB0aGlzLmF1dG9GaXRDb2x1bW5zKHdvcmtzaGVldCxqc29uKTtcbiAgICAgfSBlbHNlIGlmKGV4Y2VsRmlsZU5hbWUubWF0Y2goJ1VucHJvY2Vzc2VkJykhPT0gbnVsbCl7XG4gICAgIHdvcmtzaGVldCA9ICBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbix7aGVhZGVyOlsncmVzcF9zZXJ2aWNlX2lkJywncmVzcF9zZXJ2aWNlX25hbWUnLCdleGNlcHRpb25fcmVmJywnY2NkX3JlZicsJ2RhdGVfYmFua2VkJywnYmdjX2JhdGNoJywncGF5bWVudF9hc3NldF9kY24nLCdlbnZfcmVmJywnZW52X2l0ZW0nLCdwYXltZW50X21ldGhvZCcsJ2Ftb3VudCddfSk7XG4gICAgIHdvcmtzaGVldCA9ICB0aGlzLnNldFVucHJvY2Vzc2VkUmVwb3J0SGVhZGVycyh3b3Jrc2hlZXQpO1xuICAgICB3b3Jrc2hlZXQgPSB0aGlzLmF1dG9GaXRDb2x1bW5zKHdvcmtzaGVldCxqc29uKTtcbiAgICB9IGVsc2UgaWYoZXhjZWxGaWxlTmFtZS5tYXRjaCgnUHJvY2Vzc2VkX1VuYWxsb2NhdGVkJykhPT0gbnVsbCl7XG4gICAgICB3b3Jrc2hlZXQgPSAgWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGpzb24se2hlYWRlcjpbJ3Jlc3Bfc2VydmljZV9pZCcsJ3Jlc3Bfc2VydmljZV9uYW1lJywnYWxsb2NhdGlvbl9zdGF0dXMnLCdyZWNlaXZpbmdfb2ZmaWNlJywnYWxsb2NhdGlvbl9yZWFzb24nLCdjY2RfZXhjZXB0aW9uX3JlZmVyZW5jZScsJ2NjZF9jYXNlX3JlZmVyZW5jZScsJ3BheW1lbnRfYXNzZXRfZGNuJywnZW52X3JlZicsJ2Vudl9pdGVtJywnZGF0ZV9iYW5rZWQnLCdiZ2NfYmF0Y2gnLCdwYXltZW50X21ldGhvZCcsJ2Ftb3VudCddfSk7XG4gICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXRQcm9jZXNzZWRVbmFsbG9jYXRlZFJlcG9ydEhlYWRlcnMod29ya3NoZWV0KTtcbiAgICAgIHdvcmtzaGVldCA9IHRoaXMuYXV0b0ZpdENvbHVtbnMod29ya3NoZWV0LGpzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3b3Jrc2hlZXQgPSAgWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGpzb24se2hlYWRlcjpbJ3Jlc3Bfc2VydmljZV9pZCcsJ3Jlc3Bfc2VydmljZV9uYW1lJywnc3VycGx1c19zaG9ydGZhbGwnLCdiYWxhbmNlJywncGF5bWVudF9hbW91bnQnLCdjY2RfY2FzZV9yZWZlcmVuY2UnLCAnY2NkX2V4Y2VwdGlvbl9yZWZlcmVuY2UnLCAncHJvY2Vzc2VkX2RhdGUnLCAncmVhc29uJywgJ2V4cGxhbmF0aW9uJywgJ3VzZXJfbmFtZSddfSk7XG4gICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXRTaG9ydEZhbGxSZXBvcnRIZWFkZXJzKHdvcmtzaGVldCk7XG4gICAgICB3b3Jrc2hlZXQgPSB0aGlzLmF1dG9GaXRDb2x1bW5zKHdvcmtzaGVldCxqc29uKTtcbiAgICB9XG4gICAgd29ya2Jvb2sgPSB7IFNoZWV0czogeyAnZGF0YSc6IHdvcmtzaGVldCB9LCBTaGVldE5hbWVzOiBbJ2RhdGEnXSB9O1xuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XG4gICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIGV4Y2VsRmlsZU5hbWUpO1xuICB9XG5cblxucHJpdmF0ZSBhdXRvRml0Q29sdW1ucyAod29ya3NoZWV0OiBYTFNYLldvcmtTaGVldCxqc29uOmFueSkgOiBYTFNYLldvcmtTaGVldCB7XG4gIGxldCBvYmplY3RNYXhMZW5ndGggPSBbXTsgXG4gIGxldCBDb2xXaWR0aCA9IFtdO1xuICBsZXQgb2JqID0gPGFueT5PYmplY3Q7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSBvYmoudmFsdWVzKGpzb25baV0pO1xuICAgICAgbGV0IGtleSA9IG9iai5rZXlzKGpzb25baV0pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZih2YWx1ZVtqXSA9PT0gbnVsbCl7XG4gICAgICAgICAgdmFsdWVbal0gPSAnJztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3RNYXhMZW5ndGhbal0gPVxuICAgICAgICAgIGtleVtqXS5sZW5ndGggPj0gdmFsdWVbal0ubGVuZ3RoXG4gICAgICAgICAgICA/IGtleVtqXS5sZW5ndGgrMlxuICAgICAgICAgICAgOiB2YWx1ZVtqXS5sZW5ndGgrMTtcbiAgICAgICAgICAgIGlmKCB2YWx1ZVtqXS5sZW5ndGggPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgIG9iamVjdE1heExlbmd0aFtqXSA9ICBrZXlbal0ubGVuZ3RoKzI7XG4gICAgICAgICAgICB9XG4gICAgICBDb2xXaWR0aC5wdXNoKHsnd2lkdGgnOiArb2JqZWN0TWF4TGVuZ3RoW2pdfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHdvcmtzaGVldFsnIWNvbHMnXSA9IENvbFdpZHRoO1xuICAgIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cblxucHJpdmF0ZSBzZXREYXRhTG9zc1JlcG9ydEhlYWRlcnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQpOiBYTFNYLldvcmtTaGVldCB7XG4gIHdvcmtzaGVldC5BMS52ID0gXCJMb3NzX1Jlc3BcIjtcbiAgd29ya3NoZWV0LkIxLnYgPSBcIlBheW1lbnRfQXNzZXRfRENOXCI7XG4gIHdvcmtzaGVldC5DMS52ID0gXCJFbnZlbG9wZV9SZWZcIjtcbiAgd29ya3NoZWV0LkQxLnYgPSBcIkVudmVsb3BlX0l0ZW1cIjtcbiAgd29ya3NoZWV0LkUxLnYgPSBcIlJlc3BfU2VydmljZSBJRFwiO1xuICB3b3Jrc2hlZXQuRjEudiA9IFwiUmVzcF9TZXJ2aWNlIE5hbWVcIjtcbiAgd29ya3NoZWV0LkcxLnYgPSBcIkRhdGVfQmFua2VkXCI7XG4gIHdvcmtzaGVldC5IMS52ID0gXCJCR0NfQmF0Y2hcIjtcbiAgd29ya3NoZWV0LkkxLnYgPSBcIlBheW1lbnRfTWV0aG9kXCI7XG4gIHdvcmtzaGVldC5KMS52ID0gXCJBbW91bnRcIjtcbiAgcmV0dXJuIHdvcmtzaGVldDtcbn1cblxucHJpdmF0ZSBzZXRVbnByb2Nlc3NlZFJlcG9ydEhlYWRlcnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQpOiBYTFNYLldvcmtTaGVldCB7XG4gIHdvcmtzaGVldC5BMS52ID0gXCJSZXNwX1NlcnZpY2UgSURcIjtcbiAgd29ya3NoZWV0LkIxLnYgPSBcIlJlc3BfU2VydmljZSBOYW1lXCI7XG4gIHdvcmtzaGVldC5DMS52ID0gXCJFeGNlcHRpb25fUmVmXCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJDQ0RfUmVmXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJEYXRlX0JhbmtlZFwiO1xuICB3b3Jrc2hlZXQuRjEudiA9IFwiQkdDX0JhdGNoXCI7XG4gIHdvcmtzaGVldC5HMS52ID0gXCJQYXltZW50X0Fzc2V0X0RDTlwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiRW52ZWxvcGVfUmVmXCI7XG4gIHdvcmtzaGVldC5JMS52ID0gXCJFbnZlbG9wZV9JdGVtXCI7XG4gIHdvcmtzaGVldC5KMS52ID0gXCJQYXltZW50X01ldGhvZFwiO1xuICB3b3Jrc2hlZXQuSzEudiA9IFwiQW1vdW50XCI7XG4gIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cbnByaXZhdGUgc2V0UHJvY2Vzc2VkVW5hbGxvY2F0ZWRSZXBvcnRIZWFkZXJzICh3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0KTogWExTWC5Xb3JrU2hlZXQge1xuICB3b3Jrc2hlZXQuQTEudiA9IFwiUmVzcF9TZXJ2aWNlIElEXCI7XG4gIHdvcmtzaGVldC5CMS52ID0gXCJSZXNwX1NlcnZpY2UgTmFtZVwiO1xuICB3b3Jrc2hlZXQuQzEudiA9IFwiQWxsb2NhdGlvbl9TdGF0dXNcIjtcbiAgd29ya3NoZWV0LkQxLnYgPSBcIlJlY2VpdmluZ19PZmZpY2VcIjtcbiAgd29ya3NoZWV0LkUxLnYgPSBcIkFsbG9jYXRpb25fUmVhc29uXCI7XG4gIHdvcmtzaGVldC5GMS52ID0gXCJDQ0RfRXhjZXB0aW9uX1JlZlwiO1xuICB3b3Jrc2hlZXQuRzEudiA9IFwiQ0NEX0Nhc2VfUmVmXCI7XG4gIHdvcmtzaGVldC5IMS52ID0gXCJQYXltZW50X0Fzc2V0X0RDTlwiO1xuICB3b3Jrc2hlZXQuSTEudiA9IFwiRW52ZWxvcGVfUmVmXCI7XG4gIHdvcmtzaGVldC5KMS52ID0gXCJFbnZlbG9wZV9JdGVtXCI7XG4gIHdvcmtzaGVldC5LMS52ID0gXCJEYXRlX0JhbmtlZFwiO1xuICB3b3Jrc2hlZXQuTDEudiA9IFwiQkdDX0JhdGNoXCI7XG4gIHdvcmtzaGVldC5NMS52ID0gXCJQYXltZW50X01ldGhvZFwiO1xuICB3b3Jrc2hlZXQuTjEudiA9IFwiQW1vdW50XCI7XG4gIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cbnByaXZhdGUgc2V0U2hvcnRGYWxsUmVwb3J0SGVhZGVycyAod29ya3NoZWV0OiBYTFNYLldvcmtTaGVldCk6IFhMU1guV29ya1NoZWV0IHtcbiAgd29ya3NoZWV0LkExLnYgPSBcIlJlc3BfU2VydmljZSBJRFwiO1xuICB3b3Jrc2hlZXQuQjEudiA9IFwiUmVzcF9TZXJ2aWNlIE5hbWVcIjtcbiAgd29ya3NoZWV0LkMxLnYgPSBcIk92ZXIgUGF5bWVudF9VbmRlciBQYXltZW50XCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJCYWxhbmNlXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJQYXltZW50X0Ftb3VudFwiO1xuICB3b3Jrc2hlZXQuRjEudiA9IFwiQ0NEX0Nhc2VfUmVmXCI7XG4gIHdvcmtzaGVldC5HMS52ID0gXCJFeGNlcHRpb25fUmVmXCI7XG4gIHdvcmtzaGVldC5IMS52ID0gXCJQcm9jZXNzZWRfRGF0ZVwiO1xuICB3b3Jrc2hlZXQuSTEudiA9IFwiUmVhc29uXCI7XG4gIHdvcmtzaGVldC5KMS52ID0gXCJFeHBsYW5hdGlvblwiO1xuICB3b3Jrc2hlZXQuSzEudiA9IFwiVXBkYXRlZCBOYW1lXCI7XG4gIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cbnByaXZhdGUgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XG4gICAgICB0eXBlOiBFWENFTF9UWVBFXG4gICAgfSk7XG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArIEVYQ0VMX0VYVEVOU0lPTik7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtYbEZpbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy94bC1maWxlL3hsLWZpbGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXJlcG9ydHMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nUkVQT1JUUyc+XG4gICAgICA8Y2NwYXktZXJyb3ItYmFubmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlLnNob3dFcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCI+PC9jY3BheS1lcnJvci1iYW5uZXI+XG4gICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZC0teGxcIj5cbiAgICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWZpZWxkc2V0X19oZWFkaW5nXCI+IENob29zZSB0aGUgcmVwb3J0IHR5cGUgYW5kIGRhdGUgcmFuZ2U8L2gxPlxuICAgICAgPC9sZWdlbmQ+XG48L2Rpdj5cbjxmb3JtIFtmb3JtR3JvdXBdPVwicmVwb3J0c0Zvcm1cIj5cbiAgICAgPGRpdiAgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbFwiIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCI+XG4gICAgICAgICAgPGRpdiAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBpZD1cIkRhdGFMb3NzXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVEYXRlcygnREFUQV9MT1NTJylcIlxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIkRBVEFfTE9TU1wiIFxuICAgICAgICAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiRGF0YUxvc3NcIi8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJEYXRhTG9zc1wiPkRhdGEgbG9zczwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+TWlzc2luZyB0cmFuc2FjdGlvbnMgd2hlcmUgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIG9ubHkgZWl0aGVyIG9mIEV4ZWxhIG9yIEJ1bGsgc2Nhbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIGlkPVwiVW5wcm9jZXNzZWRUcmFuc2FjdGlvbnNcIlxuICAgICAgICAgICAgICBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZURhdGVzKCdVTlBST0NFU1NFRCcpXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJVTlBST0NFU1NFRFwiIFxuICAgICAgICAgICAgICBkYXRhLWFyaWEtY29udHJvbHM9XCJVbnByb2Nlc3NlZFRyYW5zYWN0aW9uc1wiLz5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cIlVucHJvY2Vzc2VkVHJhbnNhY3Rpb25zXCI+VW5wcm9jZXNzZWQgdHJhbnNhY3Rpb25zPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5UcmFuc2FjdGlvbiByZWNvcmRzIHRoYXQgYXJlIHN0aWxsIHVucHJvY2Vzc2VkIGJ5IHN0YWZmLjwvc3Bhbj5cbiAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICBpZD1cIlByb2Nlc3NlZFVuYWxsb2NhdGVkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICBuYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlRGF0ZXMoJ1BST0NFU1NFRF9VTkFMTE9DQVRFRCcpXCJcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICB2YWx1ZT1cIlBST0NFU1NFRF9VTkFMTE9DQVRFRFwiIFxuICAgICAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiUHJvY2Vzc2VkVW5hbGxvY2F0ZWRcIi8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWxhYmVsLS1tXCIgZm9yPVwiUHJvY2Vzc2VkVW5hbGxvY2F0ZWRcIj5Qcm9jZXNzZWQgdW5hbGxvY2F0ZWQ8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5QYXltZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgw6LCgMKYVW5pZGVudGlmaWVkw6LCgMKZIG9yIMOiwoDCmFRyYW5zZmVycmVkw6LCgMKZIChVbnNvbGljaXRlZCByZXF1ZXN0cyk8L3NwYW4+XG4gICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgaWQ9XCJTaG9ydGZhbGxzYW5kU3VycGx1c1wiXG4gICAgICAgICAgICBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZURhdGVzKCdTVVJQTFVTX0FORF9TSE9SVEZBTEwnKVwiXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgdmFsdWU9XCJTVVJQTFVTX0FORF9TSE9SVEZBTExcIiBcbiAgICAgICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cIlNob3J0ZmFsbHNhbmRTdXJwbHVzXCIvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cIlNob3J0ZmFsbHNhbmRTdXJwbHVzXCI+VW5kZXIgcGF5bWVudCBhbmQgT3ZlciBwYXltZW50PC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+UmVxdWVzdHMgd2hlcmUgYmFsYW5jZXMgYXJlIG1hcmtlZCBhcyBVbmRlciBwYXltZW50L092ZXIgcGF5bWVudCBmdXJ0aGVyIGNhc2UgbWFuYWdlbWVudC5cbiAgICAgICAgICAgICAgIEUuZzogUmVmdW5kIGFwcHJvdmFsLCBDdXN0b21lciBjb250YWN0PC9zcGFuPlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgPC9kaXY+XG4gICAgIDwvZGl2PlxuICAgICA8ZGl2ICBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlZnJvbVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cImRhdGUtZnJvbVwiPkRhdGUgZnJvbTwvbGFiZWw+XG4gICAgICA8aW5wdXQgKGNoYW5nZSk9XCJnZXRTZWxlY3RlZEZyb21EYXRlKClcIiBbbWF4XT1cImdldFRvZGF5KClcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZGF0ZS1mcm9tXCIgbmFtZT1cImRhdGUtZnJvbVwiIHR5cGU9XCJkYXRlXCIgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVwiIHJlcXVpcmVkLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRvXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWxhYmVsLS1tXCIgZm9yPVwiZGF0ZS10b1wiPkRhdGUgdG88L2xhYmVsPlxuICAgICAgPGlucHV0IChjaGFuZ2UpPVwiZ2V0U2VsZWN0ZWRGcm9tRGF0ZSgpXCIgW21heF09XCJnZXRUb2RheSgpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImRhdGUtdG9cIiBuYW1lPVwic2VhcmNoXCIgdHlwZT1cImRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCIgcmVxdWlyZWQvPlxuICAgICAgPC9kaXY+XG4gICAgIDwvZGl2PlxuICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZSB8fCBpc0RhdGVSYW5nZUJldG5XZWVrXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cImlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGVcIj5QbGVhc2Ugc2VsZWN0ICdEYXRlIEZyb20nIGxlc3MgdGhhbiBvciBlcXVhbCB0byAnRGF0ZSBUbyc8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImlzRGF0ZVJhbmdlQmV0bldlZWtcIj4gUGxlYXNlIHNlbGVjdCB0aGUgZGF0ZSByYW5nZSBiZXR3ZWVuIDcgZGF5czwvc3Bhbj5cbiAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuc3VibWl0XCI+XG4gICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJkb3dubG9hZFJlcG9ydCgpXCIgY2xhc3M9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIXJlcG9ydHNGb3JtLnZhbGlkIHx8IGlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCB8fCBpc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlIHx8IGlzRGF0ZVJhbmdlQmV0bldlZWtcIj5Eb3dubG9hZCByZXBvcnQ8L2J1dHRvbj5cbiAgIDwvZGl2PlxuIDwvZm9ybT5cbiAgICBcbmAsXG4gIHN0eWxlczogW2AuZ292dWstcmFkaW9zX19pbnB1dDpmb2N1cysuZ292dWstcmFkaW9zX19sYWJlbDo6YmVmb3Jle2JvcmRlci13aWR0aDo0cHg7Ym94LXNoYWRvdzowIDAgMCA0cHggI2ZmYWYwMH0uZGF0ZWZyb217d2lkdGg6NTAlO2Zsb2F0OmxlZnR9LmRhdGV0b3t3aWR0aDo1MCU7ZmxvYXQ6cmlnaHR9LmdvdnVrLWxhYmVsLS1te2ZvbnQtc2l6ZTpsYXJnZX0uZm9ybS1oaW50e3BhZGRpbmctbGVmdDouN2VtfS5oZWFkZXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTVweH0uYnRuc3VibWl0e21hcmdpbi1ib3R0b206MzBweH0uaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZXBvcnRzRm9ybTogRm9ybUdyb3VwO1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgZW5kRGF0ZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGlzRG93bkxvYWRCdXR0b25kaXNhYmxlZDpCb29sZWFuID0gZmFsc2U7XG4gIGlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGU6IEJvb2xlYW4gPSBmYWxzZTtcbiAgaXNEYXRlUmFuZ2VCZXRuV2VlazogQm9vbGVhbiA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgcGF5bWVudEdyb3VwczogSVBheW1lbnRHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB4bEZpbGVTZXJ2aWNlOiBYbEZpbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSkgeyB9XG4gICBcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZyb21WYWxpZGF0aW9uKCk7XG5cbiAgIH1cblxuICBnZXRUb2RheSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiB9XG5cbiBnZXRTZWxlY3RlZEZyb21EYXRlKCk6IHZvaWQge1xuIHRoaXMudmFsaWRhdGVEYXRlcyh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSk7XG4gfVxuXG4gdmFsaWRhdGVEYXRlcyhyZXBvcnROYW1lKXtcbiAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykudmFsdWUpLFxuICAgIHNlbGVjdGVkRW5kRGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdlbmREYXRlJykudmFsdWUpO1xuICBjb25zdCBpc0RhdGVSYW5nZU1vcmVUaGFuV2VlayA9ICg8YW55Pm5ldyBEYXRlKHNlbGVjdGVkU3RhcnREYXRlKSAtIDxhbnk+bmV3IERhdGUoc2VsZWN0ZWRFbmREYXRlKSkvKDEwMDAgKiAzNjAwICogLTI0KSA+IDc7XG4gIGlmKG5ldyBEYXRlKHNlbGVjdGVkU3RhcnREYXRlKSA+IG5ldyBEYXRlKHNlbGVjdGVkRW5kRGF0ZSkgJiYgc2VsZWN0ZWRFbmREYXRlICE9PSAnJyl7XG4gICAgdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlQmV0bldlZWsgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYocmVwb3J0TmFtZSAmJiByZXBvcnROYW1lID09PSdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICYmIGlzRGF0ZVJhbmdlTW9yZVRoYW5XZWVrICkge1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IHRydWU7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUJldG5XZWVrID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH1cblxuIH1cblxuICBmcm9tVmFsaWRhdGlvbigpIHtcbiAgICB0aGlzLnJlcG9ydHNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RlZHJlcG9ydDogbmV3IEZvcm1Db250cm9sKCcnKSAsXG4gICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2woJycpIFxuICAgIH0pO1xufVxuXG5kb3dubG9hZFJlcG9ydCgpe1xuICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gIGNvbnN0IGRhdGFMb3NzUnB0RGVmYXVsdCA9IFt7bG9zc19yZXNwOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGRhdGVfYmFua2VkOicnLGJnY19iYXRjaDonJyxwYXltZW50X21ldGhvZDonJyxhbW91bnQ6Jyd9XSxcbiAgICB1blByb2Nlc3NlZFJwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxleGNlcHRpb25fcmVmOicnLGNjZF9yZWY6JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscGF5bWVudF9tZXRob2Q6JycsYW1vdW50OicnfV0sXG4gICAgcHJvY2Vzc2VkVW5hbGxvY2F0ZWQgPVt7cmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGFsbG9jYXRpb25fc3RhdHVzOicnLHJlY2VpdmluZ19vZmZpY2U6JycsYWxsb2NhdGlvbl9yZWFzb246JycsY2NkX2V4Y2VwdGlvbl9yZWY6JycsY2NkX2Nhc2VfcmVmOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfbWV0aG9kOicnLGFtb3VudDonJyx1cGRhdGVkX2J5OicnfV0sXG4gICAgc2hvcnRGYWxsc1JwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxzdXJwbHVzX3Nob3J0ZmFsbDonJyxiYWxhbmNlOicnLHBheW1lbnRfYW1vdW50OicnLGNjZF9jYXNlX3JlZmVyZW5jZTonJyxjY2RfZXhjZXB0aW9uX3JlZmVyZW5jZTonJyxwcm9jZXNzZWRfZGF0ZTonJywgcmVhc29uOicnLCBleHBsYW5hdGlvbjonJywgdXNlcl9uYW1lOicnfV0sXG4gICAgc2VsZWN0ZWRSZXBvcnROYW1lID0gdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsXG4gICAgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykudmFsdWUpLFxuICAgIHNlbGVjdGVkRW5kRGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdlbmREYXRlJykudmFsdWUpO1xuXG4gICAgaWYoc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJyB8fCBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICl7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgIGxldCByZXM9IHtkYXRhOiB0aGlzLmFwcGx5RGF0ZUZvcm1hdChyZXN1bHQpfTtcbiAgICAgICAgICBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJyApe1xuICAgICAgICAgICAgcmVzLmRhdGE9IHByb2Nlc3NlZFVuYWxsb2NhdGVkO1xuICAgICAgICAgIH0gZWxzZSBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnU1VSUExVU19BTkRfU0hPUlRGQUxMJyApIHtcbiAgICAgICAgICAgIHJlcy5kYXRhPSBzaG9ydEZhbGxzUnB0RGVmYXVsdDtcbiAgICAgICAgICB9IFxuICAgICAgICAgIGlmKHJlc3VsdFsnZGF0YSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaTwgcmVzWydkYXRhJ10ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9yZWYnXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDAsMTMpO1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfaXRlbSddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMTMsMjEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcImJhbGFuY2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydiYWxhbmNlJ10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bXCJiYWxhbmNlXCJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgT3AgPSByZXNbJ2RhdGEnXVtpXVtcInN1cnBsdXNfc2hvcnRmYWxsXCJdO1xuICAgICAgICAgICAgICBpZihPcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ3N1cnBsdXNfc2hvcnRmYWxsJ10gPSBPcCA9PVwiU3VycGx1c1wiID8gXCJPdmVyIHBheW1lbnRcIjpcIlVuZGVyIHBheW1lbnRcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsncGF5bWVudF9hbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsncGF5bWVudF9hbW91bnQnXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IFxuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy54bEZpbGVTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHJlc1snZGF0YSddLCB0aGlzLmdldEZpbGVOYW1lKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlLCBzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgIGxldCByZXMgPSB7ZGF0YTogdGhpcy5hcHBseURhdGVGb3JtYXQocmVzdWx0KX07XG4gICAgICAgICAgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ0RBVEFfTE9TUycgKXtcbiAgICAgICAgICAgIHJlcy5kYXRhPSBkYXRhTG9zc1JwdERlZmF1bHQ7XG4gICAgICAgICAgfSBlbHNlIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdVTlBST0NFU1NFRCcpe1xuICAgICAgICAgICAgcmVzLmRhdGEgPSB1blByb2Nlc3NlZFJwdERlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3VsdFsnZGF0YSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IoIHZhciBpPTA7IGk8IHJlc1snZGF0YSddLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcImFtb3VudFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydhbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X3JlZiddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMCwxMyk7XG4gICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X2l0ZW0nXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDEzLDIxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy54bEZpbGVTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHJlc1snZGF0YSddLCB0aGlzLmdldEZpbGVOYW1lKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlLCBzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlICkpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldEZpbGVOYW1lKHNlbGVjdGVkT3B0aW9uOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcgKSB7XG4gICAgY29uc3QgbG9jID0gJ2VuLVVTJyxcbiAgICAgIHN0RHQgPSBmb3JtYXREYXRlKHN0YXJ0RGF0ZSwgJ2RkTU15eScsIGxvYyksXG4gICAgICBlbkR0ID0gZm9ybWF0RGF0ZShlbmREYXRlLCAnZGRNTXl5JywgbG9jKSxcbiAgICAgIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICBjdXJyZW50RGF0ZSA9IGZvcm1hdERhdGUobm93LCAnZGRNTXl5JywgbG9jKSxcbiAgICAgIHRpbWVzdGFtcCA9IGAke2N1cnJlbnREYXRlfV8ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldEhvdXJzKCkpfSR7dGhpcy5nZXRUd29kaWdpdChub3cuZ2V0TWludXRlcygpKX0ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldFNlY29uZHMoKSl9YCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uVHh0ID0gdGhpcy5nZXRDYW1lbENhc2VTdHJpbmcoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgXG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25UeHQrJ18nK3N0RHQrJ19Ub18nK2VuRHQrJ19SdW5fJysgdGltZXN0YW1wO1xuICB9IFxuICB0cmFuZm9ybURhdGUoc3RyRGF0ZTogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGlmIChzdHJEYXRlKSB7XG4gICAgICBsZXQgcGFydHMgPSBzdHJEYXRlLnNwbGl0KCctJyk7XG4gICAgICByZXN1bHQgPSBgJHtwYXJ0c1sxXX0vJHtwYXJ0c1syXX0vJHtwYXJ0c1swXX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldFR3b2RpZ2l0KGlucHV0OiBudW1iZXIpe1xuICAgIHJldHVybiAoXCIwXCIgKyBpbnB1dCkuc2xpY2UoLTIpO1xuICB9XG4gIGdldENhbWVsQ2FzZVN0cmluZyhzZWxlY3RlZE9wdGlvbikge1xuICAgIGxldCByZXN1bHQ7XG4gICAgc3dpdGNoKHNlbGVjdGVkT3B0aW9uKSB7IFxuICAgICAgY2FzZSAnVU5QUk9DRVNTRUQnOiB7IFxuICAgICAgICByZXN1bHQgPSAnVW5wcm9jZXNzZWQnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnREFUQV9MT1NTJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ0RhdGFfTG9zcyc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBjYXNlICdQUk9DRVNTRURfVU5BTExPQ0FURUQnOiB7IFxuICAgICAgICByZXN1bHQgPSAnUHJvY2Vzc2VkX1VuYWxsb2NhdGVkJztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGNhc2UgJ1NVUlBMVVNfQU5EX1NIT1JURkFMTCc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdPdmVyIFBheW1lbnRfVW5kZXIgUGF5bWVudCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBkZWZhdWx0OiB7IFxuICAgICAgICByZXN1bHQgPSBzZWxlY3RlZE9wdGlvbjtcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgIH0gXG4gICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGFwcGx5RGF0ZUZvcm1hdChyZXMpIHtcbiAgICBjb25zdCBmbXQgPSAnZGQvTU0veXl5eScsXG4gICAgbG9jID0gJ2VuLVVTJztcbiAgICByZXR1cm4gcmVzWydkYXRhJ10ubWFwKHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZVsnZGF0ZV9iYW5rZWQnXSkge1xuICAgICAgICB2YWx1ZVsnZGF0ZV9iYW5rZWQnXSA9IGZvcm1hdERhdGUodmFsdWVbJ2RhdGVfYmFua2VkJ10sIGZtdCwgbG9jKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuICBcbiAgY29udmVydFRvRmxvYXRWYWx1ZShhbXQpIHtcbiAgICByZXR1cm4gYW10ID8gTnVtYmVyLnBhcnNlRmxvYXQoYW10KS50b0ZpeGVkKDIpOiAnMC4wMCc7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7UGF5bWVudExpc3RDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wYXltZW50LWxpc3QvcGF5bWVudC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1BheW1lbnRWaWV3Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtDYXJkRGV0YWlsc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7UGFnZU5vdEZvdW5kQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZS1ub3QtZm91bmQuY29tcG9uZW50JztcbmltcG9ydCB7UGF5bWVudExpYkNvbXBvbmVudH0gZnJvbSAnLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RhdHVzSGlzdG9yeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGJhRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wYmEtZGV0YWlscy9wYmEtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zb2xlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2hhcmVkL2xvZ2dlci9jb25zb2xlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkNvbXBvbmVudEh0dHBDbGllbnQgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZC9odHRwY2xpZW50L3dlYmNvbXBvbmVudC5odHRwLmNsaWVudCc7XG5pbXBvcnQgeyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGZWVTdW1tYXJ5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZlZS1zdW1tYXJ5L2ZlZS1zdW1tYXJ5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvckJhbm5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lcnJvci1iYW5uZXIvZXJyb3ItYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXJrVW5pZGVudGlmaWVkUGF5bWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50L21hcmstdW5pZGVudGlmaWVkLXBheW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE1hcmtVbnNvbGljaXRlZFBheW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWFyay11bnNvbGljaXRlZC1wYXltZW50L21hcmstdW5zb2xpY2l0ZWQtcGF5bWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91bnByb2Nlc3NlZC1wYXltZW50cy91bnByb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc2VkUGF5bWVudHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvY2Vzc2VkLXBheW1lbnRzL3Byb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxsb2NhdGVQYXltZW50c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkUmVtaXNzaW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDY2RIeXBoZW5zUGlwZSB9IGZyb20gJy4vcGlwZXMvY2NkLWh5cGhlbnMucGlwZSc7XG5pbXBvcnQgeyBrZXlWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2tleS12YWx1ZS5waXBlJztcbmltcG9ydCB7IFNhbml0aXplSHRtbFBpcGUgfSBmcm9tICcuL3BpcGVzL3Nhbml0aXplLWh0bWwucGlwZSc7XG5pbXBvcnQgeyBSZXBvcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlcG9ydHMvcmVwb3J0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWGxGaWxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgUGF5bWVudExpc3RDb21wb25lbnQsXG4gICAgUGF5bWVudFZpZXdDb21wb25lbnQsXG4gICAgQ2FyZERldGFpbHNDb21wb25lbnQsXG4gICAgUGFnZU5vdEZvdW5kQ29tcG9uZW50LFxuICAgIFN0YXR1c0hpc3RvcnlDb21wb25lbnQsXG4gICAgTWFya1VuaWRlbnRpZmllZFBheW1lbnRDb21wb25lbnQsXG4gICAgTWFya1Vuc29saWNpdGVkUGF5bWVudENvbXBvbmVudCxcbiAgICBVbnByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50LFxuICAgIFByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50LFxuICAgIEFsbG9jYXRlUGF5bWVudHNDb21wb25lbnQsXG4gICAgUGJhRGV0YWlsc0NvbXBvbmVudCxcbiAgICBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50LFxuICAgIEZlZVN1bW1hcnlDb21wb25lbnQsXG4gICAgQWRkUmVtaXNzaW9uQ29tcG9uZW50LFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIGtleVZhbHVlUGlwZSxcbiAgICBTYW5pdGl6ZUh0bWxQaXBlLFxuICAgIFJlcG9ydHNDb21wb25lbnQsXG4gICAgRXJyb3JCYW5uZXJDb21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogWyBQYXltZW50TGliQ29tcG9uZW50IF0sXG4gIHByb3ZpZGVyczogWyBcbiAgICB7IHByb3ZpZGU6IExvZ2dlclNlcnZpY2UsIHVzZUNsYXNzOiBDb25zb2xlTG9nZ2VyU2VydmljZSB9LFxuICAgIFhsRmlsZVNlcnZpY2UsXG4gICAgV2ViQ29tcG9uZW50SHR0cENsaWVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudExpYk1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJJbmplY3RhYmxlIiwiQ29tcG9uZW50IiwiSW5wdXQiLCJfdGhyb3ciLCJjYXRjaEVycm9yIiwiSHR0cENsaWVudCIsIkh0dHBIZWFkZXJzIiwiTWV0YSIsIm5vb3AiLCJyb3V0ZXIiLCJscy5nZXQiLCJSb3V0ZXIiLCJCU19FTkFCTEVfRkxBRyIsInRzbGliXzEuX192YWx1ZXMiLCJMb2NhdGlvbiIsIkZvcm1Db250cm9sIiwiVmFsaWRhdG9ycyIsIkZvcm1CdWlsZGVyIiwiRXZlbnRFbWl0dGVyIiwiT3V0cHV0IiwiUGlwZSIsIkRvbVNhbml0aXplciIsIlhMU1gudXRpbHMiLCJYTFNYLndyaXRlIiwiRmlsZVNhdmVyLnNhdmVBcyIsImZvcm1hdERhdGUiLCJOZ01vZHVsZSIsIkNvbW1vbk1vZHVsZSIs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
|
|
4715
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtY2NwYXktd2ViLWNvbXBvbmVudC51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9wYXltZW50LWxpYi5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGF5bWVudC1saWIuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9zZXJ2aWNlcy9wYXltZW50LWxpc3QvcGF5bWVudC1saXN0LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvY2FyZC1kZXRhaWxzL2NhcmQtZGV0YWlscy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BhZ2Utbm90LWZvdW5kLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcGJhLWRldGFpbHMvcGJhLWRldGFpbHMuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2xvZ2dlci9jb25zb2xlLWxvZ2dlci5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC50cyIsbnVsbCwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9QYXltZW50VG9QYXlodWJSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9QYXlodWJBbnRlbm5hUmVxdWVzdC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvZmVlLXN1bW1hcnkvZmVlLXN1bW1hcnkuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9lcnJvci1iYW5uZXIvZXJyb3ItYmFubmVyLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2ludGVyZmFjZXMvVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50L21hcmstdW5pZGVudGlmaWVkLXBheW1lbnQuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9VbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvbWFyay11bnNvbGljaXRlZC1wYXltZW50L21hcmstdW5zb2xpY2l0ZWQtcGF5bWVudC5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3VucHJvY2Vzc2VkLXBheW1lbnRzL3VucHJvY2Vzc2VkLXBheW1lbnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcHJvY2Vzc2VkLXBheW1lbnRzL3Byb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9waXBlcy9jY2QtaHlwaGVucy5waXBlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGlwZXMva2V5LXZhbHVlLnBpcGUudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9waXBlcy9zYW5pdGl6ZS1odG1sLnBpcGUudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9zZXJ2aWNlcy94bC1maWxlL3hsLWZpbGUuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcmVwb3J0cy9yZXBvcnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3BheW1lbnQtbGliLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudExpYlNlcnZpY2Uge1xuICBBUElfUk9PVDogc3RyaW5nO1xuICBCVUxLU0NBTl9BUElfUk9PVDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgc2V0QXBpUm9vdFVybChhcGlSb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLkFQSV9ST09UID0gYXBpUm9vdDtcbiAgfVxuXG4gIGdldEFwaVJvb3RVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5BUElfUk9PVDtcbiAgfVxuXG4gIHNldEJ1bGtTY2FuQXBpUm9vdFVybChidWxrc2NhbmFwaVJvb3Q6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuQlVMS1NDQU5fQVBJX1JPT1QgPSBidWxrc2NhbmFwaVJvb3Q7XG4gIH1cblxuICBnZXRCdWxrU2NhbkFwaVJvb3RVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5CVUxLU0NBTl9BUElfUk9PVDtcbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lCU1BheW1lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC1saWInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxjY3BheS1wYXltZW50LWxpc3QgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3BheW1lbnQtbGlzdCdcIj48L2NjcGF5LXBheW1lbnQtbGlzdD5cbiAgICA8Y2NwYXktcGF5bWVudC12aWV3ICpuZ0lmPVwidmlld05hbWUgPT09ICdwYXltZW50LXZpZXcnXCJcbiAgICBbaXNUdXJuT2ZmXT1cIklTVFVSTk9GRlwiPjwvY2NwYXktcGF5bWVudC12aWV3PlxuICAgIDxjY3BheS1jYXNlLXRyYW5zYWN0aW9ucyAgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2Nhc2UtdHJhbnNhY3Rpb25zJ1wiPjwvY2NwYXktY2FzZS10cmFuc2FjdGlvbnM+XG4gICAgPGFwcC1tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50ICpuZ0lmPVwidmlld05hbWUgPT09ICd1bmlkZW50aWZpZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bmlkZW50aWZpZWQtcGF5bWVudD5cbiAgICA8YXBwLW1hcmstdW5zb2xpY2l0ZWQtcGF5bWVudCAqbmdJZj1cInZpZXdOYW1lID09PSAndW5zb2xpY2l0ZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bnNvbGljaXRlZC1wYXltZW50PlxuICAgIDxhcHAtYWxsb2NhdGUtcGF5bWVudHMgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2FsbG9jYXRlLXBheW1lbnRzJ1wiXG4gICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIlxuICAgIFtjYXNlVHlwZV09XCJDQVNFVFlQRVwiXG4gICAgPjwvYXBwLWFsbG9jYXRlLXBheW1lbnRzPlxuICAgIDxjY3BheS1mZWUtc3VtbWFyeSAqbmdJZj1cInZpZXdOYW1lID09PSAnZmVlLXN1bW1hcnknXCJcbiAgICAgIFtjY2RDYXNlTnVtYmVyXT1cIkNDRF9DQVNFX05VTUJFUlwiXG4gICAgICBbcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cFJlZmVyZW5jZVwiXG4gICAgICBbaXNUdXJuT2ZmXT1cIklTVFVSTk9GRlwiXG4gICAgICBbY2FzZVR5cGVdPVwiQ0FTRVRZUEVcIlxuICAgICAgPjwvY2NwYXktZmVlLXN1bW1hcnk+XG4gICAgPGNjcGF5LXJlcG9ydHMgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3JlcG9ydHMnXCI+PC9jY3BheS1yZXBvcnRzPlxuICAgIGBcbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdBUElfUk9PVCcpIEFQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgnQlVMS1NDQU5fQVBJX1JPT1QnKSBCVUxLU0NBTl9BUElfUk9PVDogc3RyaW5nO1xuICBASW5wdXQoJ0NDRF9DQVNFX05VTUJFUicpIENDRF9DQVNFX05VTUJFUjogc3RyaW5nO1xuICBASW5wdXQoJ0VYQ19SRUZFUkVOQ0UnKSBFWENfUkVGRVJFTkNFOiBzdHJpbmc7XG4gIEBJbnB1dCgnUEFZTUVOVF9NRVRIT0QnKSBQQVlNRU5UX01FVEhPRDogc3RyaW5nO1xuICBASW5wdXQoJ1ZJRVcnKSBWSUVXOiBzdHJpbmc7XG4gIEBJbnB1dCgnUEFZTUVOVF9HUk9VUF9SRUYnKSBQQVlNRU5UX0dST1VQX1JFRj86IHN0cmluZztcbiAgQElucHV0KCdUQUtFUEFZTUVOVCcpIFRBS0VQQVlNRU5UOiBib29sZWFuO1xuICBASW5wdXQoJ0RDTl9OVU1CRVInKSBEQ05fTlVNQkVSOiBzdHJpbmc7XG4gIEBJbnB1dCgnU0VMRUNURURfT1BUSU9OJykgU0VMRUNURURfT1BUSU9OOiBzdHJpbmc7XG4gIEBJbnB1dCgnSVNCU0VOQUJMRScpIElTQlNFTkFCTEU6IEJvb2xlYW47XG4gIEBJbnB1dCgnSVNTRkVOQUJMRScpIElTU0ZFTkFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNUVVJOT0ZGJykgSVNUVVJOT0ZGOiBib29sZWFuO1xuICBASW5wdXQoJ0NBU0VUWVBFJykgQ0FTRVRZUEU6IFN0cmluZztcblxuICBwYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICB1blByb2Nlc3NlZFBheW1lbnRTZXJ2aWNlSWQ6IHN0cmluZyA9IG51bGw7XG4gIHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmc7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgY2FzZVR5cGU6IHN0cmluZztcbiAgdW5Qcm9jZXNzZWRQYXltZW50OiBJQlNQYXltZW50cyA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGF5bWVudExpYlNlcnZpY2Uuc2V0QXBpUm9vdFVybCh0aGlzLkFQSV9ST09UKTtcbiAgICB0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLnNldEJ1bGtTY2FuQXBpUm9vdFVybCh0aGlzLkJVTEtTQ0FOX0FQSV9ST09UKTtcbiAgICBpZiAodGhpcy5QQVlNRU5UX0dST1VQX1JFRikge1xuICAgICAgdGhpcy5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLlBBWU1FTlRfR1JPVVBfUkVGO1xuICAgIH1cbiAgICBpZiAodGhpcy5EQ05fTlVNQkVSKSB7XG4gICAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMuRENOX05VTUJFUjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5WSUVXID09PSAnZmVlLXN1bW1hcnknKSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9IGVsc2UgIGlmICh0aGlzLlZJRVcgIT09ICdyZXBvcnRzJykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSB0aGlzLlZJRVc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBfdGhyb3cgfSBmcm9tICdyeGpzL29ic2VydmFibGUvdGhyb3cnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cblxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cblxuICBoYW5kbGVFcnJvcihlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBBIGNsaWVudC1zaWRlIG9yIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgQW4gZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGlmICghZXJyLmVycm9yKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ05vdCBmb3VuZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVyci5lcnJvci5tZXNzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9ICdTZXJ2ZXIgZXJyb3InO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF90aHJvdyhlcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGlzRXJyb3JFeGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogXCJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZVwiLFxuICAgICAgYm9keTogXCJUcnkgYWdhaW4gbGF0ZXJcIixcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBub29wID0gKCk6IGFueSA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMb2dnZXIge1xuXG4gIGluZm86IGFueTtcbiAgd2FybjogYW55O1xuICBlcnJvcjogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyIHtcblxuICBpbmZvOiBhbnk7XG4gIHdhcm46IGFueTtcbiAgZXJyb3I6IGFueTtcblxuICBpbnZva2VDb25zb2xlTWV0aG9kKHR5cGU6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQge31cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBJUGF5bWVudHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50cyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50TGlzdFNlcnZpY2Uge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG5cbiAgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcihjY2RDYXNlTnVtYmVyOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC1saXN0LXNlcnZpY2UgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlciBmb3I6ICcsIGNjZENhc2VOdW1iZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9L3BheW1lbnRzYCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtQYXltZW50TGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudHMnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJU3RhdHVzSGlzdG9yeX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3RhdHVzSGlzdG9yeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICBQYXltZW50cyBsaXN0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWRcbiAgICAgIDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBwYXltZW50c1wiPlxuXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgZ3JvdXAgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPkRhdGUgY3JlYXRlZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5DaGFubmVsPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPk1ldGhvZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5BbW91bnQ8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJib2xkIGZvbnQteHNtYWxsXCI+U3RhdHVzPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgcGF5bWVudHMucGF5bWVudHNcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRQYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCBwYXltZW50LnBheW1lbnRfcmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlIH19PC9hPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQucGF5bWVudF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgaGg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj57eyBwYXltZW50LmNoYW5uZWwgfCB0aXRsZWNhc2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQubWV0aG9kIHwgdGl0bGVjYXNlIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj7DgsKje3sgcGF5bWVudC5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInBheW1lbnQubWV0aG9kID09PSAnY2FyZCcgJiYgcGF5bWVudC5jaGFubmVsID09PSAnb25saW5lJ1wiPlxuICAgICAgICAgIDxkZXRhaWxzPlxuICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9XCJzdW1tYXJ5IGZvbnQteHNtYWxsXCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3NwYW4+PC9zdW1tYXJ5PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWJvcmRlci1uYXJyb3dcIiAqbmdJZj1cInBheW1lbnQuc3RhdHVzID09PSAnRmFpbGVkJ1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0dXNIaXN0b3J5IG9mIHBheW1lbnQuc3RhdHVzX2hpc3Rvcmllc1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDEwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCByZWplY3RlZCBkdWUgdG8gcGF5bWVudCBtZXRob2Qgc2VsZWN0ZWQgb3IgcGF5bWVudCBpbmZvcm1hdGlvbiBlbnRlcmVkLCBmb3IgZXhhbXBsZSwgZmFpbGVkIGZyYXVkIGNoZWNrLCBhIDNEIFNlY3VyZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCBvciB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIGVub3VnaCBtb25leSBpbiBhY2NvdW50XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDIwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCB3YXMgbm90IGNvbmZpcm1lZCBhbmQgY29tcGxldGVkIHdpdGhpbiA5MCBtaW51dGVzIG9mIGJlaW5nIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXhzbWFsbFwiICpuZ0lmPVwic3RhdHVzSGlzdG9yeS5lcnJvcl9jb2RlID09PSAnUDAwMzAnXCI+XG4gICAgICAgICAgICAgICAgICBVc2VyIGNsaWNrZWQgb24gdGhlIMOiwoDCnENhbmNlbCBwYXltZW50w6LCgMKdIGJ1dHRvbiBkdXJpbmcgdGhlIHBheW1lbnQgam91cm5leVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCIgKm5nSWY9XCJzdGF0dXNIaXN0b3J5LmVycm9yX2NvZGUgPT09ICdQMDA1MCdcIj5cbiAgICAgICAgICAgICAgICAgIE11bHRpcGxlIHBvc3NpYmxlIGNhdXNlcywgZm9yIGV4YW1wbGUgYSBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCB0aGUgcGF5bWVudCBwcm92aWRlciwgb3IgaW5jb3JyZWN0IGxvZ2luIGNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdjYXJkJyAmJiBwYXltZW50LmNoYW5uZWwgPT09ICd0ZWxlcGhvbnknXCIgY2xhc3M9XCJmb250LXhzbWFsbFwiPlxuICAgICAgICAgIHt7IHBheW1lbnQuc3RhdHVzfX1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdwYXltZW50IGJ5IGFjY291bnQnXCI+XG4gICAgICAgICAgPGRldGFpbHM+XG4gICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz1cInN1bW1hcnkgZm9udC14c21hbGxcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvc3Bhbj48L3N1bW1hcnk+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtYm9yZGVyLW5hcnJvd1wiICpuZ0lmPVwicGF5bWVudC5zdGF0dXMgPT09ICdQZW5kaW5nJ1wiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCI+VGhpcyBtZWFucyB0aGUgdHJhbnNhY3Rpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IExpYmVyYXRhLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90YWJsZT5cblxuICA8L2Rpdj5cblxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudExpc3RTZXJ2aWNlOiBQYXltZW50TGlzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXltZW50TGlzdFNlcnZpY2UuZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLCB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUEFZTUVOVF9NRVRIT0QpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50cyA9PiB0aGlzLnBheW1lbnRzID0gcGF5bWVudHMsXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICAgICk7XG4gIH1cblxuICBsb2FkUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50UmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYkNvbXBvbmVudEh0dHBDbGllbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtZXRhOiBNZXRhXG4gICkgeyB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCBvcHRzKTtcbiAgfVxuXG4gIHB1dCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nLCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5hZGRIZWFkZXJzKG9wdGlvbnMgfHwge30pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgb3B0cyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodXJsLCBvcHRzKTtcbiAgfVxuICBcbiAgcGF0Y2godXJsOiBzdHJpbmcsIGJvZHk6IGFueSB8IG51bGwsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgYWRkSGVhZGVycyhvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNzcmZUb2tlbiA9IHRoaXMubWV0YS5nZXRUYWcoJ25hbWU9Y3NyZi10b2tlbicpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaGVhZGVyc1tlbGVtZW50XSA9IG9wdGlvbnMuaGVhZGVycy5nZXQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaGVhZGVyc1snWC1SZXF1ZXN0ZWQtV2l0aCddID0gJ1hNTEh0dHBSZXF1ZXN0JztcbiAgICBoZWFkZXJzWydDU1JGLVRva2VuJ10gPSBjc3JmVG9rZW4uY29udGVudDtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoaGVhZGVycyk7XG4gICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRIdHRwQ2xpZW50IH0gZnJvbSAnLi4vc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50JztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5aHViQW50ZW5uYVJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheWh1YkFudGVubmFSZXF1ZXN0JztcbmltcG9ydCB7IFVuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IFVuc29saWNpdGVkUGF5bWVudHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9VbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCc7XG5pbXBvcnQgeyBNZXRhIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7IElBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudFZpZXdTZXJ2aWNlIHtcblxuICBwcml2YXRlIG1ldGE6IE1ldGE7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGh0dHBzOiBXZWJDb21wb25lbnRIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZSkgeyB9XG5cbiAgZ2V0UGF5bWVudERldGFpbHMocGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElQYXltZW50PiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC12aWV3LXNlcnZpY2UgZ2V0UGF5bWVudERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50PihwYXltZW50TWV0aG9kID09PSAnY2FyZCcgfHwgcGF5bWVudE1ldGhvZCA9PT0gJ2Nhc2gnIHx8IHBheW1lbnRNZXRob2QgPT09ICdjaGVxdWUnIHx8IHBheW1lbnRNZXRob2QgPT09ICdwb3N0YWwgb3JkZXInID9cbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXJkLXBheW1lbnRzLyR7cGF5bWVudFJlZmVyZW5jZX1gIDpcbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jcmVkaXQtYWNjb3VudC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9YCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwRGV0YWlscyhwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRHcm91cD4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cERldGFpbHMgZm9yOiAnLCBwYXltZW50R3JvdXBSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnQ+KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudEdyb3VwUmVmZXJlbmNlfWAsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG4gIGdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRHcm91cD4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50PihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9mZWUtcGF5LWFwcG9ydGlvbi8ke3BheW1lbnRSZWZlcmVuY2V9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbiAgcG9zdEJTUGF5bWVudHMoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9idWxrLXNjYW4tcGF5bWVudHNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwb3N0QlNVbmlkZW50aWZpZWRQYXltZW50cyhib2R5OiBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1hbGxvY2F0aW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU1Vuc29saWNpdGVkUGF5bWVudHMoYm9keTogVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1hbGxvY2F0aW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU0FsbG9jYXRpb25QYXltZW50cyhib2R5OiBJQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWFsbG9jYXRpb25zYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cblxuICBwb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIGZlZUlkOiBudW1iZXIsIGJvZHk6IEFkZFJlbWlzc2lvblJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZlcmVuY2V9L2ZlZXMvJHtmZWVJZH0vcmVtaXNzaW9uc2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIGRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1BheW1lbnQtdmlldy1zZXJ2aWNlIGRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAgZm9yOiAnLCBmZWVJZCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZGVsZXRlKGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2ZlZXMvJHtmZWVJZH1gKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwb3N0UGF5bWVudFRvUGF5SHViKGJvZHk6IFBheW1lbnRUb1BheWh1YlJlcXVlc3QsIHBheW1lbnRHcm91cFJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudEdyb3VwUmVmfS9jYXJkLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cblxuICBwb3N0UGF5bWVudEFudGVubmFUb1BheUh1Yihib2R5OiBQYXlodWJBbnRlbm5hUmVxdWVzdCwgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZ9L3RlbGVwaG9ueS1jYXJkLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgZG93bmxvYWRTZWxlY3RlZFJlcG9ydChyZXBvcnROYW1lOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOnN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcmVwb3J0L2RhdGE/ZGF0ZV9mcm9tPSR7c3RhcnREYXRlfSZkYXRlX3RvPSR7ZW5kRGF0ZX0mcmVwb3J0X3R5cGU9JHtyZXBvcnROYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZ2V0KHVybCwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkucGlwZSggY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpKTtcbiAgfVxuICBnZXRCU2ZlYXR1cmUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5nZXQoJ2FwaS9wYXltZW50LWhpc3RvcnkvYnVsay1zY2FuLWZlYXR1cmUnLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KS5waXBlKCBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcikpO1xuICB9XG4gIGdldFNpdGVJRCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLmdldCgnYXBpL3BheW1lbnQtaGlzdG9yeS9yZWZkYXRhL2xlZ2FjeS1zaXRlcycsIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pLnBpcGUoIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGF5bWVudFZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYXltZW50LXZpZXcnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJnb3Z1ay13aWR0aC1jb250YWluZXJcIj5cblxuICA8ZGl2IGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICA8b2wgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdFwiPlxuICAgICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiPlxuICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGlua1wiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyIGdvdnVrLSEtcGFkZGluZy10b3AtMFwiIGlkPVwibWFpbi1jb250ZW50XCIgcm9sZT1cIm1haW5cIj5cblxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBQYXltZW50IGRldGFpbHMgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1hbGlnbm1lbnRcIiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgcGF5bWVudEdyb3VwXCI+XG5cbiAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nUEFZTUVOVERFVEFJTFMnPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlIGdvdnVrLSEtbWFyZ2luLXRvcC0wXCI+UGF5bWVudCBkZXRhaWxzPC9oMT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwiaXNUdXJuT2ZmXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgZ3JvdXAgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQ+w4LCo3t7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50c1swXSAmJiBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkdvdlBheSBUcmFuc2FjdGlvbiBJRDwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5leHRlcm5hbF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgYXNzZXQgbnVtYmVyKERDTik8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmJhbmtlZF9kYXRlIHwgZGF0ZTonZGQgTU1NIHl5eXknIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPkZlZSBhbmQgcmVtaXNzaW9uIGRldGFpbHM8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZD5BcHBsaWNhdGlvbiBmb3Ige3sgZmVlLmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5GZWUgY29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgZmVlLmNvZGUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9ucyAmJiAhaXNUdXJuT2ZmIH1cIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RyLWJvcmRlcic6ICFmZWUuYXBwb3J0aW9uX2Ftb3VudCAmJiAhZmVlLnJlbWlzc2lvbnMgJiYgIWlzVHVybk9mZiB9XCI+w4LCo3t7IGZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5uZXRfYW1vdW50ICYmIGlzVHVybk9mZlwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9uc31cIiA+TmV0IGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLmFwcG9ydGlvbl9hbW91bnQgJiYgIWZlZS5yZW1pc3Npb25zfVwiPsOCwqN7eyBmZWUubmV0X2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5hcHBvcnRpb25fYW1vdW50XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13IHRyLWJvcmRlclwiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPkFsbG9jYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPsOCwqN7eyBmZWUuYXBwb3J0aW9uX2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLnJlbWlzc2lvbnNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tmZWUucmVtaXNzaW9ucy5od2ZfcmVmZXJlbmNlfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLnJlbWlzc2lvbnNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXcgdHItYm9yZGVyXCI+UmVtaXNzaW9uIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ci1ib3JkZXJcIj7DgsKje3sgZmVlLnJlbWlzc2lvbnMuaHdmX2Ftb3VudCB8IG51bWJlcjonLjInfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gY2FyZCBkZXRhaWxzIC0tPlxuICAgICAgPGNjcGF5LWNhcmQtZGV0YWlscyAqbmdJZj1cImlzQ2FyZFBheW1lbnQgJiYgIWlzVGVsZXBob255UGF5bWVudFwiPjwvY2NwYXktY2FyZC1kZXRhaWxzPlxuXG4gICAgICA8IS0tIHBiYSBkZXRhaWxzIC0tPlxuICAgICAgPGNjcGF5LXBiYS1kZXRhaWxzICpuZ0lmPVwiIWlzQ2FyZFBheW1lbnRcIiBbcGF5bWVudF09XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF1cIj48L2NjcGF5LXBiYS1kZXRhaWxzPlxuXG4gICAgICA8IS0tIFN0YXR1cyBoaXN0b3JpZXMgLS0+XG4gICAgICA8Y2NwYXktcGF5bWVudC1zdGF0dXNlcyAqbmdJZj1cImlzU3RhdHVzQWxsb2NhdGVkXCI+PC9jY3BheS1wYXltZW50LXN0YXR1c2VzPlxuXG4gICAgPC9kaXY+XG5cbiAgPC9tYWluPlxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgLnRiLWNvbC13e3dpZHRoOjMzMHB4fS50ci1ib3JkZXJ7Ym9yZGVyLWJvdHRvbToycHggc29saWR9LnBheW1lbnQtdmlldy1hbGlnbm1lbnR7bWFyZ2luLWxlZnQ6MzBweH1gXVxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBkY25OdW1iZXI6IHN0cmluZztcbiAgaXNTdGF0dXNBbGxvY2F0ZWQ6IGJvb2xlYW47XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBsZXQgZmVlcyA9IFtdO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgaWYocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXNcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSwgIFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgXG4gIH1cblxuICBnZXQgaXNDYXJkUGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ubWV0aG9kID09PSAnY2FyZCc7XG4gIH1cblxuICBnZXQgaXNUZWxlcGhvbnlQYXltZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5jaGFubmVsID09PSAndGVsZXBob255JztcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGF5bWVudExpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtbGlzdCc7XG4gIH1cblxuICBnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7SUNhcmREZXRhaWxzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lDYXJkRGV0YWlscyc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZERldGFpbHNTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlKSB7IH1cblxuICBnZXRDYXJkRGV0YWlscyhwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElDYXJkRGV0YWlscz4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ0NhcmQtZGV0YWlsLXNlcnZpY2UgZ2V0Q2FyZERldGFpbHMgZm9yOiAnLCBwYXltZW50UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElDYXJkRGV0YWlscz4oYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FyZC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9L2RldGFpbHNgLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJkRGV0YWlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJkLWRldGFpbHMvY2FyZC1kZXRhaWxzLnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2FyZERldGFpbHN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUNhcmREZXRhaWxzJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXJkLWRldGFpbHMnLFxuICB0ZW1wbGF0ZTogYFxuPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlBheW1lbnQgbWV0aG9kPC9oMj5cbjwvZGl2PlxuXG48ZGl2IHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgUGF5bWVudCBtZXRob2QgdW5hdmFpbGFibGUsIFRoZSBwYXltZW50IGhhcyBlaXRoZXIgZXhwaXJlZCBvciB1bnN1Y2Nlc3NmdWwuXG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgY2FyZERldGFpbHNcIj5cblxuPHRhYmxlPlxuICA8dGJvZHk+XG4gIDx0cj5cbiAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+TWV0aG9kPC90ZD5cbiAgICA8dGQ+Q2FyZDwvdGQ+XG4gIDwvdHI+XG4gIDx0cj5cbiAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+VHlwZTwvdGQ+XG4gICAgPHRkPnt7IGNhcmREZXRhaWxzLmNhcmRfYnJhbmQgfX08L3RkPlxuICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLnRiLWNvbC13e3dpZHRoOjMzMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIENhcmREZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnQ2FyZCBkZXRhaWxzJztcbiAgY2FyZERldGFpbHM6IElDYXJkRGV0YWlscztcbiAgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhcmREZXRhaWxzU2VydmljZTogQ2FyZERldGFpbHNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FyZERldGFpbHNTZXJ2aWNlLmdldENhcmREZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBjYXJkRGV0YWlscyA9PiB0aGlzLmNhcmREZXRhaWxzID0gY2FyZERldGFpbHMsXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yXG4gICAgKTtcbiAgfVxuXG4gIGdldCBnZXRQYXltZW50UmVmZXJlbmNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudFJlZmVyZW5jZTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6IGBcbiAgICA8aDE+VGhpcyBpcyBub3QgdGhlIHBhZ2UgeW91IHdlcmUgbG9va2luZyBmb3IhPC9oMT5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VOb3RGb3VuZENvbXBvbmVudCB7IH1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRMaWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSVN0YXR1c0hpc3RvcmllcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN0YXR1c0hpc3Rvcmllcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RhdHVzSGlzdG9yeVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIGdldFBheW1lbnRTdGF0dXNlc0J5UmVmZXJlbmNlKHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxJU3RhdHVzSGlzdG9yaWVzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnU3RhdHVzLWhpc3Rvcnktc2VydmljZSBnZXRQYXltZW50U3RhdHVzZXNCeVJlZmVyZW5jZSBmb3I6ICcsIHBheW1lbnRSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVN0YXR1c0hpc3Rvcmllcz4ocGF5bWVudE1ldGhvZCA9PT0gJ2NhcmQnIHx8IHBheW1lbnRNZXRob2QgPT09ICdjYXNoJyB8fCBwYXltZW50TWV0aG9kID09PSAnY2hlcXVlJyB8fCBwYXltZW50TWV0aG9kID09PSAncG9zdGFsIG9yZGVyJyA/XG4gICAgICAgICAgYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FyZC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9L3N0YXR1c2VzYCA6XG4gICAgICAgICAgYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY3JlZGl0LWFjY291bnQtcGF5bWVudHMvJHtwYXltZW50UmVmZXJlbmNlfS9zdGF0dXNlc2AsIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTdGF0dXNIaXN0b3JpZXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTdGF0dXNIaXN0b3JpZXMnO1xuaW1wb3J0IHsgU3RhdHVzSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYXltZW50LXN0YXR1c2VzJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+e3sgcGFnZVRpdGxlIH19PC9oMj5cbjwvZGl2PlxuXG5cbjxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgIFBheW1lbnQgc3RhdHVzIGhpc3RvcnkgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICA8L2gyPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBzdGF0dXNlc1wiPlxuICA8dGFibGU+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICA8dGg+QW1vdW50PC90aD5cbiAgICAgICAgICA8dGg+RGF0ZTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPiBcbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdGF0dXMgb2Ygc3RhdHVzZXMuc3RhdHVzX2hpc3Rvcmllc1wiPlxuICAgICAgICAgIDx0ZD57eyBzdGF0dXMuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICA8dGQ+w4LCo3t7IHN0YXR1c2VzLmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgc3RhdHVzLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IGhoOm1tOnNzJ319PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgU3RhdHVzSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBhZ2VUaXRsZTogc3RyaW5nID0gJ1BheW1lbnQgc3RhdHVzIGhpc3RvcnknO1xuICBzdGF0dXNlczogSVN0YXR1c0hpc3RvcmllcztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0dXNIaXN0b3J5U2VydmljZTogU3RhdHVzSGlzdG9yeVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdGF0dXNIaXN0b3J5U2VydmljZS5nZXRQYXltZW50U3RhdHVzZXNCeVJlZmVyZW5jZSh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSwgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QpLnN1YnNjcmliZShcbiAgICAgIHN0YXR1c2VzID0+IHRoaXMuc3RhdHVzZXMgPSBzdGF0dXNlcyxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICApO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGJhLWRldGFpbHMnLFxuICB0ZW1wbGF0ZTogYFxuICA8aDIgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+UGF5bWVudCBtZXRob2Q8L2gyPlxuICA8dGFibGU+XG4gICAgPHRib2R5PlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5NZXRob2Q8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZVwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgIDwvdHI+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlR5cGU8L3RkPlxuICAgICAgPHRkPkNyZWRpdDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50Lm9yZ2FuaXNhdGlvbl9uYW1lXCI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIGFjY291bnQgbmFtZTwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5vcmdhbmlzYXRpb25fbmFtZSB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50LmFjY291bnRfbnVtYmVyXCI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIG51bWJlcjwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5hY2NvdW50X251bWJlciB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCJwYXltZW50LmN1c3RvbWVyX3JlZmVyZW5jZVwiPlxuICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkN1c3RvbWVyIGludGVybmFsIHJlZmVyZW5jZTwvdGQ+XG4gICAgICA8dGQ+e3sgcGF5bWVudC5jdXN0b21lcl9yZWZlcmVuY2UgfX08L3RkPlxuICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbmAsXG4gIHN0eWxlczogW2AuY2FwaXRhbGl6ZTo6Zmlyc3QtbGV0dGVye3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udGItY29sLXd7d2lkdGg6MzMwcHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgUGJhRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHBheW1lbnQ6IElQYXltZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5cbmV4cG9ydCBsZXQgaXNEZWJ1Z01vZGUgPSBmYWxzZTtcblxuY29uc3Qgbm9vcCA9ICgpOiBhbnkgPT4gdW5kZWZpbmVkO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb25zb2xlTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIExvZ2dlciB7XG5cbiAgZ2V0IGluZm8oKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH1cbiAgfVxuXG4gIGdldCB3YXJuKCkge1xuICAgIGlmIChpc0RlYnVnTW9kZSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gIH1cblxuICBnZXQgZXJyb3IoKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gIH1cblxuICBpbnZva2VDb25zb2xlTWV0aG9kKHR5cGU6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ0ZuOiBGdW5jdGlvbiA9IChjb25zb2xlKVt0eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wO1xuICAgIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIFthcmdzXSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7RXJyb3JIYW5kbGVyU2VydmljZX0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZVxuICAgICAgICAgICAgICApIHsgfVxuXG4gIGdldFBheW1lbnRHcm91cHMoY2NkQ2FzZU51bWJlcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJUGF5bWVudEdyb3VwW10+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdDYXNlLXRyYW5zYWN0aW9ucy1zZXJ2aWNlIGdldFBheW1lbnRHcm91cHMgZm9yOiAnLCBjY2RDYXNlTnVtYmVyKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElQYXltZW50R3JvdXBbXT4oYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vY2FzZXMvJHtjY2RDYXNlTnVtYmVyfS9wYXltZW50Z3JvdXBzYCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFcnJvckhhbmRsZXJTZXJ2aWNlfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkNvbXBvbmVudEh0dHBDbGllbnQgfSBmcm9tICcuLi9zaGFyZWQvaHR0cGNsaWVudC93ZWJjb21wb25lbnQuaHR0cC5jbGllbnQnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGh0dHBzOiBXZWJDb21wb25lbnRIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlXG4gICAgICAgICAgICAgICkgeyB9XG5cbiAgZ2V0QlNQYXltZW50c0J5Q0NEKGNjZENhc2VOdW1iZXI6IHN0cmluZyk6IE9ic2VydmFibGU8SUJTUGF5bWVudHM+IHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElCU1BheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbiAgZ2V0QlNQYXltZW50c0J5RENOKGRjbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJQlNQYXltZW50cz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElCU1BheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9jYXNlcz9kb2N1bWVudF9jb250cm9sX251bWJlcj0ke2Rjbn1gLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuICBwb3N0QlNBbGxvY2F0ZVBheW1lbnQoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCwgcGF5bWVudFJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudFJlZn0vYnVsay1zY2FuLXBheW1lbnRzYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcG9zdEJTUGF5bWVudFN0cmF0ZWdpYyhib2R5OiBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0LCBwYXltZW50R3JvdXBSZWY6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy8ke3BheW1lbnRHcm91cFJlZn0vYnVsay1zY2FuLXBheW1lbnRzLXN0cmF0ZWdpY2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU1dvUEdTdHJhdGVnaWMoYm9keTogQWxsb2NhdGVQYXltZW50UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy9idWxrLXNjYW4tcGF5bWVudHMtc3RyYXRlZ2ljYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcGF0Y2hCU0NoYW5nZVN0YXR1cyhkY25OdW1iZXI6IHN0cmluZywgc3RhdHVzOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBhdGNoKGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2J1bGstc2Nhbi1wYXltZW50cy8ke2Rjbk51bWJlcn0vc3RhdHVzLyR7c3RhdHVzfWAsIHN0YXR1cykucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICBsZXQgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDA7XG5cbiAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICB9KTtcbiAgICB9ICAgXG4gICAgcmV0dXJuIChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgfVxuXG4gIHJlbW92ZVVud2FudGVkU3RyaW5nKGlucHV0OiBzdHJpbmcsIHJlcGxhY2VUZXh0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gL1tcXF9dL2dpO1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VUZXh0KTtcbiAgfVxuXG4gIGRvd25sb2FkU2VsZWN0ZWRSZXBvcnQocmVwb3J0TmFtZTogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTpzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLmdldChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkJVTEtTQ0FOX0FQSV9ST09UfS9yZXBvcnQvZGF0YT9kYXRlX2Zyb209JHtzdGFydERhdGV9JmRhdGVfdG89JHtlbmREYXRlfSZyZXBvcnRfdHlwZT0ke3JlcG9ydE5hbWV9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG59XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtDYXNlVHJhbnNhY3Rpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtJRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtJUGF5bWVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQge0lSZW1pc3Npb259IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIGxzIGZyb20gXCJsb2NhbC1zdG9yYWdlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWNhc2UtdHJhbnNhY3Rpb25zJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZ292dWstd2lkdGgtY29udGFpbmVyXCI+XG5cbiAgPG1haW4gY2xhc3M9XCJnb3Z1ay1tYWluLXdyYXBwZXJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4nJiYgIWlzVHVybk9mZiAmJiB0YWtlUGF5bWVudFwiPlxuXG5cbiAgICA8ZGl2ICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5DYXNlIHRyYW5zYWN0aW9uczwvaDE+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgICAqbmdJZj1cInRha2VQYXltZW50XCIgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiAqbmdJZj0nIWlzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHMgZ292dWstIS1wYWRkaW5nLWJvdHRvbS02IGdvdnVrLSEtcGFkZGluZy10b3AtNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkNDRCByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9J2lzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHMgZ292dWstIS1wYWRkaW5nLWJvdHRvbS02IGdvdnVrLSEtcGFkZGluZy10b3AtNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkV4Y2VwdGlvbiByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay10YWJsZV9faGVhZGVyLS1jdXN0b21cIiBzY29wZT1cImNvbFwiICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUmVtaXNzaW9ucyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgc3VtbWFyeS10YWJsZS1mb250XCI+e3sgY2xBbW91bnREdWUgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FzZS10cmFuc2FjdGlvbl9fY29sb3Igc3VtbWFyeS10YWJsZS1mb250XCIgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCI+e3t1bnByb2Nlc3NlZFJlY29yZENvdW50fX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCIgKm5nSWY9XCJ0YWtlUGF5bWVudFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FkZEZlZUJ0bkVuYWJsZWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT0nIWlzQWRkRmVlQnRuRW5hYmxlZCA/IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLWJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICBUYWtlIHRlbGVwaG9ueSBwYXltZW50XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuXG4gICAgICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICAgICAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIlxuICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0FueUZlZUdyb3VwQXZpbGFibGVcIlxuICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgW1BBWU1FTlRSRUZdPVwicGF5bWVudFJlZlwiXG4gICAgICAoZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCkgPSBcImdldFVucHJvY2Vzc2VkRmVlQ291bnQoJGV2ZW50KVwiXG4gICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICAgIDwvY2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgICpuZ0lmPVwidGFrZVBheW1lbnRcIiBjbGFzcz1cIiBnb3Z1ay0hLW1hcmdpbi10b3AtOVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+RmVlczwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Db2RlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2FsY3VsYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWN0aW9uPC90ZD5cblxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0Zvcj1cImxldCBwYXltZW50R3JvdXAgb2YgcGF5bWVudEdyb3VwcztcIj5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXM7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5cdHt7ZmVlLmNvZGV9fSA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tmZWUuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e2ZlZS52b2x1bWU/IGZlZS52b2x1bWUgOiAnLSd9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiICBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwicGF5bWVudEdyb3VwLm9sZCAmJiBpPT0wXCI+IHt7Z2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319KiA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgKm5nSWY9XCIhcGF5bWVudEdyb3VwLm9sZFwiPiB7e2NhbGN1bGF0ZUFtb3VudER1ZShmZWUpIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fSA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgKm5nSWY9XCIhcGF5bWVudEdyb3VwLm9sZFwiPlxuICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjb25maXJtUmVtb3ZlRmVlKGZlZS5pZClcIiBbbmdDbGFzc109JyFpc0NoZWNrQW1vdW50ZHVlRXhpc3QoZmVlLmFtb3VudF9kdWUpIHx8IGZlZS5yZW1pc3Npb25zID8gXCJkaXNhYmxlLWxpbmtcIiA6IFwiXCInPlJlbW92ZTwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgKm5nSWY9XCJwYXltZW50R3JvdXAub2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY29uZmlybVJlbW92ZUZlZShmZWUuaWQpXCIgW25nQ2xhc3NdPSdwYXltZW50R3JvdXAucGF5bWVudHM/Lmxlbmd0aCA+IDAgfHwgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnM/Lmxlbmd0aCA+IDAgPyBcImRpc2FibGUtbGlua1wiIDogXCJcIic+UmVtb3ZlPC9hPlxuICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3Vwcz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiA+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiN1wiPk5vIGZlZXMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImhtY3RzLWJhbm5lclwiICpuZ0lmPVwiaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlXCI+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJobWN0cy1iYW5uZXJfX2ljb25cIiBmaWxsPVwiY3VycmVudENvbG9yXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIGZvY3VzYWJsZT1cImZhbHNlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjUgMjVcIiBoZWlnaHQ9XCIyNVwiIHdpZHRoPVwiMjVcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuNywxOC41aC0yLjR2LTIuNGgyLjRWMTguNXogTTEyLjUsMTMuN2MtMC43LDAtMS4yLTAuNS0xLjItMS4yVjcuN2MwLTAuNywwLjUtMS4yLDEuMi0xLjJzMS4yLDAuNSwxLjIsMS4ydjQuOFxuICAgICAgICAgIEMxMy43LDEzLjIsMTMuMiwxMy43LDEyLjUsMTMuN3ogTTEyLjUsMC41Yy02LjYsMC0xMiw1LjQtMTIsMTJzNS40LDEyLDEyLDEyczEyLTUuNCwxMi0xMlMxOS4xLDAuNSwxMi41LDAuNXpcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtYmFubmVyX19tZXNzYWdlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJobWN0cy1iYW5uZXJfX2Fzc2lzdGl2ZVwiPmluZm9ybWF0aW9uPC9zcGFuPlxuICAgICAgICAgICogVGhlc2UgZmVlcyBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgb2ZmbGluZS4gQ2hlY2sgdGhlIG5vdGVzIGluIENDRCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1uby0tc3R5bGVcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPiAwIHx8IHJlbWlzc2lvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8IS0tIHBheW1lbnRzIC0tPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UGF5bWVudHM8L2gzPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI4XCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNoYW5uZWw8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xNVwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IHN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudC5yZWZlcmVuY2UsIHBheW1lbnQubWV0aG9kKVwiPnt7IHBheW1lbnQucmVmZXJlbmNlIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNoYW5uZWwgZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5jaGFubmVsIHwgbG93ZXJjYXNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FwaXRhbGl6ZSB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50Lm1ldGhvZCB8IGxvd2VyY2FzZX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e2dldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudCl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiN1wiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgICAgIDwhLS0gcmVtaXNzaW9ucyAtLT5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UmVtaXNzaW9uczwvaDM+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBjb2RlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGNvZGU8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZW1pc3Npb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCByZW1pc3Npb24gb2YgcmVtaXNzaW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5mZWVfY29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicmVtaXNzaW9ucz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNVwiPk5vIHJlbWlzc2lvbnMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4gICAgPGRpdiAgKm5nSWY9XCJ0YWtlUGF5bWVudCAmJiBpc1R1cm5PZmZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5DYXNlIHRyYW5zYWN0aW9uczwvaDE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1vbmUtdGhpcmRcIiBhbGlnbj1cInJpZ2h0XCIgPlxuICAgICAgICA8YSBbbmdDbGFzc109XCJ7ICdkaXNhYmxlJzogIWlzQWRkRmVlQnRuRW5hYmxlZH0gXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIiBjbGFzcz1cImJ1dHRvblwiPkFkZCBhIG5ldyBmZWU8L2E+XG4gICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNlwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkNDRCByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgPHNwYW4+IHt7IGNjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgdG90YWxQYXltZW50cyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyB0b3RhbFJlbWlzc2lvbnMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgKHRvdGFsRmVlcyAtIHRvdGFsUmVtaXNzaW9ucykgLSB0b3RhbFBheW1lbnRzIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBObyBmZWVzIHN0YXJ0IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPkV4aXN0aW5nIGZlZXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkdyb3VwIGFtb3VudCBvdXRzdGFuZGluZzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjZcIj5ObyBmZWVzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE5vIGZlZXMgZW5kIC0tPlxuXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcGF5bWVudEdyb3VwIG9mIHBheW1lbnRHcm91cHNcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstZ3JpZC1jb2x1bW4tZnVsbC0tZ3JcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkdyb3VwIHJlZmVyZW5jZToge3twYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2V9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG5cbiAgICAgICAgPCEtLU5ldyBDb2RlIHN0YXJ0LS0+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctc21hbGxcIj5FeGlzaXRpbmcgZmVlczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9ZmVlY2xhc3M+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Db2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNhbGN1bGF0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyb3VwYW1vdW50IGdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkdyb3VwIGFtb3VudCBvdXRzdGFuZGluZzwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgIGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMVwiPnt7ZmVlLmNvZGV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMlwiPiB7e2ZlZS5kZXNjcmlwdGlvbn19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMyBhbGlnbi1jZW50ZXJcIj4ge3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w0XCI+IHt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w1XCI+IHt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w2IGdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDZcIiBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwiaT09MFwiPlxuICAgICAgICAgICAgICB7e2dldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGg9PTBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1pbnNldC10ZXh0IGdvdnVrLWluc2V0LXRleHRfX25vLWJvcmRlclwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnBheW1lbnRzIHx8IHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICA8ZGV0YWlscz5cbiAgICAgICAgPHN1bW1hcnkgY2xhc3M9XCJnb3Z1ay1oaWRldGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnlcIj5BbGxvY2F0ZWQgcGF5bWVudHMgYW5kIHJlbWlzc2lvbnM8L3NwYW4+XG4gICAgICAgIDwvc3VtbWFyeT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1ib3JkZXItbmFycm93XCI+XG4gICAgICAgICAgICAgIDwhLS0gcGF5bWVudHMgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5QYXltZW50czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNoYW5uZWw8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbGxvY2F0aW9uIHN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIHBheW1lbnRHcm91cC5wYXltZW50c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHBheW1lbnQucmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnJlZmVyZW5jZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGFubmVsIGdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuY2hhbm5lbCB8IGxvd2VyY2FzZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjYXBpdGFsaXplIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5hbW91bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5SZW1pc3Npb25zPC9zcGFuPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYXBwbGllZCBhZ2FpbnN0PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgcmVtaXNzaW9uIG9mIHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5mZWVfY29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX2Ftb3VudCB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnJlbWlzc2lvbnM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+Tm8gcmVtaXNzaW9ucyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuXG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRha2VQYXltZW50XCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwibG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSA8PSAwIHx8IGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109JyhnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCkgPD0gMCB8fCBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQpID8gXCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInPlxuICAgICAgICAgICAgICAgIEFkZCB0ZWxlcGhvbmUgcGF5bWVudFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICAgICAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIlxuICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0ZlZVJlY29yZHNFeGlzdFwiXG4gICAgICBbSVNfT1NfQU1UX0FWQUlMQUJMRV09XCJpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmVcIlxuICAgICAgKHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCkgPSBcInNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCgkZXZlbnQpXCI+XG4gICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHNcIiAgKm5nSWY9XCJ0b3RhbFJlZnVuZEFtb3VudCA+IDAgJiYgdGFrZVBheW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHMtY29sMVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlN1cnBsdXMgcGF5bWVudHM8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICBUb3RhbCBzdXJwbHVzIHBheW1lbnRzIHJlY2VpdmVkOiB7e3RvdGFsUmVmdW5kQW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZSAmJiAhdGFrZVBheW1lbnRcIlxuICBbSVNfQlVUVE9OX0VOQUJMRV09XCJ0YWtlUGF5bWVudFwiXG4gIFtJU1RVUk5PRkZdPVwiaXNUdXJuT2ZmXCJcbiAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICBbRkVFX1JFQ09SRFNfRVhJU1RTXT1cImlzRmVlUmVjb3Jkc0V4aXN0XCJcbiAgW0lTX09TX0FNVF9BVkFJTEFCTEVdPVwiaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlXCJcbiAgKHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCkgPSBcInNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCgkZXZlbnQpXCI+XG48L2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cz5cblxuPGRpdiAqbmdJZj1cIiF0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3cgZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UHJvY2Vzc2VkIHBheW1lbnRzPC9zcGFuPlxuICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EYXRlIGNyZWF0ZWQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSB1cGRhdGVkPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNoYW5uZWw8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbGxvY2F0aW9uIHN0YXR1czwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgYWxsUGF5bWVudHNcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvVG9QYXllbWVudFZpZXcocGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnQucmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnJlZmVyZW5jZSB9fTwvYT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfdXBkYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGFubmVsIGdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuY2hhbm5lbCB8IGxvd2VyY2FzZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjYXBpdGFsaXplIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5hbW91bnQgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuc3RhdHVzIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjhcIj5ObyBwYXltZW50cyByZWNvcmRlZDwvdGQ+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG48L2Rpdj5cbjwvZGl2PlxuXG48aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0ZFRVJFTU9WQUxDT05GSVJNQVRJT05fMic+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2Fzc2lzdGl2ZVwiPldhcm5pbmc8L3NwYW4+XG4gICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmVlP1xuICAgIDwvc3Ryb25nPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncmJcIj5cbiAgICA8Zm9ybSBub3ZhbGlkYXRlPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZhbCgpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZW1vdmVCdG5EaXNhYmxlZFwiXG4gICAgICBbbmdDbGFzc109J2lzUmVtb3ZlQnRuRGlzYWJsZWQgPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIidcbiAgICAgIChjbGljayk9XCJyZW1vdmVGZWUoZmVlSWQpXCI+XG4gICAgICAgIFJlbW92ZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuICA8L21haW4+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AuZ292dWstZ3JpZC1jb2x1bW4tZnVsbC0tZ3J7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpncmV5O3BvaW50ZXItZXZlbnRzOm5vbmV9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHN7bWFyZ2luOjIwcHggMH0uZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cz4uZ292dWstZ3JpZC1jb2x1bW4tZnVsbHtwYWRkaW5nOjB9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHMtY29sMXttYXJnaW4tYm90dG9tOjEwcHh9LmdvdnVrLWluc2V0LXRleHRfX25vLWJvcmRlcntib3JkZXItbGVmdDowfS5nb3Z1ay1oaWRldGV4dHtmb250LXNpemU6MjJweDtwYWRkaW5nLWJvdHRvbToxMHB4fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jaGFubmVsOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5nb3Z1ay1oZWFkaW5nLXhse2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MXB4fS5nb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDB9LnRvdGFscGF5bWVudHMuZ292dWstdGFibGVfX3Jvd3tib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDAwIWltcG9ydGFudH0uZ292dWstaW5zZXQtdGV4dHttYXJnaW4tbGVmdDoxZW19LmdvdnVrLWJ1dHRvbntmb250LXNpemU6MTlweH0uZ292dWstdGFibGVfX2NlbGwuZ292dWstdGFibGVfX2NlbGwtLWNvbDYuZ292dWstdGFibGVfX2N1c3RvbS0tY29sNiwuZ3JvdXBhbW91bnQuZ292dWstdGFibGVfX2hlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0fS5mZWVjbGFzc3twYWRkaW5nLWxlZnQ6LjdlbX0uYWxpZ24tY2VudGVye3RleHQtYWxpZ246Y2VudGVyfWRldGFpbHMgc3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX0uY2FzZS10cmFuc2FjdGlvbl9fY29sb3J7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGl0YWxpemU6OmZpcnN0LWxldHRlcnt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmdvdnVrLWluc2V0LXRleHRfX25vLWxlZnQtbWFyZ2lue21hcmdpbi1sZWZ0OjA7cGFkZGluZy1sZWZ0OjB9LndoaXRlc3BhY2UtaW5oZXJpdHt3aGl0ZS1zcGFjZTppbmhlcml0IWltcG9ydGFudH0uZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFre21hcmdpbjoxMHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDAhaW1wb3J0YW50fS5leGlzaXRuZy1mZWVze21hcmdpbi1sZWZ0OjEycHh9LmFkZC10ZWxlcGhvbnktcGF5bWVudHttYXJnaW4tdG9wOi0yZW07bWFyZ2luLWxlZnQ6LTJlbX0uZ292dWstdGFibGVfX2hlYWRlci0tY3VzdG9te3RleHQtYWxpZ246Y2VudGVyfS5kaXNhYmxlLWxpbmt7Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjojOGU4YzhjfS5wYW5lbC1uby0tc3R5bGV7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZX0uY29sLTI4e3dpZHRoOjI4JX0uY29sLTE1e3dpZHRoOjE1JX0uaG1jdHMtYmFubmVyPi5obWN0cy1iYW5uZXJfX21lc3NhZ2V7Zm9udC1zaXplOjE5cHg7bGluZS1oZWlnaHQ6MS4yNX0uc3VtbWFyeS10YWJsZS1mb250e2ZvbnQtc2l6ZTozNnB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIENhc2VUcmFuc2FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0YWtlUGF5bWVudDogYm9vbGVhbjtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBleGNSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwczogYW55W10gPSBbXTtcbiAgcGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgbm9uUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgYWxsUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIGZlZXM6IElGZWVbXSA9IFtdO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdG90YWxGZWVzOiBudW1iZXI7XG4gIHRvdGFsUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxOb25PZmZQYXltZW50czogbnVtYmVyO1xuICB0b3RhbFJlbWlzc2lvbnM6IG51bWJlcjtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZztcbiAgZGNuTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnRSZWY6IHN0cmluZztcbiAgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgaXNBZGRGZWVCdG5FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFeGNlcHRpb25SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGV4Y2VwdGlvblJlY29yZFJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0FueUZlZUdyb3VwQXZpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0hpc3RvcmljR3JvdXBBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNCdWxrU2NhbkVuYWJsZTtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGlzUmVtb3ZlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmVlSWQ6SUZlZTtcbiAgY2xBbW91bnREdWU6IG51bWJlciA9IDA7XG4gIHVucHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcjtcbiAgaXNGZWVSZWNvcmRzRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHRvdGFsUmVmdW5kQW1vdW50OiBOdW1iZXI7XG4gIGNhc2VUeXBlOiBTdHJpbmc7XG4gIGxzQ2NkTnVtYmVyOiBhbnkgPSBscy5nZXQ8YW55PignY2NkTnVtYmVyJyk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuY2FzZVR5cGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0FTRVRZUEU7XG4gICAgaWYodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9PT0gJycpIHtcbiAgICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIH1cbiAgICB0aGlzLmV4Y1JlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIHRoaXMudGFrZVBheW1lbnQgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQ7XG4gICAgdGhpcy5pc0J1bGtTY2FuRW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEU7XG4gICAgdGhpcy5kY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRENOX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICBpZih0aGlzLmxzQ2NkTnVtYmVyICE9PSB0aGlzLmNjZENhc2VOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NjZC1zZWFyY2g/dGFrZVBheW1lbnQ9dHJ1ZWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ107XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzID0gcGF5bWVudEdyb3Vwc1sncGF5bWVudF9ncm91cHMnXTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3I7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk7XG4gIH1cblxuICBzZXREZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gMC4wMDtcbiAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxGZWVzID0gMC4wMDtcbn1cblxuZ2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50czogYW55KXtcblxuICBsZXQgcGF5bWVudEFsbG9jYXRpb24gPSBwYXltZW50cy5wYXltZW50X2FsbG9jYXRpb24sXG4gICAgICBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+MDtcbiAgcmV0dXJuIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID8gcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgOiAnLSc7XG4gIC8vcmV0dXJuIFwiLVwiO1xuXG59XG5cbmNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk6IHZvaWQge1xuICBpZih0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlDQ0QodGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICByZWNvcmREYXRhID0+IHtcbiAgICAgICBpZihyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPiAwICYmIHJlY29yZERhdGFbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlID4wKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+MCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnZGNuJykge1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPiAwKVxuICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuICBjYWxjdWxhdGVBbW91bnRzKCk6IHZvaWQge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSAwLjAwO1xuXG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgICAgIGlmKCF0aGlzLmlzVHVybk9mZil7XG4gICAgICAgICAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGxldCBhID0gZmVlLmFtb3VudF9kdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgbGV0IGIgPSBmZWUuYW1vdW50X2R1ZSA8PSAwO1xuICAgICAgICAgICAgICB0aGlzLmNsQW1vdW50RHVlID0gYSA/IHRoaXMuY2xBbW91bnREdWUgKyBmZWUubmV0X2Ftb3VudCA6IGIgPyB0aGlzLmNsQW1vdW50RHVlICsgMCA6IHRoaXMuY2xBbW91bnREdWUgKyBmZWUuYW1vdW50X2R1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlZVsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXSA9IHBheW1lbnRHcm91cFsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXTtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnRvdGFsRmVlcyA9IGZlZXNUb3RhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgICAgIGlmKCF0aGlzLmlzVHVybk9mZil7XG4gICAgICAgICAgICBsZXQgYWxsb2NhdGlvbkxlbiA9IHBheW1lbnQucGF5bWVudF9hbGxvY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIGlmKGFsbG9jYXRpb25MZW4ubGVuZ3RoID09PSAwIHx8IGFsbG9jYXRpb25MZW4ubGVuZ3RoID4gMCAmJiBhbGxvY2F0aW9uTGVuWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSdBbGxvY2F0ZWQnKSB7XG4gICAgICAgICAgICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSBub25PZmZMaW5lUGF5bWVudCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub25QYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVxuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxQYXltZW50cyA9IHBheW1lbnRzVG90YWw7XG4gICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSBub25PZmZMaW5lUGF5bWVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNpc29uID0+IHtcbiAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc2lzb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnJlbWlzc2lvbnMucHVzaChyZW1pc2lzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gcmVtaXNzaW9uc1RvdGFsO1xuICAgIH0pO1xuXG4gIH1cbiAgY2FsY3VsYXRlUmVmdW5kQW1vdW50KCkge1xuICAgIGlmKCF0aGlzLmlzVHVybk9mZil7XG4gICAgICAgIGxldCBpc05ld1BheW1lbnRHcm91cCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKChwYXltZW50R3JvdXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgICBmZWVzID0gW107XG5cbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuXG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmKHJlbS5mZWVfY29kZSA9PT0gZmVlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaXNOZXdQYXltZW50R3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGF5bWVudEdyb3Vwc1tpbmRleF1bJ29sZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHNbaW5kZXhdLmZlZXMgPSBmZWVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICAgICAgaWYoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwICYmIGlzTmV3UGF5bWVudEdyb3VwKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50UmVmID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYocGF5bWVudEdyb3VwLmZlZXMgJiYgcGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMCAmJiBncnBPdXRzdGFuZGluZ0Ftb3VudCA8PSAwICYmIGlzTmV3UGF5bWVudEdyb3VwKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZigoIWlzTmV3UGF5bWVudEdyb3VwICYmIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSB8fCAoIWlzTmV3UGF5bWVudEdyb3VwICYmICF0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSkpIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdG90YWxSZWZ1bmRBbW91bnQgPSAwLFxuICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgICAgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMDtcbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGZWVSZWNvcmRzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICAgIGlmKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlzRmVlQW1vdW50WmVybyA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICAgICAgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50IDwgMCkge1xuICAgICAgICAgICAgICBpZih0b3RhbFJlZnVuZEFtb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gZ3JwT3V0c3RhbmRpbmdBbW91bnQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG90YWxSZWZ1bmRBbW91bnQgPSAodG90YWxSZWZ1bmRBbW91bnQgKyBncnBPdXRzdGFuZGluZ0Ftb3VudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwIHx8IChncnBPdXRzdGFuZGluZ0Ftb3VudCA9PT0gMCAmJiBpc0ZlZUFtb3VudFplcm8pKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3RhbFJlZnVuZEFtb3VudCAqIC0xO1xuICAgICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTs7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZighdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgfHwgdGhpcy5pc1R1cm5PZmYpIHtcbiAgICBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgIHVybCArPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgIHVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgICB1cmwgKz1gJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRSZWY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cbiAgbG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24gPSBudWxsO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gIH1cblxuICBnb1RvUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwOiBhbnkpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCA9IHBheW1lbnRHcm91cC5wYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gIH1cblxuICBnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KHtwYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnRSZWZlcmVuY2UsIHBheW1lbnRNZXRob2R9KTtcbiAgfVxuXG4gIHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCh1bnByb2Nlc3NlZFJlY29yZElkOiBzdHJpbmcpIHtcbiAgICBpZiAoIHVucHJvY2Vzc2VkUmVjb3JkSWQgKSB7XG4gICAgICBpZih0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXRVbnByb2Nlc3NlZEZlZUNvdW50KHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcikge1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRDb3VudCA9IHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnREdWUoZmVlOiBJRmVlKSB7XG5cbiAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFtb3VudF9kdWUgIT09IHVuZGVmaW5lZD8gZmVlLmFtb3VudF9kdWUgOiBmZWUubmV0X2Ftb3VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiMC4wMFwiO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmVGZWUoZmVlOiBJRmVlKXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuICBjYW5jZWxSZW1vdmFsKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuICByZW1vdmVGZWUoZmVlOiBhbnkpe1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWUpLnN1YnNjcmliZShcbiAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYXltZW50VG9QYXlodWJSZXF1ZXN0IHtcbiAgY3VycmVuY3kgPSAnR0JQJztcbiAgZGVzY3JpcHRpb24gPSAnUGF5QnViYmxlIHBheW1lbnQnO1xuICBjaGFubmVsID0gJ3RlbGVwaG9ueSc7XG4gIHByb3ZpZGVyID0gJ3BjaSBwYWwnO1xuICBjYXNlX3R5cGU6IHN0cmluZztcblxuICBjY2RfY2FzZV9udW1iZXI6IHN0cmluZztcbiAgYW1vdW50OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY2NkX2Nhc2VfbnVtYmVyOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBjYXNlVHlwZTogc3RyaW5nKSB7XG4gIHRoaXMuY2NkX2Nhc2VfbnVtYmVyID0gY2NkX2Nhc2VfbnVtYmVyO1xuICB0aGlzLmFtb3VudCA9IDxhbnk+YW1vdW50LnRvRml4ZWQoMik7XG4gIHRoaXMuY2FzZV90eXBlPSBjYXNlVHlwZTtcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFBheWh1YkFudGVubmFSZXF1ZXN0IHtcbiAgY3VycmVuY3kgPSAnR0JQJztcbiAgY2FzZV90eXBlOiBzdHJpbmc7XG4gIGNjZF9jYXNlX251bWJlcjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihjY2RfY2FzZV9udW1iZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGNhc2VUeXBlOiBzdHJpbmcpIHtcbiAgdGhpcy5jY2RfY2FzZV9udW1iZXIgPSBjY2RfY2FzZV9udW1iZXI7XG4gIHRoaXMuYW1vdW50ID0gPGFueT5hbW91bnQudG9GaXhlZCgyKTtcbiAgdGhpcy5jYXNlX3R5cGU9IGNhc2VUeXBlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5aHViQW50ZW5uYVJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheWh1YkFudGVubmFSZXF1ZXN0JztcbmltcG9ydCB7IFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWZlZS1zdW1tYXJ5JyxcbiAgdGVtcGxhdGU6IGBcbjxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiICpuZ0lmPVwiaXNCYWNrQnV0dG9uRW5hYmxlXCI+XG4gIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiICpuZ0lmPVwiIWlzVHVybk9mZlwiPlxuICAgICAgPGEgKGNsaWNrKT1cImxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmsgZ292dWstbGFiZWxcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgPC9vbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZlZS1zdW1tYXJ5XCIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cbiAgICA8bWFpbiBjbGFzcz1cImdvdnVrLW1haW4td3JhcHBlclwiPlxuICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVTVU1NQVJZJz5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIj5cbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmcteGxhcmdlXCI+RmVlIFN1bW1hcnk8L2gxPlxuICAgIDwvZGl2PlxuXG5cbiAgICDDgsKgPGRpdsOCwqBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLW9uZS10aGlyZFwiw4LCoGFsaWduPVwicmlnaHRcIj5cbiAgICAgIMOCwqDDgsKgw4LCoMOCwqDDgsKgw4LCoDxidXR0b27DgsKgICpuZ0lmPVwiIWlzVHVybk9mZlwiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQsJ3N1bW1hcnknKVwiXG4gICAgICDDgsKgw4LCoMOCwqDDgsKgw4LCoMOCwqBbZGlzYWJsZWRdPVwiaXNQYXltZW50RXhpc3RcIlxuICAgICAgw4LCoMOCwqDDgsKgw4LCoMOCwqDDgsKgW25nQ2xhc3NdPSdpc1BheW1lbnRFeGlzdCA/w4LCoFwiYnV0dG9uw4LCoGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiw4LCoDrDgsKgXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICAgICAgQWRkIGEgbmV3IGZlZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxhICpuZ0lmPVwiaXNUdXJuT2ZmXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCIgY2xhc3M9XCJidXR0b25cIj5BZGQgYSBuZXcgZmVlPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICBQYXltZW50IEdyb3VwIGRldGFpbHMgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICAgICAgPC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCIgICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBwYXltZW50R3JvdXBcIj5cbiAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiIHNjb3BlPVwiY29sXCI+RmVlIENvZGU8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiIHNjb3BlPVwiY29sXCI+RmVlIGRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBjb2RlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5mZWVzXCI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuY29kZSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ3JleS10ZXh0XCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdyZXktdGV4dCBzdWJjb2x1bW4tMVwiPkZlZSBhbW91bnQ6PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZmVlLmZlZV9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiICpuZ0lmPVwiIWlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjb25maXJtUmVtb3ZlRmVlKGZlZS5pZClcIiBbbmdDbGFzc109J2lzUGF5bWVudEV4aXN0IHx8IGZlZS5yZW1pc3Npb25zID8gXCJkaXNhYmxlLWxpbmtcIiA6IFwiXCInPnJlbW92ZSBmZWU8L2E+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiICpuZ0lmPVwiaXNUdXJuT2ZmXCI+XG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmVGZWUoZmVlLmlkKVwiPnJlbW92ZSBmZWU8L2E+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0lmPVwiZmVlLnZvbHVtZSAmJiBmZWUudm9sdW1lID4gMFwiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgZ3JleS10ZXh0IHN1YmNvbHVtbi0xXCI+Vm9sdW1lOjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tMlwiPnt7IGZlZS52b2x1bWUgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdyZXktdGV4dCBzdWJjb2x1bW4tMVwiPkZlZSB0b3RhbDo8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBmZWUuY2FsY3VsYXRlZF9hbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdyZXktdGV4dCBzdWJjb2x1bW4tMVwiPlJlbWlzc2lvbiBhbW91bnQ6PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX2Ftb3VudD8gKCBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ICB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInKSA6ICctJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tM1wiICpuZ0lmPVwiIWlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJhZGRSZW1pc3Npb24oZmVlKVwiICpuZ0lmPVwiKGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgPT09IDAgfHwgIWdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQpICYmICFpc1BheW1lbnRFeGlzdFwiPlxuICAgICAgICAgICAgICAgICAgRGVkdWN0IHJlbWlzc2lvblxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiYWRkUmVtaXNzaW9uKGZlZSlcIiAqbmdJZj1cImdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgPT09IDAgfHwgIWdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnRcIj5cbiAgICAgICAgICAgICAgICBEZWR1Y3QgcmVtaXNzaW9uXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5Ub3RhbCBhZnRlciByZW1pc3Npb246PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZmVlLm5ldF9hbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZCBzdWJjb2x1bW4tMVwiPlRvdGFsIHBheW1lbnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyB0b3RhbEFmdGVyUmVtaXNzaW9uIC0gb3V0U3RhbmRpbmdBbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGQgc3ViY29sdW1uLTFcIj5Ub3RhbCBvdXRzdGFuZGluZyBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBvdXRTdGFuZGluZ0Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdJZj1cIiFic1BheW1lbnREY25OdW1iZXJcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInRha2VQYXltZW50KClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0b3RhbEZlZSA8PSAwIHx8ICFwbGF0Rm9ybSB8fCBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109J3RvdGFsRmVlIDw9IDAgfHwgIXBsYXRGb3JtIHx8IGlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQ/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICAgICAgICAgIFRha2UgcGF5bWVudFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJzUGF5bWVudERjbk51bWJlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ29Ub0FsbG9jYXRlUGFnZShvdXRTdGFuZGluZ0Ftb3VudCwgaXNGZWVBbW91bnRaZXJvKVwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm91dFN0YW5kaW5nQW1vdW50ID4gMCB8fCAoaXNGZWVBbW91bnRaZXJvICYmIG91dFN0YW5kaW5nQW1vdW50ID09PSAwKVwiPlxuICAgICAgICAgICAgICAgICAgQWxsb2NhdGUgcGF5bWVudFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm91dFN0YW5kaW5nQW1vdW50IDwgMCB8fCAoIWlzRmVlQW1vdW50WmVybyAmJiBvdXRTdGFuZGluZ0Ftb3VudCA9PT0gMClcIj5cbiAgICAgICAgICAgICAgICAgIENvbnRpbnVlXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvbWFpbj5cbjwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbidcIj5cbiAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0ZFRVJFTU9WQUxDT05GSVJNQVRJT05fMSc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmZWU/XG4gICAgICAgIDwvc3Ryb25nPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLWdyYlwiPlxuICAgICAgICA8Zm9ybSBub3ZhbGlkYXRlPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFJlbWlzc2lvbigpXCI+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVtb3ZlQnRuRGlzYWJsZWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT0naXNSZW1vdmVCdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJ1xuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGZWUoY3VycmVudEZlZSlcIj5cbiAgICAgICAgICAgIFJlbW92ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjxjY3BheS1hZGQtcmVtaXNzaW9uICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ2FkZF9yZW1pc3Npb24nICYmIGN1cnJlbnRGZWVcIlxuIFtpc1R1cm5PZmZdPVwiaXNUdXJuT2ZmXCJcbiBbaXNTdHJhdGVnaWNGaXhFbmFibGVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuIFtmZWVdPVwiY3VycmVudEZlZVwiXG4gW2Nhc2VUeXBlXT1cImNhc2VUeXBlXCJcbiBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCJcbiBbcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cFJlZlwiXG4gKGNhbmNlbFJlbWlzc2lvbik9XCJjYW5jZWxSZW1pc3Npb24oKVwiPjwvY2NwYXktYWRkLXJlbWlzc2lvbj5cbiA8aW5wdXQgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAncGF5aHViX3ZpZXcnICYmIHBheWh1Ykh0bWxcIiAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nUENJUEFMJz5cbmAsXG4gIHN0eWxlczogW2AuZmVlLXN1bW1hcnkgLmdyZXktdGV4dHtjb2xvcjojNmI3Mzc2O2ZvbnQtd2VpZ2h0OjUwMH0uZmVlLXN1bW1hcnkgLmdvdnVrLXRhYmxle21hcmdpbi1ib3R0b206MH0uZmVlLXN1bW1hcnkgLm5vLWJvcmRlcntib3JkZXI6bm9uZTtib3JkZXItYm90dG9tOm5vbmV9LmZlZS1zdW1tYXJ5IHRhYmxlIHRkLC5mZWUtc3VtbWFyeSB0YWJsZSB0aHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7dmVydGljYWwtYWxpZ246dG9wO21heC13aWR0aDozMjBweH0uZmVlLXN1bW1hcnkgdGFibGUgdGQgLm5vLXBhZGRpbmcsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5uby1wYWRkaW5ne3BhZGRpbmc6MH0uZmVlLXN1bW1hcnkgdGFibGUgdGQgLnN1YmNvbHVtbi0xLC5mZWUtc3VtbWFyeSB0YWJsZSB0aCAuc3ViY29sdW1uLTF7d2lkdGg6NDUlfS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAuc3ViY29sdW1uLTIsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5zdWJjb2x1bW4tMnt3aWR0aDoyNSU7dGV4dC1hbGlnbjpyaWdodH0uZmVlLXN1bW1hcnkgdGFibGUgdGQgLnN1YmNvbHVtbi0zLC5mZWUtc3VtbWFyeSB0YWJsZSB0aCAuc3ViY29sdW1uLTN7d2lkdGg6MzAlO3RleHQtYWxpZ246Y2VudGVyfS5nb3Z1ay1idXR0b24tZ3Jie3BhZGRpbmctYm90dG9tOjIwcHh9LmdvdnVrLWJ1dHRvbi1ncmIgLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6I2RlZTBlMjtib3gtc2hhZG93OjAgMnB4IDAgIzg1ODY4ODtjb2xvcjojMGIwYzBjO21hcmdpbi1yaWdodDoxMHB4fS5nb3Z1ay1mb3JtLWdyb3VwLS1tZ3ttYXJnaW4tdG9wOjEwcHghaW1wb3J0YW50fS5nb3Z1ay1maWVsZHNldF9faGVhZGluZy0tZnp7Zm9udC1zaXplOjE2cHh9LnJlbWlzc2lvbkRpc2FibGV7Y29sb3I6Z3JleTtjdXJzb3I6ZGVmYXVsdH0uaGVhZGluZy14bGFyZ2V7bWFyZ2luOjAgMCAxNHB4IC0yMHB4fS5nb3Z1ay1zZWxlY3QtLWN1c3RvbXt3aWR0aDo1MCV9LmRpc2FibGUtbGlua3tjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOiM4ZThjOGN9YF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBGZWVTdW1tYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG5cblxuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgY3VycmVudEZlZTogSUZlZTtcbiAgdG90YWxGZWU6IG51bWJlcjtcbiAgcGF5aHViSHRtbDogU2FmZUh0bWw7XG4gIHNlcnZpY2U6IHN0cmluZyA9IFwiXCI7XG4gIHBsYXRGb3JtOiBzdHJpbmcgPSBcIlwiO1xuICB1cFBheW1lbnRFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgc2VsZWN0ZWRPcHRpb246c3RyaW5nO1xuICBpc0JhY2tCdXR0b25FbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBvdXRTdGFuZGluZ0Ftb3VudDogbnVtYmVyO1xuICBpc0ZlZUFtb3VudFplcm86IGJvb2xlYW4gPSBmYWxzZTs7XG4gIHRvdGFsQWZ0ZXJSZW1pc3Npb246IG51bWJlciA9IDA7XG4gIGlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1vdmVCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnRFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbnNFeGlzdDogQm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcblxuICAgIHRoaXMucGxhdEZvcm0gPSAnQW50ZW5uYSc7XG5cbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgaWYgKHRoaXMuYnNQYXltZW50RGNuTnVtYmVyKSB7XG4gICAgICB0aGlzLmdldFVuYXNzaWduZWRQYXltZW50bGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmdldFBheW1lbnRHcm91cCgpO1xuICB9XG5cbiAgICBnZXRVbmFzc2lnbmVkUGF5bWVudGxpc3QoKSB7XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uID09PSAnZGNuJykge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSKS5zdWJzY3JpYmUoXG4gICAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgICAgaWYodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gJ2Vycm9yJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlDQ0QodGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgICAgaWYodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gJ2Vycm9yJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbiAgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZUNvZGU6IHN0cmluZyk6IElSZW1pc3Npb24ge1xuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zICYmIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbWlzc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICB0aGlzLmN1cnJlbnRGZWUgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZF9yZW1pc3Npb24nO1xuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwKCkge1xuICAgIGxldCBmZWVzID0gW107XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRHcm91cFJlZikuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG4gICAgICAgIHRoaXMuaXNQYXltZW50RXhpc3QgPSBwYXltZW50R3JvdXAucGF5bWVudHMgPyBwYXltZW50R3JvdXAucGF5bWVudHMubGVuZ3RoID4gMCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc0V4aXN0ID0gcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMgPyBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRvdGFsQWZ0ZXJSZW1pc3Npb24gID0gdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uICArIGZlZS5uZXRfYW1vdW50O1xuICAgICAgICAgICAgICBpZihmZWUuY2FsY3VsYXRlZF9hbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmVlQW1vdW50WmVybyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzID0gZmVlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3V0U3RhbmRpbmdBbW91bnQgPSB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICk7XG4gIH1cblxuICBjb25maXJtUmVtb3ZlRmVlKGZlZTogSUZlZSl7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50RmVlID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuXG4gIHJlbW92ZUZlZShmZWU6IGFueSl7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kZWxldGVGZWVGcm9tUGF5bWVudEdyb3VwKGZlZSkuc3Vic2NyaWJlKFxuICAgICAgKHN1Y2Nlc3M6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRHcm91cC5mZWVzICYmIHRoaXMucGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMSl7XG4gICAgICAgICAgdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uID0gMDtcbiAgICAgICAgICB0aGlzLmdldFBheW1lbnRHcm91cCgpO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gbG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gYHNlbGVjdGVkT3B0aW9uPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTn1gO1xuICAgICAgcGFydFVybCArPXRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAgIHBhcnRVcmwgKz1gJmNhc2VUeXBlPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFfWA7XG5cbiAgICBsZXQgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9dHJ1ZSYke3BhcnRVcmx9YDtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gIH1cbiAgY2FuY2VsUmVtaXNzaW9uKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55LCBwYWdlPzogc3RyaW5nKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgcGFydFVybCA9dGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICAgcGFydFVybCArPWAmY2FzZVR5cGU9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0FTRVRZUEV9YDtcblxuICAgIGlmKHRoaXMudmlld1N0YXR1cyA9PT0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nIHx8IHRoaXMudmlld1N0YXR1cyA9PT0gJ2FkZF9yZW1pc3Npb24nKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB1cmwgPSBgL2ZlZS1zZWFyY2g/Y2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn0mc2VsZWN0ZWRPcHRpb249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OfSZwYXltZW50R3JvdXBSZWY9JHt0aGlzLnBheW1lbnRHcm91cFJlZn0ke3BhcnRVcmx9YDtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gIH1cbiAgdGFrZVBheW1lbnQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBheW1lbnRUb1BheWh1YlJlcXVlc3QodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLm91dFN0YW5kaW5nQW1vdW50LCB0aGlzLmNhc2VUeXBlKSxcbiAgICAgIGFudGVubmFSZXFCb2R5ID0gbmV3IFBheWh1YkFudGVubmFSZXF1ZXN0KHRoaXMuY2NkQ2FzZU51bWJlciwgdGhpcy5vdXRTdGFuZGluZ0Ftb3VudCwgdGhpcy5jYXNlVHlwZSk7XG5cbiAgICBpZih0aGlzLnBsYXRGb3JtID09PSAnQW50ZW5uYScpIHtcblxuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRBbnRlbm5hVG9QYXlIdWIoYW50ZW5uYVJlcUJvZHksIHRoaXMucGF5bWVudEdyb3VwUmVmKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmlzQmFja0J1dHRvbkVuYWJsZT1mYWxzZTtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvbWFrZVBheW1lbnRCeVRlbGVwaG9uZXlQcm92aWRlcic7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvcGNpLXBhbC1mYWlsdXJlJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBnb1RvQWxsb2NhdGVQYWdlKG91dFN0YW5kaW5nQW1vdW50OiBudW1iZXIsIGlzRmVlQW1vdW50WmVybzogQm9vbGVhbikge1xuICAgIGlmIChvdXRTdGFuZGluZ0Ftb3VudCA+IDAgfHwgKG91dFN0YW5kaW5nQW1vdW50ID09PSAwICYmIGlzRmVlQW1vdW50WmVybykpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRHcm91cFJlZjtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdhbGxvY2F0ZS1wYXltZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9XG4gIH1cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWVycm9yLWJhbm5lcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlcIiBhcmlhLWxhYmVsbGVkYnk9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCIgcm9sZT1cImFsZXJ0XCIgdGFiaW5kZXg9XCItMVwiIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiPlxuICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZSBnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZS1jdXN0b21cIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICAgIHt7ZXJyb3JNZXNzYWdlLnRpdGxlfX1cbiAgPC9oMj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgICB7e2Vycm9yTWVzc2FnZS5ib2R5fX1cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5gLFxuICBzdHlsZXM6IFtgLmdvdnVrLWVycm9yLXN1bW1hcnkgaDJ7Zm9udC1zaXplOjI0cHh9LmdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3QgbGl7Zm9udC1zaXplOjE5cHh9YF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBFcnJvckJhbm5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnZXJyb3JNZXNzYWdlJykgZXJyb3JNZXNzYWdlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxufVxuIiwiXG5leHBvcnQgY2xhc3MgVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0IHtcbiAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czogYW55O1xuICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50X3JlZmVyZW5jZTogc3RyaW5nO1xuICB1bmlkZW50aWZpZWRfcmVhc29uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudF9yZWZlcmVuY2UgOiBzdHJpbmcsIHVuaWRlbnRpZmllZF9yZWFzb246IGFueSkge1xuICAgIHRoaXMucGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1cyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIG5hbWU6IFwiVW5pZGVudGlmaWVkXCJcbiAgICB9O1xuICAgIHRoaXMucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPSBwYXltZW50X2dyb3VwX3JlZmVyZW5jZSA7XG4gICAgdGhpcy5wYXltZW50X3JlZmVyZW5jZT0gcGF5bWVudF9yZWZlcmVuY2U7XG4gICAgdGhpcy51bmlkZW50aWZpZWRfcmVhc29uPSB1bmlkZW50aWZpZWRfcmVhc29uO1xuXG4gIH1cblxuXG5cbn1cbiIsImltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSBcIi4vSUJTUGF5bWVudHNcIjtcblxuZXhwb3J0IGNsYXNzIEFsbG9jYXRlUGF5bWVudFJlcXVlc3Qge1xuICBhbW91bnQ6IE51bWJlcjtcbiAgYmFua2VkX2RhdGU6IFN0cmluZztcbiAgY2NkX2Nhc2VfbnVtYmVyOiBTdHJpbmc7XG4gIGV4Y2VwdGlvbl9yZWNvcmQ6IHN0cmluZztcbiAgY3VycmVuY3k6IFN0cmluZztcbiAgZG9jdW1lbnRfY29udHJvbF9udW1iZXI6IFN0cmluZztcbiAgZXh0ZXJuYWxfcHJvdmlkZXI6IFN0cmluZztcbiAgZ2lyb19zbGlwX25vOiBTdHJpbmc7XG4gIHBheWVyX25hbWU6IFN0cmluZztcbiAgcGF5bWVudF9jaGFubmVsOiBPYmplY3Q7XG4gIHBheW1lbnRfc3RhdHVzOiBPYmplY3Q7XG4gIHBheW1lbnRfbWV0aG9kOiBTdHJpbmc7XG4gIGNhc2VfdHlwZTogU3RyaW5nO1xuICBwYXltZW50X2FsbG9jYXRpb25fZHRvPzoge1xuICAgIGFsbG9jYXRpb25fcmVhc29uOiBTdHJpbmcsXG4gICAgYWxsb2NhdGlvbl9zdGF0dXM6IFN0cmluZyxcbiAgICBleHBsYW5hdGlvbjogU3RyaW5nLFxuICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IE9iamVjdCxcbiAgICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogU3RyaW5nLFxuICAgIHBheW1lbnRfcmVmZXJlbmNlOiBTdHJpbmcsXG4gICAgcmVhc29uOiBTdHJpbmcsXG4gICAgcmVjZWl2aW5nX29mZmljZTogU3RyaW5nLFxuICAgIHVuaWRlbnRpZmllZF9yZWFzb246IFN0cmluZyxcbiAgICB1c2VyX2lkOiBTdHJpbmcsXG4gICAgdXNlcl9uYW1lOiBTdHJpbmcsXG4gICAgY2FzZV90eXBlOiBTdHJpbmdcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNjZF9jYXNlX251bWJlciA6IHN0cmluZywgdW5BbGxvY2F0ZWRQYXltZW50OiBJQlNQYXltZW50cywgY2FzZVR5cGU6IHN0cmluZywgZXhjZXB0aW9uUmVjb3JkOiBzdHJpbmcsIGFsbG9jYXRlZFJlcXVlc3Q/OiBhbnkpIHtcbiAgICB0aGlzLmFtb3VudCA9IHVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQ7XG4gICAgdGhpcy5iYW5rZWRfZGF0ZSA9IHVuQWxsb2NhdGVkUGF5bWVudC5kYXRlX2JhbmtlZDtcbiAgICB0aGlzLmNjZF9jYXNlX251bWJlciA9IGNjZF9jYXNlX251bWJlcjtcbiAgICB0aGlzLmV4Y2VwdGlvbl9yZWNvcmQgPSBleGNlcHRpb25SZWNvcmQ7XG4gICAgdGhpcy5jdXJyZW5jeT0gdW5BbGxvY2F0ZWRQYXltZW50LmN1cnJlbmN5O1xuICAgIHRoaXMuZG9jdW1lbnRfY29udHJvbF9udW1iZXIgPSB1bkFsbG9jYXRlZFBheW1lbnQuZGNuX3JlZmVyZW5jZTtcbiAgICB0aGlzLmV4dGVybmFsX3Byb3ZpZGVyID0gJ2V4ZWxhJztcbiAgICB0aGlzLmdpcm9fc2xpcF9ubyA9IHVuQWxsb2NhdGVkUGF5bWVudC5iZ2NfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5ZXJfbmFtZSA9IHVuQWxsb2NhdGVkUGF5bWVudC5wYXllcl9uYW1lO1xuICAgIHRoaXMucGF5bWVudF9jaGFubmVsID0ge1xuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgbmFtZTogJ2J1bGsgc2NhbidcbiAgICB9O1xuICAgIHRoaXMucGF5bWVudF9zdGF0dXMgPXtcbiAgICAgIGRlc2NyaXB0aW9uOiAnYnVsayBzY2FuIHBheW1lbnQgY29tcGxldGVkJyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH1cbiAgICB0aGlzLnBheW1lbnRfbWV0aG9kID0gdW5BbGxvY2F0ZWRQYXltZW50LnBheW1lbnRfbWV0aG9kO1xuICAgIHRoaXMuY2FzZV90eXBlPSBjYXNlVHlwZTtcbiAgICBpZihhbGxvY2F0ZWRSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnBheW1lbnRfYWxsb2NhdGlvbl9kdG8gPSBhbGxvY2F0ZWRSZXF1ZXN0O1xuICAgIH1cblxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1VuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1hcmstdW5pZGVudGlmaWVkLXBheW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJta3BheS11bmlkZW50aWZpZWRcIiA+XG4gIDxkaXYgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbkZvcm0nXCI+XG4gICAgPGlucHV0ICNteUlucHV0ICB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nTUFSS1VOSURFTlRJRklFRCc+XG4gICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPk1hcmsgcGF5bWVudCBhcyB1bmlkZW50aWZpZWQ8L2gxPlxuXG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICBcbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7dW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmRhdGVfYmFua2VkIHwgZGF0ZTonZGQgTU1NIHl5eXknfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3RyaW1VbmRlcnNjb3JlKHVuYXNzaWduZWRSZWNvcmQucGF5bWVudF9tZXRob2QpIHwgbG93ZXJjYXNlfX0gIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJtYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm1cIiBub3ZhbGlkYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ1bmlkZW50aWZpZWRTdWJUZXh0XCI+XG4gICAgICAgICAgR2l2ZSBhIHJlYXNvbiBmb3IgbWFya2luZyB0aGlzIHBheW1lbnQgYXMgdW5pZGVudGlmaWVkLlxuICAgICAgICAgIDxici8+XG4gICAgICAgICAgSW5jbHVkZSBhbnkgaW52ZXN0aWdhdGlvbnMgeW91J3ZlIG1hZGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiIGZvcj1cImludmVzdGljYXRpb25EZXRhaWxcIj5cblxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLTMtNFwiIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgfHwgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yIHx8IGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvciB8fCBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3J9XCIgbmFtZT1cImludmVzdGljYXRpb25EZXRhaWxcIiBpZD1cImludmVzdGljYXRpb25EZXRhaWxcIiByb3dzPVwiNVwiIGZvcm1Db250cm9sTmFtZT1cImludmVzdGljYXRpb25EZXRhaWxcIj5cbiAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgfHwgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yIHx8IGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvciB8fCBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3JcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW52ZXN0aWNhdGlvbkRldGFpbEVtcHR5XCI+RW50ZXIgYSByZWFzb24gZm9yIG1hcmtpbmcgdGhpcyBwYXltZW50IGFzIHVuaWRlbnRpZmllZC48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnZlc3RpY2F0aW9uRGV0YWlsSGFzRXJyb3JcIj5FbnRlciBhIHZhaWxkIHJlYXNvbjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImludmVzdGljYXRpb25EZXRhaWxNYXhIYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgMjU1IGNoYXJhY3RlcnMgb3IgdW5kZXIuPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbmRDb250aW51ZSgpXCI+XG4gICAgICAgICAgQ29udGludWVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygnY2FuY2VsJylcIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICd1bmlkZW50aWZpZWRDb250aW51ZUNvbmZpcm0nXCI+XG4gICAgICA8Y2NwYXktZXJyb3ItYmFubmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlLnNob3dFcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCI+PC9jY3BheS1lcnJvci1iYW5uZXI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1VOSURFTlRJRklFRENPTkZJUk1BVElPTic+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbWFyayB0aGlzIHBheW1lbnQgYXMgdW5pZGVudGlmaWVkPyA8L2gxPlxuICAgICAgICAgXG4gICAgICAgIDwvc3Ryb25nPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICAgIDxociBjbGFzcz1cImdvdnVrLXNlY3Rpb24tYnJlYWsgZ292dWstc2VjdGlvbi1icmVhay0tdmlzaWJsZVwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5JbnZlc3RpZ2F0aW9uczwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7aW52ZXN0aWdhdGlvbkNvbW1lbnR9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0NvbmZpcm1CdXR0b25kaXNhYmxlZFwiIChjbGljayk9XCJjb25maXJtUGF5bWVudHMoKVwiPlxuICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3VuaWRlbnRpZmllZENhbmNlbENvbmZpcm0nXCI+XG4gICAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FOQ0VMVU5JREVOVElGSUVEJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWw/XG4gICAgICAgIDwvc3Ryb25nPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKClcIj5cbiAgICAgICAgICBZZXNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgTm9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5ta3BheS11bmlkZW50aWZpZWR7bWFyZ2luOjEwcHggMCAyMHB4fS5ta3BheS11bmlkZW50aWZpZWQgLmdvdnVrLWJ1dHRvbi0tZ3JvdXAgLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e21hcmdpbi1sZWZ0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojYjNiOGJkZjJ9Lm1rcGF5LXVuaWRlbnRpZmllZCAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0ubWtwYXktdW5pZGVudGlmaWVkIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9LmdvdnVrLWdyaWQtY29sdW1uLWZ1bGx7cGFkZGluZzowfS51bmlkZW50aWZpZWRTdWJUZXh0e2xpbmUtaGVpZ2h0OjQ1cHh9LmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dHtmb250LXNpemU6MTlweH0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0uY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtVbmlkZW50aWZpZWRQYXltZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcbiAgbWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtOiBGb3JtR3JvdXA7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICB1bmFzc2lnbmVkUmVjb3JkOklCU1BheW1lbnRzO1xuICBzaXRlSUQ6IHN0cmluZyA9IG51bGw7XG4gIGludmVzdGlnYXRpb25Db21tZW50OiBzdHJpbmc7XG4gIGlzQ29uZmlybUJ1dHRvbmRpc2FibGVkOkJvb2xlYW4gPSBmYWxzZTtcbiAgY2NkUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBleGNlcHRpb25SZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcblxuICAgIHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnZlc3RpY2F0aW9uRGV0YWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpXG4gICAgICBdKSlcbiAgICB9KTtcbiAgfVxuIGdldFVuYXNzaWduZWRQYXltZW50KCkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlEQ04odGhpcy5ic3BheW1lbnRkY24pLnN1YnNjcmliZShcbiAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnVuYXNzaWduZWRSZWNvcmQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cy5maWx0ZXIocGF5bWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICAgYmVFeGNlcHRpb25OdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSxcbiAgICAgICAgICBleGNlcHRpb25SZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyID09PSB0aGlzLmNjZENhc2VOdW1iZXIgPyBudWxsIDogdGhpcy5jY2RDYXNlTnVtYmVyIDogdGhpcy5jY2RDYXNlTnVtYmVyO1xuICAgICAgICB0aGlzLmNjZFJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgOiBudWxsO1xuICAgICAgICB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlRXhjZXB0aW9uTnVtYmVyID8gYmVFeGNlcHRpb25OdW1iZXIgOiBleGNlcHRpb25SZWZlcmVuY2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbiAgY29uc3QgaW52ZXN0aWNhdGlvbkZpZWxkID0gdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uY29udHJvbHMuaW52ZXN0aWNhdGlvbkRldGFpbDtcbiAgY29uc3QgZm9ybWVycm9yID0gaW52ZXN0aWNhdGlvbkZpZWxkLmVycm9ycztcbiAgICBpZiAodGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuaW52ZXN0aWdhdGlvbkNvbW1lbnQgPSB0aGlzLm1hcmtQYXltZW50VW5pZGVudGlmaWVkRm9ybS5jb250cm9scy5pbnZlc3RpY2F0aW9uRGV0YWlsLnZhbHVlO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3VuaWRlbnRpZmllZENvbnRpbnVlQ29uZmlybSc7XG4gICAgfWVsc2Uge1xuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlICE9ICcnICYmIGludmVzdGljYXRpb25GaWVsZC5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5taW5sZW5ndGggJiYgZm9ybWVycm9yLm1pbmxlbmd0aC5hY3R1YWxMZW5ndGggPCAzICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5tYXhsZW5ndGggJiYgZm9ybWVycm9yLm1heGxlbmd0aC5hY3R1YWxMZW5ndGggPiAyNTUgKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwpIHtcbiAgICAgIHRoaXMuaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmludmVzdGljYXRpb25EZXRhaWxIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaW52ZXN0aWNhdGlvbkRldGFpbE1pbkhhc0Vycm9yID0gdmFsWzJdO1xuICAgICAgdGhpcy5pbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gIH1cbiAgY29uZmlybVBheW1lbnRzKCkge1xuICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHJlYXNvbiA9IHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtLmdldCgnaW52ZXN0aWNhdGlvbkRldGFpbCcpLnZhbHVlO1xuXG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonVW5pZGVudGlmaWVkJyxcbiAgICAgICAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBuYW1lOiAnVW5pZGVudGlmaWVkJ1xuICAgICAgICB9LFxuICAgICAgICB1bmlkZW50aWZpZWRfcmVhc29uOiByZWFzb24sXG4gICAgICAgIHVzZXJfaWQ6IHRoaXMuY2FzZVR5cGUsXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0U3RyYXRlZ2ljQm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5hc3NpZ25lZFJlY29yZCwgdGhpcy5jYXNlVHlwZSwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UsIGFsbG9jYXRlZFJlcXVlc3QpO1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU1dvUEdTdHJhdGVnaWMocG9zdFN0cmF0ZWdpY0JvZHkpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdQUk9DRVNTRUQnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzMSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAgICh0aGlzLmNjZFJlZmVyZW5jZSwgdGhpcy51bmFzc2lnbmVkUmVjb3JkLCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UpXG4gICAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0QlNQYXltZW50cyhyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZTIgPSBKU09OLnBhcnNlKHJlczIpLFxuICAgICAgICAgICAgICAgICAgcmVxQm9keSA9IG5ldyBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCByZWFzb24pO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTIuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTVW5pZGVudGlmaWVkUGF5bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZTMgPSBKU09OLnBhcnNlKHJlczMpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICB9XG4gIGNhbmNlbE1hcmtVbmlkZW50aWZpZWRQYXltZW50cyh0eXBlPzpzdHJpbmcpe1xuICAgIGlmKHR5cGUgJiYgdHlwZSA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgaWYodGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uZ2V0KCdpbnZlc3RpY2F0aW9uRGV0YWlsJykudmFsdWUhPT1cIlwiKXtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5pZGVudGlmaWVkQ2FuY2VsQ29uZmlybSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW5Gb3JtJztcbiAgICB9XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIH1cbiAgZ2V0RXJyb3JNZXNzYWdlKGlzRXJyb3JFeGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogXCJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZVwiLFxuICAgICAgYm9keTogXCJUcnkgYWdhaW4gbGF0ZXJcIixcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxufVxuIiwiXG5leHBvcnQgY2xhc3MgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3Qge1xuICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiBhbnk7XG4gIHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlY2VpdmluZ19vZmZpY2U6IHN0cmluZztcbiAgcmVjZWl2aW5nX2VtYWlsX2FkZHJlc3M6IHN0cmluZztcbiAgc2VuZGluZ19lbWFpbF9hZGRyZXNzOiBzdHJpbmc7XG4gIHVuaWRlbnRpZmllZF9yZWFzb246IHN0cmluZztcbiAgY29uc3RydWN0b3IocGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudF9yZWZlcmVuY2UgOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nLHJlc3BvbnNpYmxlX29mZmljZTogc3RyaW5nLCByZXNwb25zaWJsZV9wZXJzb246c3RyaW5nLGVtYWlsX2lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXMgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIG5hbWU6IFwiVHJhbnNmZXJyZWRcIlxuICAgIH07XG4gICAgdGhpcy5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSA9IHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudF9yZWZlcmVuY2U9IHBheW1lbnRfcmVmZXJlbmNlO1xuICAgIHRoaXMudW5pZGVudGlmaWVkX3JlYXNvbj0gcmVhc29uO1xuICAgIHRoaXMucmVjZWl2aW5nX29mZmljZT0gcmVzcG9uc2libGVfb2ZmaWNlO1xuICAgIHRoaXMucmVjZWl2aW5nX2VtYWlsX2FkZHJlc3M9IGVtYWlsX2lkO1xuICAgIHRoaXMuc2VuZGluZ19lbWFpbF9hZGRyZXNzPSByZXNwb25zaWJsZV9wZXJzb247XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBVbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbG9jYXRlUGF5bWVudFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FsbG9jYXRlUGF5bWVudFJlcXVlc3QnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrLXVuc29saWNpdGVkLXBheW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJta3BheS11bmlkZW50aWZpZWRcIj5cbiAgPGRpdiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdtYWluRm9ybSdcIj5cbiAgPGNjcGF5LWVycm9yLWJhbm5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiPjwvY2NwYXktZXJyb3ItYmFubmVyPlxuICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+TWFyayBwYXltZW50IGFzIHRyYW5zZmVycmVkPC9oMT5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3t1bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2V9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuZGF0ZV9iYW5rZWQgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXBpdGFsaXplIGdvdnVrLXRhYmxlX19jZWxsXCI+IHt7dHJpbVVuZGVyc2NvcmUodW5hc3NpZ25lZFJlY29yZC5wYXltZW50X21ldGhvZCkgfCBsb3dlcmNhc2V9fSAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG4gIFxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtXCIgbm92YWxpZGF0ZT5cbiAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J01BUktUUkFOU0ZFUlJFRCc+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGN1c3RvbS1nb3Z1ay1sYWJlbCBjdXN0b20tZ292dWstbGFiZWxcIiBmb3I9XCJyZWFzb25cIj5cbiAgICAgICAgUmVhc29uIGZvciBwYXltZW50IGJlaW5nIG1hcmtlZCBhcyB0cmFuc2ZlcnJlZCAgIFxuICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTRcIiBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1jbGFzcyc6IHJlYXNvbkhhc0Vycm9yIHx8IHJlYXNvbk1pbkhhc0Vycm9yIHx8IHJlYXNvbk1heEhhc0Vycm9yfVwiIG5hbWU9XCJyZWFzb25cIiBpZD1cInJlYXNvblwiIHJvd3M9XCI1XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVhc29uXCI+XG4gICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzUmVhc29uRW1wdHkgfHwgcmVhc29uSGFzRXJyb3IgfHwgcmVhc29uTWluSGFzRXJyb3IgfHwgcmVhc29uTWF4SGFzRXJyb3JcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVhc29uRW1wdHlcIj5FbnRlciBhIHJlYXNvbiBmb3IgbWFya2luZyB0aGlzIHBheW1lbnQgYXMgdHJhbnNmZXJyZWQuPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVhc29uSGFzRXJyb3JcIj5FbnRlciBhIHZhbGlkIHJlYXNvbjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlYXNvbk1pbkhhc0Vycm9yXCI+UmVhc29uIHNob3VsZCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVhc29uTWF4SGFzRXJyb3JcIj5SZWFzb24gc2hvdWxkIGJlIDI1NSBjaGFyYWN0ZXJzIG9yIHVuZGVyLjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBjdXN0b20tZ292dWstbGFiZWxcIiBmb3I9XCJyZXNwb25zaWJsZU9mZmljZVwiPlxuICAgICAgICBSZWNlaXZpbmcgU2l0ZSBJRCAoUmVjZWl2aW5nIGNvdXJ0L0J1bGsgY2VudHJlIHNpdGUgSUQpICAgIFxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2hvcnQtaW5wdXRcIiBpZD1cInJlc3BvbnNpYmxlT2ZmaWNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVzcG9uc2libGVPZmZpY2VcIiAoY2hhbmdlKT1cInNlbGVjdGNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnPlBsZWFzZSBzZWxlY3Q8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiAgKm5nRm9yPVwibGV0IHNpdGVJRCBvZiBzaXRlSURMaXN0O1wiIHZhbHVlPVwie3tzaXRlSUQuc2l0ZUlkfX1cIj57e3NpdGVJRC5zaXRlTmFtZX19ICh7e3NpdGVJRC5zaXRlSWR9fSk8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNSZXNwb25zaWJsZU9mZmljZUVtcHR5IHx8IHJlc3BvbnNpYmxlT2ZmaWNlSGFzRXJyb3JcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1Jlc3BvbnNpYmxlT2ZmaWNlRW1wdHlcIj5QbGVhc2Ugc2VsZWN0IFJlY2VpdmluZyBTaXRlIElEPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlc3BvbnNpYmxlT2ZmaWNlSGFzRXJyb3JcIj5QbGVhc2Ugc2VsZWN0IGEgdmFsaWQgUmVjZWl2aW5nIFNpdGUgSUQ8L3NwYW4+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzQ29udGludWVCdXR0b25kaXNhYmxlZFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbmRDb250aW51ZSgpXCI+XG4gICAgICAgIENvbmZpcm1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHMoJ2NhbmNlbCcpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbiAgXG48L2Rpdj5cbiAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3Vuc29saWNpdGVkQ29udGludWVDb25maXJtJ1wiPlxuICAgICAgICAgIDxjY3BheS1lcnJvci1iYW5uZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2Uuc2hvd0Vycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIj48L2NjcGF5LWVycm9yLWJhbm5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLXNtYWxsXCI+IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBtYXJrIHRoaXMgcGF5bWVudCBhcyB0cmFuc2ZlcnJlZD8gPC9oMT5cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nVFJBTlNGRVJSRURDT05GSVJNQVRJT04nPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVhc29uPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVjZWl2aW5nIHNpdGUgSUQ8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e3JlYXNvbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tzZWxlY3RlZFNpdGVOYW1lfX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiaXNDb25maXJtQnV0dG9uZGlzYWJsZWRcIiAoY2xpY2spPVwiY29uZmlybVBheW1lbnRzKClcIj5cbiAgICAgICAgICBDb25maXJtXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxNYXJrVW5zb2xpY2l0ZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3Vuc29saWNpdGVkQ2FuY2VsQ29uZmlybSdcIj5cbiAgICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdDQU5DRUxUUkFOU0ZFUlJFRCc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpXCI+XG4gICAgICAgICAgWWVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxNYXJrVW5zb2xpY2l0ZWRQYXltZW50cygpXCI+XG4gICAgICAgICAgTm9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AubWtwYXktdW5pZGVudGlmaWVke21hcmdpbjoxMHB4IDAgMjBweH0ubWtwYXktdW5pZGVudGlmaWVkIC5nb3Z1ay1idXR0b24tLXNlY29uZGFyeXttYXJnaW4tbGVmdDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2IzYjhiZGYyfS5ta3BheS11bmlkZW50aWZpZWQgLmlubGluZS1lcnJvci1jbGFzc3tvdXRsaW5lOiNhNzE0MTQgc29saWQgM3B4O291dGxpbmUtb2Zmc2V0OjB9Lm1rcGF5LXVuaWRlbnRpZmllZCAuaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXple3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9LmN1c3RvbS1nb3Z1ay1sYWJlbCwuZ292dWstd2FybmluZy10ZXh0X190ZXh0e2ZvbnQtc2l6ZToxOXB4fSNyZXNwb25zaWJsZU9mZmljZXtjb2xvcjojMDAwO3dpZHRoOjc1JTtmb250LXdlaWdodDojZmZmfXNlbGVjdCBvcHRpb257YmFja2dyb3VuZDojZmZmfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtVbnNvbGljaXRlZFBheW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBtYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybTogRm9ybUdyb3VwO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIHJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhc29uTWluSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhc29uTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVzcG9uc2libGVPZmZpY2VIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Jlc3BvbnNpYmxlT2ZmaWNlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICB1bmFzc2lnbmVkUmVjb3JkOiBJQlNQYXltZW50cztcbiAgc2l0ZUlEOiBzdHJpbmcgPSBudWxsO1xuICByZWFzb246IHN0cmluZztcbiAgcmVzcG9uc2libGVQZXJzb246IHN0cmluZztcbiAgcmVzcG9uc2libGVPZmZpY2U6IHN0cmluZztcbiAgZW1haWxJZDogc3RyaW5nO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogQm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgY2NkUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBleGNlcHRpb25SZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIHNlbGVjdGVkU2l0ZUlkOiBzdHJpbmc7XG4gIHNlbGVjdGVkU2l0ZU5hbWU6IHN0cmluZztcbiAgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBzaXRlSURMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FsbCcpO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFNpdGVJRCgpLnN1YnNjcmliZShcbiAgICAgIHNpdGVpZHMgPT4ge1xuICAgICAgICB0aGlzLmlzQ29udGludWVCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zaXRlSURMaXN0ID0gSlNPTi5wYXJzZShzaXRlaWRzKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIHRoaXMuaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICAgIFxuICAgIHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxccyxcXFxcLl0qKSQnKVxuICAgICAgXSkpLFxuICAgICAgcmVzcG9uc2libGVPZmZpY2U6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxcc1xcXFxuLFxcXFwuLTpdKikkJylcbiAgICAgIF0pKSxcbiAgICAgIHJlc3BvbnNpYmxlUGVyc29uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZW1haWxJZDogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gIGNvbmZpcm1QYXltZW50cygpIHtcbiAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHM7XG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonVHJhbnNmZXJyZWQnLFxuICAgICAgICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIG5hbWU6ICdUcmFuc2ZlcnJlZCdcbiAgICAgICAgfSxcbiAgICAgICAgdW5pZGVudGlmaWVkX3JlYXNvbjogY29udHJvbHMucmVhc29uLnZhbHVlLFxuICAgICAgICByZWNlaXZpbmdfb2ZmaWNlOiB0aGlzLnNlbGVjdGVkU2l0ZUlkLFxuICAgICAgICB1c2VyX2lkOiB0aGlzLmNhc2VUeXBlLFxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFN0cmF0ZWdpY0JvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuY2FzZVR5cGUsIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlLCBhbGxvY2F0ZWRSZXF1ZXN0KTtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNXb1BHU3RyYXRlZ2ljKHBvc3RTdHJhdGVnaWNCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAvLyBjb250cm9scy5yZXNwb25zaWJsZU9mZmljZS5zZXRWYWx1ZSgnUDIxOScpO1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBjb25zdCByZXNwb25zZTEgPSBKU09OLnBhcnNlKHJlczEpLFxuICAgICAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSlcbiAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTUGF5bWVudHMocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKSxcbiAgICAgICAgICAgIHJlcUJvZHkgPSBuZXcgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCBjb250cm9scy5yZWFzb24udmFsdWUsIHRoaXMuc2VsZWN0ZWRTaXRlSWQsIGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlLCBjb250cm9scy5lbWFpbElkLnZhbHVlKTtcbiAgICAgICAgICAgICBpZiAocmVzcG9uc2UyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTVW5zb2xpY2l0ZWRQYXltZW50cyhyZXFCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMyA9IEpTT04ucGFyc2UocmVzMyk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcbiAgICAgICAgY29uc3QgZm9ybWVycm9yID0gdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS5jb250cm9scy5yZWFzb24uZXJyb3JzO1xuICAgICAgICBjb25zdCByZWFzb25GaWVsZCA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVhc29uO1xuICAgICAgICAvL2NvbnN0IG9mZmljZUlkRmllbGQgPSB0aGlzLnNlbGVjdGVkU2l0ZUlkO1xuICAgICAgICBjb25zdCBvZmZpY2VJZEZpZWxkICA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVzcG9uc2libGVPZmZpY2U7XG4gICAgaWYgKHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgY29udHJvbHMgPSB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzO1xuICAgICAgdGhpcy5lbWFpbElkID0gY29udHJvbHMuZW1haWxJZC52YWx1ZTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2UgPSBvZmZpY2VJZEZpZWxkLnZhbHVlO1xuICAgICAgdGhpcy5yZXNwb25zaWJsZVBlcnNvbiA9IGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlO1xuICAgICAgdGhpcy5yZWFzb24gPSBjb250cm9scy5yZWFzb24udmFsdWU7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDb250aW51ZUNvbmZpcm0nO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKCByZWFzb25GaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihyZWFzb25GaWVsZC52YWx1ZSAhPSAnJyAmJiB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlYXNvbi5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKGZvcm1lcnJvciAmJiBmb3JtZXJyb3IubWlubGVuZ3RoICYmIGZvcm1lcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihmb3JtZXJyb3IgJiYgZm9ybWVycm9yLm1heGxlbmd0aCAmJiBmb3JtZXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlXSwgJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlICE9ICcnICYmIG9mZmljZUlkRmllbGQuaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZV0sJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlYXNvbkhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5yZWFzb25NaW5IYXNFcnJvciA9IHZhbFsyXTtcbiAgICAgIHRoaXMucmVhc29uTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3Jlc3BvbnNpYmxlT2ZmaWNlJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVzcG9uc2libGVPZmZpY2VFbXB0eSA9IHZhbFs0XTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2VIYXNFcnJvciA9IHZhbFs1XTtcbiAgICB9XG4gIH1cblxuY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHModHlwZT86c3RyaW5nKXtcbiAgICBpZih0eXBlICYmIHR5cGUgPT09ICdjYW5jZWwnKSB7XG4gICAgICBpZih0aGlzLmNoZWNraW5nRm9ybVZhbHVlKCkpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDYW5jZWxDb25maXJtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlc3BvbnNpYmxlT2ZmaWNlLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgfVxuICB9XG4gIGNoZWNraW5nRm9ybVZhbHVlKCl7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0udmFsdWU7XG4gICAgbGV0IHZhbHVlRXhpc3RzID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBmaWVsZCBpbiBmb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkgJiYgZm9ybUZpZWxkc1tmaWVsZF0gIT09XCJcIikge1xuICAgICAgICB2YWx1ZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVFeGlzdHM7XG4gIH1cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG4gICBnZXRVbmFzc2lnbmVkUGF5bWVudCgpIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMuYnNwYXltZW50ZGNuKS5zdWJzY3JpYmUoXG4gICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICBcbiAgICAgIHRoaXMudW5hc3NpZ25lZFJlY29yZCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzLmZpbHRlcihwYXltZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgfSlbMF07XG4gICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICBiZUV4Y2VwdGlvbk51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLFxuICAgICAgICAgZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA9PT0gdGhpcy5jY2RDYXNlTnVtYmVyID8gbnVsbCA6IHRoaXMuY2NkQ2FzZU51bWJlciA6IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgICAgICAgdGhpcy5jY2RSZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyIDogbnVsbDtcbiAgICAgICAgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UgPSBiZUV4Y2VwdGlvbk51bWJlciA/IGJlRXhjZXB0aW9uTnVtYmVyIDogZXhjZXB0aW9uUmVmZXJlbmNlO1xuICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoaXNFcnJvckV4aXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwiLFxuICAgICAgYm9keTogXCJQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpeyBcbiAgICB0aGlzLnNlbGVjdGVkU2l0ZUlkID0gYXJncy50YXJnZXQudmFsdWU7IFxuICAgIHRoaXMuc2VsZWN0ZWRTaXRlTmFtZSA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQuc2VsZWN0ZWRJbmRleF0udGV4dDsgXG4gIH0gXG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsSW5wdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQlNQYXltZW50cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUJTUGF5bWVudHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInVucHJvY2Vzc2VkLXBheW1lbnRzIGdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FTRVRSQU5TQUNUSU9OJz5cbiAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIiAqbmdJZj1cIiFJU19CVVRUT05fRU5BQkxFXCI+VW5wcm9jZXNzZWQgcGF5bWVudHM8L2gzPlxuICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiICpuZ0lmPVwiSVNfQlVUVE9OX0VOQUJMRVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC9oMz5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmICFpc1R1cm5PZmZcIj5TZWxlY3Q8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmIGlzVHVybk9mZlwiPjxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cInVucHJvY2Vzc2VkUGF5bWVudFVuU2VsZWN0RXZlbnQoJGV2ZW50KVwiPlVuc2VsZWN0PC9hPjwvdGQ+XG5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHVuYXNzaWduZWRSZWNvcmQgb2YgdW5hc3NpZ25lZFJlY29yZExpc3Q7IGxldCBpIG9mIGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpcGxlLWNob2ljZSB1bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiJ3VucGFpZWRGZWUnK2krJydcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ1bmFzc2lnbmVkUmVjb3JkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidW5hc3NpZ25lZFJlY29yZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZElkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQodW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlKVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7e3VuYXNzaWduZWRSZWNvcmQuZGNuX3JlZmVyZW5jZX19XCIgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmFkaW8taW5saW5lLTFcIj48L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj5cbiAgICAgICAgICAgICAge3t1bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2V9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuZGF0ZV9iYW5rZWQgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3sgdHJpbVVuZGVyc2NvcmUodW5hc3NpZ25lZFJlY29yZC5wYXltZW50X21ldGhvZCkgfCBsb3dlcmNhc2V9fSAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJ1cFBheW1lbnRFcnJvck1lc3NhZ2UgIT09IG51bGxcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHVuYWxsb2NhdGVkIHBheW1lbnRzIHJlY29yZCBhdmFpbGFibGU8L3RkPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgIWlzVHVybk9mZlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiIWlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID8gJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnIDogJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xJ1wiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGEgbmV3IGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzQWxsb2NhdGVUb0V4aXN0aW5nRmVlYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2UoKVwiPlxuICAgICAgICBBbGxvY2F0ZSB0byBhbiBleGlzdGluZyBmZWVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc01hcmtBc1VuaWRlbnRpZmllZGJ0bkVuYWJsZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bmlkZW50aWZpZWRQYWdlJylcIj5cbiAgICAgICAgTWFyayBhcyB1bmlkZW50aWZpZWRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bnNvbGljaXRlZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHRyYW5zZmVycmVkXG4gICAgICA8L2J1dHRvbj4gIFxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgaXNUdXJuT2ZmXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPyAnYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMScgOiAnYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIj5cbiAgICAgICAgQWxsb2NhdGUgdG8gYSBuZXcgZmVlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSchaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID8gIFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJyAoY2xpY2spPVwiZ29Ub0FsbG9jYXRlUGFnZSgpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGFuIGV4aXN0aW5nIGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3VuaWRlbnRpZmllZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHVuaWRlbnRpZmllZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3Vuc29saWNpdGVkUGFnZScpXCI+XG4gICAgICAgIE1hcmsgYXMgdHJhbnNmZXJyZWRcbiAgICAgIDwvYnV0dG9uPiBcbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLnVucHJvY2Vzc2VkLXBheW1lbnRzIC51bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9ue2JvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6LjUyNjMxNWVtIC43ODk0NzNlbSAuMjYzMTU3ZW07Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgyM2I7cG9pbnRlci1ldmVudHM6bm9uZTtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuMjU7b3V0bGluZTp0cmFuc3BhcmVudCBzb2xpZCAxcHg7b3V0bGluZS1vZmZzZXQ6LTFweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93OjAgMnB4IDAgIzAwMzYxOH0uYnV0dG9uLmRpc2FibGVkLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdLC5idXR0b25bZGlzYWJsZWRde3pvb206MTtvcGFjaXR5Oi41fS5idXR0b24uZGlzYWJsZWQ6YWN0aXZlLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdOmFjdGl2ZSwuYnV0dG9uW2Rpc2FibGVkXTphY3RpdmV7dG9wOjA7Ym94LXNoYWRvdzowIDJweCAwICMwMDM2MTh9LmJ1dHRvbltkaXNhYmxlZD1kaXNhYmxlZF17YmFja2dyb3VuZDojMDA4MjNifS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXplOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS53aGl0ZXNwYWNlLWluaGVyaXR7d2hpdGUtc3BhY2U6aW5oZXJpdCFpbXBvcnRhbnR9YF1cbn0pXG5leHBvcnQgY2xhc3MgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCdGRUVfUkVDT1JEU19FWElTVFMnKSBGRUVfUkVDT1JEU19FWElTVFM6IGJvb2xlYW47XG4gIEBJbnB1dCgnUEFZTUVOVFJFRicpIFBBWU1FTlRSRUY6IHN0cmluZztcbiAgQElucHV0KCdJU1RVUk5PRkYnKSBJU1RVUk5PRkY6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfQlVUVE9OX0VOQUJMRScpIElTX0JVVFRPTl9FTkFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfT1NfQU1UX0FWQUlMQUJMRScpIElTX09TX0FNVF9BVkFJTEFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNTRkVOQUJMRScpIElTU0ZFTkFCTEU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBnZXRVbnByb2Nlc3NlZEZlZUNvdW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICB1bmFzc2lnbmVkUmVjb3JkTGlzdDogSUJTUGF5bWVudHM7XG4gIHVwUGF5bWVudEVycm9yTWVzc2FnZTogc3RyaW5nID0gbnVsbDtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICByZWNvcmRJZDogc3RyaW5nID0gbnVsbDtcbiAgaXNSZWNvcmRFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBkY25OdW1iZXI6IHN0cmluZyA9IG51bGw7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRXhjZXB0aW9uQ2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZXJ2aWNlSWQ6IHN0cmluZyA9IG51bGw7XG4gIGlzQnVsa1NjYW5FbmFibGU7XG4gIGlzVHVybk9mZjogYm9vbGVhbiA9IHRydWU7XG4gIGlzU3RGaXhFbmFibGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBUb2RvIC4uLlxuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT04udG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzU3RGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcblxuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkUGF5bWVudGxpc3QoKSB7XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uID09PSAnZGNuJykge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMuZGNuTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgICAgaWYodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10gJiYgdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHVuYXNzaWduZWRQYXltZW50c1sncGF5bWVudHMnXSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXNGb3JVbmFzc2lnbmVkUmVjb3JkKHVuYXNzaWduZWRQYXltZW50cyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KCcwJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5nZXRVbnByb2Nlc3NlZEZlZUNvdW50LmVtaXQoJzAnKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5Q0NEKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICAgIGlmKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddICYmIHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlc0ZvclVuYXNzaWduZWRSZWNvcmQodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ3BheW1lbnRzJ10pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmdldFVucHJvY2Vzc2VkRmVlQ291bnQuZW1pdCgnMCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KCcwJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cbiAgc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHMpIHtcbiAgICB0aGlzLnVuYXNzaWduZWRSZWNvcmRMaXN0ID0gdW5hc3NpZ25lZFBheW1lbnRzLnBheW1lbnRzO1xuICAgIHRoaXMuc2VydmljZUlkID0gdW5hc3NpZ25lZFBheW1lbnRzLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgaWYgKHVuYXNzaWduZWRQYXltZW50c1snY2NkX3JlZmVyZW5jZSddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25DYXNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1JlY29yZEV4aXN0ID0gIHRoaXMudW5hc3NpZ25lZFJlY29yZExpc3QubGVuZ3RoID09PSAwO1xuICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KDxhbnk+dGhpcy51bmFzc2lnbmVkUmVjb3JkTGlzdC5sZW5ndGgpO1xuICB9XG4gIGZvcm1hdFVuYXNzaWduZWRSZWNvcmRJZChJRDogTnVtYmVyKSB7XG4gICAgcmV0dXJuIGB1bmFzc2lnbnJlY29yZC0ke0lEfWA7XG4gIH1cbiAgdHJpbVVuZGVyc2NvcmUobWV0aG9kOiBzdHJpbmcpe1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucmVtb3ZlVW53YW50ZWRTdHJpbmcobWV0aG9kLCcgJyk7XG4gIH1cbiAgcmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHVybCA9IHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgIHVybCArPSB0aGlzLmlzU3RGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICB1cmwgKz1gJmNhc2VUeXBlPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFfWA7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvZmVlLXNlYXJjaD9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9JmRjbj0ke3RoaXMucmVjb3JkSWR9JHt1cmx9YCk7XG4gIH1cbiAgbG9hZFVuc29saWNpdGVkUGFnZSh2aWV3TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gdmlld05hbWU7XG4gIH1cbiAgdW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2U6IGFueSkge1xuICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgdGhpcy52YWxpZGF0ZUJ1dHRvbnMoKTtcbiAgIHRoaXMuc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50LmVtaXQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2UpO1xuICB9XG4gIGdvVG9BbGxvY2F0ZVBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnVuUHJvY2Vzc2VkUGF5bWVudFNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUlkXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuSVNUVVJOT0ZGO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID0gdGhpcy5pc1N0Rml4RW5hYmxlO1xuXG4gICAgaWYoIXRoaXMuSVNUVVJOT0ZGKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5QQVlNRU5UUkVGO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gbnVsbDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdhbGxvY2F0ZS1wYXltZW50cyc7XG4gICAgfVxuXG4gIH1cblxuICB2YWxpZGF0ZUJ1dHRvbnMoKSB7XG4gIGlmICggdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgICYmIHRoaXMuaXNFeGNlcHRpb25DYXNlKSB7XG4gICAgICAgIHRoaXMuaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCAgJiYgIXRoaXMuaXNFeGNlcHRpb25DYXNlICYmICF0aGlzLkZFRV9SRUNPUkRTX0VYSVNUUykge1xuICAgICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiggdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgJiYgIXRoaXMuaXNFeGNlcHRpb25DYXNlICYmIHRoaXMuRkVFX1JFQ09SRFNfRVhJU1RTICkge1xuICAgICAgaWYoIXRoaXMuSVNUVVJOT0ZGKSB7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSB0aGlzLklTX09TX0FNVF9BVkFJTEFCTEU7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1bnByb2Nlc3NlZFBheW1lbnRVblNlbGVjdEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc01hcmtBc1VuaWRlbnRpZmllZGJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAvL3RoaXMudmFsaWRhdGVCdXR0b25zKCk7XG4gICAgdGhpcy5zZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQuZW1pdCgnJyk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtJUGF5bWVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYXBwLXByb2Nlc3NlZC1wYXltZW50cycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInByb2Nlc3NlZC1wYXltZW50cyBnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlByb2Nlc3NlZCBwYXltZW50czwvaDM+XG4gICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHByb2Nlc3NlZFJlY29yZCBvZiBOT05QQVlNRU5UU1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9QYXltZW50Vmlld1BhZ2UocHJvY2Vzc2VkUmVjb3JkLnBheW1lbnRHcm91cFJlZmVyZW5jZSwgcHJvY2Vzc2VkUmVjb3JkLnJlZmVyZW5jZSwgcHJvY2Vzc2VkUmVjb3JkLm1ldGhvZClcIj57e3Byb2Nlc3NlZFJlY29yZC5kb2N1bWVudF9jb250cm9sX251bWJlcn19PC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+IHt7cHJvY2Vzc2VkUmVjb3JkLmJhbmtlZF9kYXRlIHwgZGF0ZTonZGQgTU1NIHl5eXknfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3twcm9jZXNzZWRSZWNvcmQuYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXBpdGFsaXplIGdvdnVrLXRhYmxlX19jZWxsXCI+IHt7IHRyaW1VbmRlcnNjb3JlKHByb2Nlc3NlZFJlY29yZC5tZXRob2QpIHwgbG93ZXJjYXNlfX0gIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXBpdGFsaXplIGdvdnVrLXRhYmxlX19jZWxsXCI+IHt7IHByb2Nlc3NlZFJlY29yZC5wYXltZW50X2FsbG9jYXRpb25bMF0gPyBwcm9jZXNzZWRSZWNvcmQucGF5bWVudF9hbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzIDogJy0nIH19ICA8L3RkPlxuXG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nSWY9XCJOT05QQVlNRU5UUy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjVcIj5cbiAgICAgICAgICAgICAgTm8gcHJvY2Vzc2VkIHBheW1lbnRzXG4gICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXplOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWBdXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoJ05PTlBBWU1FTlRTJykgTk9OUEFZTUVOVFM6IElQYXltZW50W107XG4gIEBPdXRwdXQoKSBnb1RvUGF5bWVudFZpZXdDb21wb25lbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlXG4gICAgKSB7IH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICB0cmltVW5kZXJzY29yZShtZXRob2Q6IHN0cmluZyl7XG4gICAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICAgIH1cbiAgICByZWRpcmVjdFRvUGF5bWVudFZpZXdQYWdlKHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZykge1xuICAgICAgdGhpcy5nb1RvUGF5bWVudFZpZXdDb21wb25lbnQuZW1pdCh7cGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50UmVmZXJlbmNlLCBwYXltZW50TWV0aG9kfSk7XG4gICAgfVxufVxuIiwiXG5leHBvcnQgY2xhc3MgSUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3Qge1xuICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiBhbnk7XG4gIHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBleHBsYW5hdGlvbjogc3RyaW5nO1xuICB1c2VyX25hbWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudF9yZWZlcmVuY2UgOiBzdHJpbmcsIHJlYXNvbj8gOiBzdHJpbmcsIGV4cGxhbmF0aW9uPyA6IHN0cmluZywgdXNlck5hbWU/IDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50X2FsbG9jYXRpb25fc3RhdHVzID0ge1xuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgbmFtZTogXCJBbGxvY2F0ZWRcIlxuICAgIH07XG4gICAgdGhpcy5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSA9IHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudF9yZWZlcmVuY2U9IHBheW1lbnRfcmVmZXJlbmNlO1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uID8gcmVhc29uIDogbnVsbDtcbiAgICB0aGlzLmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb24gPyBleHBsYW5hdGlvbiA6IG51bGw7XG4gICAgdGhpcy51c2VyX25hbWUgPSB1c2VyTmFtZSA/IHVzZXJOYW1lIDogbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7Q2FzZVRyYW5zYWN0aW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLnNlcnZpY2UnOyBcbmltcG9ydCB7QnVsa1NjYW5pbmdQYXltZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQge0lCU1BheW1lbnRzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lCU1BheW1lbnRzJztcbmltcG9ydCB7QWxsb2NhdGVQYXltZW50UmVxdWVzdH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7SUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWxsb2NhdGUtcGF5bWVudHMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJhbGxvY2F0ZS1wYXltZW50c1wiPlxuICA8ZGl2ICpuZ0lmPVwidmlld1N0YXR1cz09PSdtYWluRm9ybScgJiYgaXNUdXJuT2ZmXCI+XG4gICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdBTExPQ0FURVBBWU1FTlRTJz5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIiAqbmdJZj1cInBheW1lbnRSZWZcIj5cbiAgICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJnb3RvU3VtbWFyeVBhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYmFjay1saW5rXCI+QmFjazwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvb2w+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWhlYWRpbmctc2VjdGlvblwiPlxuICAgICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy14bFwiPkFsbG9jYXRlIHBheW1lbnQgdG8gZmVlIGdyb3VwPC9oMT5cbiAgICAgIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPkFtb3VudCBsZWZ0IHRvIGJlIGFsbG9jYXRlZDpcbiAgICAgICAge3sgdW5BbGxvY2F0ZWRQYXltZW50LmFtb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC9oMj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1ncm91cC1zZWN0aW9uXCIgKm5nRm9yPVwibGV0IHBheW1lbnRHcm91cCBvZiBwYXltZW50R3JvdXBzXCI+XG4gICAgICA8aDMgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLW1cIj5Hcm91cCByZWZlcmVuY2U6IHt7cGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlfX08L2gzPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Hcm91cCBhbW91bnQgb3V0c3RhbmRpbmc8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXM7ICBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDEgZ292dWstdGFibGVfX2N1c3RvbS0tY29sMVwiXG4gICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoXCIgKm5nSWY9XCJpPT0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aXBsZS1jaG9pY2VcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ1bnBhaWVkRmVlLXt7aX19XCIgbmFtZT1cInVuYXNzaWduZWRSZWNvcmRcIiB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkUGF5bWVudEdyb3VwKHBheW1lbnRHcm91cClcIiAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ1bnBhaWVkRmVlLXt7aX19XCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDFcIj57e2ZlZS5jb2RlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDJcIj4ge3tmZWUuZGVzY3JpcHRpb259fSA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDNcIj4ge3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w0XCI+XG4gICAgICAgICAgICAgIHt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w1XCI+XG4gICAgICAgICAgICAgIHt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w2IGdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDZcIlxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwiaT09MFwiPlxuICAgICAgICAgICAgICB7e2dldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGg9PTBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLWdyb3VwLWFsbG9jYXRlXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgW2Rpc2FibGVkXT1cImlzQ29udGludWVCdXR0b25kaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJzYXZlQW5kQ29udGludWUoKVwiPlxuICAgICAgICBDb250aW51ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih2aWV3U3RhdHVzID09PSAnbWFpbkZvcm0nICYmICFpc1R1cm5PZmYpIHx8IHZpZXdTdGF0dXMgPT09ICdhbGxvY2F0ZVBheW1lbnRDb25maXJtYXRpb24nXCI+XG4gICAgPGNjcGF5LWVycm9yLWJhbm5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiPjwvY2NwYXktZXJyb3ItYmFubmVyPlxuICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0ne3tmZWVkYmFja1VybExhYmVsfX0nPlxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5Db25maXJtIGFzc29jaWF0aW9uPC9oMT5cbiAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWwgZ292dWstaGVhZGluZy1sLS1jdXN0b21cIj5cbiAgICAgIEFtb3VudCB0byBiZSBhbGxvY2F0ZWQ6IHt7YW1vdW50Rm9yQWxsb2NhdGlvbiB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX1cbiAgICA8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWdyb3VwLXNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cFwiPlxuICAgICAgPGgzIGNsYXNzPVwiZ292dWstaGVhZGluZy1tLS1jdXN0b21cIiAqbmdJZj1cImlzVHVybk9mZlwiPkdyb3VwIHJlZmVyZW5jZToge3twYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2V9fVxuICAgICAgPC9oMz5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgRHVlPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgZmVlIG9mIHBheW1lbnRHcm91cC5mZWVzOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDFcIj57e2ZlZS5jb2RlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDJcIj4ge3tmZWUuZGVzY3JpcHRpb259fSA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDNcIj4ge3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w0XCI+XG4gICAgICAgICAgICAgIHt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w1XCI+XG4gICAgICAgICAgICAgIHt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fSA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDZcIiBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaT09MFwiPiB7e2FmdGVyRmVlQWxsb2NhdGVPdXRzdGFuZGluZyB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0gPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCIgKm5nSWY9XCJpc1JlbWFpbmluZ0Ftb3VudEd0WmVybyB8fCBpc1JlbWFpbmluZ0Ftb3VudEx0WmVybyB8fCByZW1haW5pbmdBbW91bnQgPT09IDBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHQgZ292dWstd2FybmluZy10ZXh0X19jdXN0b21cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2Fzc2lzdGl2ZVwiPldhcm5pbmc8L3NwYW4+XG4gICAgICAgIHt7cGF5bWVudFNlY3Rpb25MYWJlbC50aXRsZX19IHt7IHJlbWFpbmluZ0Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRHdFplcm8gfHwgaXNSZW1haW5pbmdBbW91bnRMdFplcm9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtaGludFwiPlxuICAgICAgICAgIDxzcGFuIGlkPVwiaG93LWNvbnRhY3RlZC1jb25kaXRpb25hbC1oaW50XCIgY2xhc3M9XCJnb3Z1ay1oaW50XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLW1lc3NhZ2UnOiBwYXltZW50UmVhc29uSGFzRXJyb3J9XCI+XG4gICAgICAgICAgICB7e3BheW1lbnRTZWN0aW9uTGFiZWwucmVhc29ufX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwicGF5bWVudFJlYXNvbkhhc0Vycm9yID8gJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsIGZvcm0tZ3JvdXAtZXJyb3InIDogJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsJ1wiXG4gICAgICAgICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRHdFplcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgcmVhc29uIG9mIHJlYXNvbkxpc3Qub3ZlclBheW1lbnQgfCBrZXlWYWx1ZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJ7e3JlYXNvbi5rZXl9fVwiIG5hbWU9XCJwYXltZW50UmVhc29uXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBheW1lbnRSZWFzb25cIiB2YWx1ZT17e3JlYXNvbi52YWx1ZX19PlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWZvbnRfX2N1c3RvbVwiIGZvcj1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICB7e3JlYXNvbi52YWx1ZX19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJwYXltZW50UmVhc29uSGFzRXJyb3IgPyAnZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWwgZm9ybS1ncm91cC1lcnJvcicgOiAnZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWwnXCJcbiAgICAgICAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCIgKm5nSWY9XCJpc1JlbWFpbmluZ0Ftb3VudEx0WmVyb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCByZWFzb24gb2YgcmVhc29uTGlzdC5zaG9ydEZhbGwgfCBrZXlWYWx1ZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJ7e3JlYXNvbi5rZXl9fVwiIG5hbWU9XCJwYXltZW50UmVhc29uXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBheW1lbnRSZWFzb25cIiB2YWx1ZT17e3JlYXNvbi52YWx1ZX19PlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWZvbnRfX2N1c3RvbVwiIGZvcj1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICB7e3JlYXNvbi52YWx1ZX19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiZ292dWstZmllbGRzZXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiaG93LWNvbnRhY3RlZC1jb25kaXRpb25hbC1oaW50XCI+XG4gICAgICAgICAgPHNwYW4gaWQ9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsLWhpbnRcIiBjbGFzcz1cImdvdnVrLWhpbnRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItbWVzc2FnZSc6IHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yfVwiPlxuICAgICAgICAgICAgUHJvdmlkZSBhbiBleHBsYW5hdG9yeSBub3RlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yID8gJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsIGZvcm0tZ3JvdXAtZXJyb3InIDogJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsJ1wiXG4gICAgICAgICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRHdFplcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgZXhwbGFuYXRpb24gb2YgZXhwbGFuYXRpb25MaXN0Lm92ZXJQYXltZW50IHwga2V5VmFsdWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwie3tleHBsYW5hdGlvbi5rZXl9fVwiIG5hbWU9XCJwYXltZW50RXhwbGFuYXRpb25cIiB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGF5bWVudEV4cGxhbmF0aW9uXCIgdmFsdWU9e3tleHBsYW5hdGlvbi52YWx1ZX19XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJhZGlvQnV0dG9uKGV4cGxhbmF0aW9uLmtleSwgJ2V4cGxhbmF0aW9uJylcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1mb250X19jdXN0b21cIiBmb3I9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAge3tleHBsYW5hdGlvbi52YWx1ZX19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yID8gJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsIGZvcm0tZ3JvdXAtZXJyb3InIDogJ2dvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsJ1wiXG4gICAgICAgICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRMdFplcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgZXhwbGFuYXRpb24gb2YgZXhwbGFuYXRpb25MaXN0LnNob3J0RmFsbCB8IGtleVZhbHVlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cInt7ZXhwbGFuYXRpb24ua2V5fX1cIiBuYW1lPVwicGF5bWVudEV4cGxhbmF0aW9uXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBheW1lbnRFeHBsYW5hdGlvblwiIHZhbHVlPXt7ZXhwbGFuYXRpb24udmFsdWV9fVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYWRpb0J1dHRvbihleHBsYW5hdGlvbi5rZXksICdleHBsYW5hdGlvbicpXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstZm9udF9fY3VzdG9tXCIgZm9yPVwiaG93LWNvbnRhY3RlZC1jb25kaXRpb25hbFwiPlxuICAgICAgICAgICAgICAgIHt7ZXhwbGFuYXRpb24udmFsdWV9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwib3ZlclVuZGVyUGF5bWVudEZvcm1cIiBub3ZhbGlkYXRlPlxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJpc01vcmVEZXRhaWxzQm94SGlkZSA/ICdnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsIGdvdnVrLXJhZGlvc19fY29uZGl0aW9uYWwtLWhpZGRlbicgOiBpc1BheW1lbnREZXRhaWxzRW1wdHkgfHwgaXNQYXltZW50RGV0YWlsc0ludmFsaWQgfHwgcGF5bWVudERldGFpbHNNaW5IYXNFcnJvciB8fCBwYXltZW50RGV0YWlsc01heEhhc0Vycm9yID8gJ2dvdnVrLXJhZGlvc19fY29uZGl0aW9uYWwgaW5saW5lLWVycm9yLWJvcmRlcicgOiAnZ292dWstcmFkaW9zX19jb25kaXRpb25hbCdcIlxuICAgICAgICBpZD1cImNvbmRpdGlvbmFsLWhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxzcGFuIGlkPVwibW9yZS1kZXRhaWwtaGludFwiIGNsYXNzPVwiZ292dWstaGludCBnb3Z1ay1mb250X19jdXN0b21cIj5cbiAgICAgICAgICAgIFBsZWFzZSBlbnRlciBkZXRhaWxzXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImdvdnVrLXRleHRhcmVhXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNQYXltZW50RGV0YWlsc0VtcHR5IHx8IGlzUGF5bWVudERldGFpbHNJbnZhbGlkIHx8IHBheW1lbnREZXRhaWxzTWluSGFzRXJyb3IgfHwgcGF5bWVudERldGFpbHNNYXhIYXNFcnJvcn1cIlxuICAgICAgICAgICAgaWQ9XCJtb3JlRGV0YWlsc1wiIG5hbWU9XCJtb3JlRGV0YWlsc1wiIHJvd3M9XCI1XCIgZm9ybUNvbnRyb2xOYW1lPVwibW9yZURldGFpbHNcIj5cbiAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc1BheW1lbnREZXRhaWxzRW1wdHkgfHwgaXNQYXltZW50RGV0YWlsc0ludmFsaWQgfHwgcGF5bWVudERldGFpbHNNaW5IYXNFcnJvciB8fCBwYXltZW50RGV0YWlsc01heEhhc0Vycm9yXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGF5bWVudERldGFpbHNFbXB0eVwiPkVudGVyIGEgZXhwbGFuYXRpb248L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGF5bWVudERldGFpbHNJbnZhbGlkXCI+RW50ZXIgYSB2YWxpZCBleHBsYW5hdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGF5bWVudERldGFpbHNNaW5IYXNFcnJvclwiPkV4cGxhbmF0aW9uIHNob3VsZCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYXltZW50RGV0YWlsc01heEhhc0Vycm9yXCI+RXhwbGFuYXRpb24gc2hvdWxkIGJlIDI1NSBjaGFyYWN0ZXJzIG9yIHVuZGVyLjwvc3Bhbj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLS1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiaXNDb25maXJtQnV0dG9uZGlzYWJsZWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID8gJ2J1dHRvbiBidXR0b24tLWRpc2FibGVkJyA6ICdidXR0b24nXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFsbG9jYXRlUGF5ZW1lbnQoKVwiPlxuICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbEFsbG9jYXRlUGF5bWVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AuYWxsb2NhdGUtcGF5bWVudHN7bWFyZ2luOjIwcHggMH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2wxLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDN7d2lkdGg6MTAlfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDIsLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sNnt3aWR0aDoyNSV9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sNCwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2w1e3dpZHRoOjE1JX0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWJ1dHRvbi1ncm91cC1hbGxvY2F0ZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1idXR0b24tLXNlY29uZGFyeXttYXJnaW4tbGVmdDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2IzYjhiZGYyfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstY3VzdG9tLXdhcm5pbmdfX21lc3NhZ2V7Zm9udC1zaXplOjMwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOjEycHg7Zm9udC13ZWlnaHQ6NzAwfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstd2FybmluZy10ZXh0LWN1c3RvbXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50O3BhZGRpbmc6MTBweCAwIDVweH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDF7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbToyMHB4O3BhZGRpbmctbGVmdDoxNXB4fS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2N1c3RvbS0tY29sNnt0ZXh0LWFsaWduOmNlbnRlcn0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWxpc3RfX2N1c3RvbXtwYWRkaW5nLWxlZnQ6MjBweH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWZvbnRfX2N1c3RvbSwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWhlYWRpbmctbS0tY3VzdG9tLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstaGludCwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWxhYmVsLS1tLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstbGlzdF9fY3VzdG9tLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstcmFkaW9zX19pdGVtLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstd2FybmluZy10ZXh0X19jdXN0b217Zm9udC1zaXplOjE5cHh9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsLS1oaWRkZW57ZGlzcGxheTpub25lfS5hbGxvY2F0ZS1wYXltZW50cyAuZm9ybS1ncm91cC1lcnJvcntib3JkZXItbGVmdDo1cHggc29saWQgI2IxMGUxZTtwYWRkaW5nLWxlZnQ6MTVweH0uYWxsb2NhdGUtcGF5bWVudHMgLmlubGluZS1lcnJvci1jbGFzc3tvdXRsaW5lOiNhNzE0MTQgc29saWQgM3B4O291dGxpbmUtb2Zmc2V0OjB9LmFsbG9jYXRlLXBheW1lbnRzIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9LmFsbG9jYXRlLXBheW1lbnRzIC5pbmxpbmUtZXJyb3ItYm9yZGVye2JvcmRlci1jb2xvcjojYTcxNDE0fWBdXG59KVxuZXhwb3J0IGNsYXNzIEFsbG9jYXRlUGF5bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG5cbiAgb3ZlclVuZGVyUGF5bWVudEZvcm06IEZvcm1Hcm91cDtcbiAgdmlld1N0YXR1czogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICBmZWVkYmFja1VybExhYmVsOnN0cmluZztcbiAgdW5BbGxvY2F0ZWRQYXltZW50OiBJQlNQYXltZW50cyA9IHtcbiAgICBhbW91bnQ6IDBcbiAgfTtcbiAgc2l0ZUlEOiBzdHJpbmcgPSBudWxsO1xuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcdFxuICByZW1haW5pbmdBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1haW5pbmdBbW91bnRHdFplcm86IGJvb2xlYW47XG4gIGlzTW9yZURldGFpbHNCb3hIaWRlOiBib29sZWFuICA9IHRydWU7XG4gIGlzUmVtYWluaW5nQW1vdW50THRaZXJvOiBib29sZWFuO1xuICBhZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmc6IG51bWJlcjtcbiAgYW1vdW50Rm9yQWxsb2NhdGlvbjogbnVtYmVyO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBvdGhlclBheW1lbnRFeHBsYW5hdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlO1x0XG5cbiAgcGF5bWVudFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudERldGFpbHNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREZXRhaWxzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RGV0YWlsc01pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVc2VyTmFtZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzVXNlck5hbWVJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIGNjZFJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgZXhjZXB0aW9uUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50UmVhc29uOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50RXhwbGFuYXRpb246IHN0cmluZyA9IG51bGw7XG4gIHVzZXJOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50U2VjdGlvbkxhYmVsOiBhbnk7XG4gIHBheW1lbnRSZWY6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgY29va2llVXNlck5hbWU6IHN0cmluZ1tdID0gW107XG4gIGVuQ29va2llVXNlck5hbWU6IGFueTtcbiAgdXNlck5hbWVGaWVsZDogc3RyaW5nID0gbnVsbDtcblxuICByZWFzb25MaXN0OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfT0ge1xuICAgIG92ZXJQYXltZW50OiB7XG4gICAgICBod2ZSZXdhcmQ6ICdIZWxwIHdpdGggRmVlcyAoSFdGKSBhd2FyZGVkLiAgUGxlYXNlIGluY2x1ZGUgdGhlIEhXRiByZWZlcmVuY2UgbnVtYmVyIGluIHRoZSBleHBsYW5hdG9yeSBub3RlJyxcbiAgICAgIHdyb25nRmVlOiAnSW5jb3JyZWN0IHBheW1lbnQgcmVjZWl2ZWQnLFxuICAgICAgbm90SXNzdWVDYXNlOiAnVW5hYmxlIHRvIGlzc3VlIGNhc2UnLFxuICAgICAgb3RoZXJEZWR1Y3Rpb246ICdPdGhlcidcbiAgICB9LFxuICAgIHNob3J0RmFsbDoge1xuICAgICAgaGVscFdpdGhGZWU6ICdIZWxwIHdpdGggRmVlcyAoSFdGKSBhcHBsaWNhdGlvbiBkZWNsaW5lZCcsXG4gICAgICB3cm9uZ0ZlZTogJ0luY29ycmVjdCBwYXltZW50IHJlY2VpdmVkJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG4gIGV4cGxhbmF0aW9uTGlzdCA9IHtcbiAgICBvdmVyUGF5bWVudDoge1xuICAgICAgcmVmZXJSZWZ1bmQ6ICdEZXRhaWxzIGluIGNhc2Ugbm90ZXMuICBSZWZ1bmQgZHVlJyxcbiAgICAgIG5vUmVmdW5kOiAnRGV0YWlscyBpbiBjYXNlIG5vdGVzLiBObyByZWZ1bmQgZHVlJyxcbiAgICAgIG5vQ2FzZTogJ05vIGNhc2UgY3JlYXRlZC4gIFJlZnVuZCBkdWUnLFxuICAgICAgb3RoZXI6ICdPdGhlcidcbiAgICB9LFxuICAgIHNob3J0RmFsbDoge1xuICAgICAgaG9sZENhc2U6ICdJIGhhdmUgcHV0IGEgc3RvcCBvbiB0aGUgY2FzZSBhbmQgY29udGFjdGVkIHRoZSBhcHBsaWNhbnQgcmVxdWVzdGluZyB0aGUgYmFsYW5jZSBvZiBwYXltZW50JyxcbiAgICAgIGhlbGRDYXNlOiAnSSBoYXZlIHB1dCBhIHN0b3Agb24gdGhlIGNhc2UuICBUaGUgYXBwbGljYW50IG5lZWRzIHRvIGJlIGNvbnRhY3RlZCB0byByZXF1ZXN0IHRoZSBiYWxhbmNlIG9mIHBheW1lbnQnLFxuICAgICAgb3RoZXI6ICdPdGhlcidcbiAgICB9XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gIHByaXZhdGUgY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2U6IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLFxuICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5wYXltZW50UmVmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmO1xuICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIG1vcmVEZXRhaWxzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpXG4gICAgICBdKSksXG4gICAgICB1c2VyTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzXSopJCcpXG4gICAgICBdKSksXG4gICAgfSk7XG4gICAgdGhpcy5nZXRVbmFzc2lnbmVkUGF5bWVudCgpO1xuICB9XG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICBnZXRQYXltZW50R3JvdXBEZXRhaWxzKCl7XG5cbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRSZWYpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwICA9IHBheW1lbnRHcm91cDtcbiAgICAgICAgICB0aGlzLnNhdmVBbmRDb250aW51ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ10uZmlsdGVyKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGlmKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmc3RDb24gPSB0aGlzLmdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQoPElQYXltZW50R3JvdXA+cGF5bWVudEdyb3VwKSxcbiAgICAgICAgICAgIHNjbmRDbiA9IGZzdENvbiA+IDAgfHwgKGZzdENvbiA9PSAwICYmIHRoaXMuaXNGZWVBbW91bnRaZXJvKSAmJiBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPT09IHRoaXMucGF5bWVudFJlZjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBheW1lbnRSZWYgPyAgc2NuZENuIDogZnN0Q29uID4gMCB8fCAoZnN0Q29uID09IDAgJiYgdGhpcy5pc0ZlZUFtb3VudFplcm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBzZWxlY3RlZFBheW1lbnRHcm91cChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApIHtcdFxuICAgIHRoaXMuaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XHRcbiAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcdFxuICB9XHRcblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG5cbiAgZ290b1N1bW1hcnlQYWdlKGV2ZW50OiBhbnkpIHsgXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgfVxuXG4gIGNhbmNlbEFsbG9jYXRlUGF5bWVudChldmVudDogYW55KXtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbkZvcm0nO1x0XG4gICAgfVxuICB9XG4gIGNvbmZpcm1BbGxvY2F0ZVBheWVtZW50KCl7XG4gICAgdGhpcy5lbkNvb2tpZVVzZXJOYW1lID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKHJvdyA9PiByb3cuaW5jbHVkZXMoXCJ1c2VyLWluZm9cIikpLnNwbGl0KFwiPVwiKVsxXS5zcGxpdChcIjtcIik7XG4gICAgdGhpcy5jb29raWVVc2VyTmFtZSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW5Db29raWVVc2VyTmFtZSkpO1xuICAgIFxuICAgIGNvbnN0IGZ1bGxOYW1lID0gdGhpcy5jb29raWVVc2VyTmFtZVsnZm9yZW5hbWUnXSArICcgJyArIHRoaXMuY29va2llVXNlck5hbWVbJ3N1cm5hbWUnXTtcblxuICAgIGNvbnN0IHBheW1lbnREZXRhaWxzRmllbGQgPSB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmNvbnRyb2xzLm1vcmVEZXRhaWxzLFxuICAgICAgcGF5bWVudEZvcm1FcnJvciA9IHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uY29udHJvbHMubW9yZURldGFpbHMuZXJyb3JzLFxuICAgICAgdXNlck5hbWVGaWVsZCA9IGZ1bGxOYW1lLFxuICAgICAgaXNFbXB0eUNvbmR0aW9uID0gdGhpcy5wYXltZW50UmVhc29uICYmIHRoaXMucGF5bWVudEV4cGxhbmF0aW9uLFxuICAgICAgaXNPdGhlck9wdGlvblNlbGVjdGVkID0gdGhpcy5wYXltZW50RXhwbGFuYXRpb24gPT09ICdPdGhlcic7XG5cbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FsbCcpO1xuICAgIGlmICggKCF0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvICYmICF0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvKSB8fCBpc0VtcHR5Q29uZHRpb24gJiYgKCFpc090aGVyT3B0aW9uU2VsZWN0ZWQgJiYgdXNlck5hbWVGaWVsZC5sZW5ndGggPiAwIHx8IGlzT3RoZXJPcHRpb25TZWxlY3RlZCAmJiB1c2VyTmFtZUZpZWxkLmxlbmd0aCA+IDAgJiYgcGF5bWVudERldGFpbHNGaWVsZC52YWxpZCkpIHtcbiAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vdGhlclBheW1lbnRFeHBsYW5hdGlvbiA9IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID09PSAnT3RoZXInID8gcGF5bWVudERldGFpbHNGaWVsZC52YWx1ZSA6IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uO1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lRmllbGQ7XG4gICAgICB0aGlzLmZpbmFsU2VydmljZUNhbGwoKTtcbiAgICB9ZWxzZSB7XG4gICAgICBpZighdGhpcy5wYXltZW50UmVhc29uKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKCF0aGlzLnBheW1lbnRFeHBsYW5hdGlvbikge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnZXhwbGFuYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMucGF5bWVudEV4cGxhbmF0aW9uICYmIGlzT3RoZXJPcHRpb25TZWxlY3RlZCkge1xuICAgICAgICBpZihwYXltZW50RGV0YWlsc0ZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnREZXRhaWxzRmllbGQudmFsdWUgIT0gJycgJiYgcGF5bWVudERldGFpbHNGaWVsZC5pbnZhbGlkICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnRGb3JtRXJyb3IgJiYgcGF5bWVudEZvcm1FcnJvci5taW5sZW5ndGggJiYgcGF5bWVudEZvcm1FcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwYXltZW50Rm9ybUVycm9yICYmIHBheW1lbnRGb3JtRXJyb3IubWF4bGVuZ3RoICYmIHBheW1lbnRGb3JtRXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodXNlck5hbWVGaWVsZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ3VzZXJuYW1lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWxzLCBmaWVsZCkge1xuICAgIGlmKGZpZWxkPT09J3JlYXNvbicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5wYXltZW50UmVhc29uSGFzRXJyb3IgPSB2YWxzWzBdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdleHBsYW5hdGlvbicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5wYXltZW50RXhwbGFuYXRpb25IYXNFcnJvciA9IHZhbHNbMV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J290aGVyJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUGF5bWVudERldGFpbHNFbXB0eSA9IHZhbHNbMl07XG4gICAgICB0aGlzLmlzUGF5bWVudERldGFpbHNJbnZhbGlkID0gdmFsc1szXTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNaW5IYXNFcnJvciA9IHZhbHNbNF07XG4gICAgICB0aGlzLnBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3IgPSB2YWxzWzVdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSd1c2VybmFtZScgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc1VzZXJOYW1lRW1wdHkgPSB2YWxzWzZdO1xuICAgICAgdGhpcy5pc1VzZXJOYW1lSW52YWxpZCA9IHZhbHNbN107XG4gICAgfVxuICB9XG4gIGZpbmFsU2VydmljZUNhbGwoKSB7XG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICByZWFzb246IHRoaXMucGF5bWVudFJlYXNvbixcbiAgICAgICAgYWxsb2NhdGlvbl9zdGF0dXM6J0FsbG9jYXRlZCcsXG4gICAgICAgIGV4cGxhbmF0aW9uOiB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uLFxuICAgICAgICBwYXltZW50X2FsbG9jYXRpb25fc3RhdHVzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIG5hbWU6ICdBbGxvY2F0ZWQnXG4gICAgICAgIH0sXG4gICAgICAgIHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSxcbiAgICAgICAgY2FzZV90eXBlOiB0aGlzLmNhc2VUeXBlLFxuICAgICAgICB1c2VyX25hbWU6IHRoaXMudXNlck5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc3RTdHJhdGVnaWNCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICh0aGlzLmNjZFJlZmVyZW5jZSwgdGhpcy51bkFsbG9jYXRlZFBheW1lbnQsIHRoaXMuY2FzZVR5cGUsIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlLCBhbGxvY2F0ZWRSZXF1ZXN0KTtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNQYXltZW50U3RyYXRlZ2ljKHBvc3RTdHJhdGVnaWNCb2R5ICwgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGxldCByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIGxldCByZXNwb25zZTEgPSBKU09OLnBhcnNlKHJlczEpO1xuICAgICAgICBpZiAocmVzcG9uc2UxLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudCwgdGhpcy5zaXRlSUQsIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucG9zdEJTQWxsb2NhdGVQYXltZW50KHJlcXVlc3RCb2R5LCB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzMiA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgICAgIGxldCByZXNwb25zZTIgPSBKU09OLnBhcnNlKHJlczIpO1xuICAgICAgICAgICAgICBjb25zdCByZXFCb2R5ID0gbmV3IElBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0XG4gICAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCB0aGlzLnBheW1lbnRSZWFzb24sIHRoaXMub3RoZXJQYXltZW50RXhwbGFuYXRpb24sIHRoaXMudXNlck5hbWUpO1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0QlNBbGxvY2F0aW9uUGF5bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKFxuICBcbiAgICAgICAgICAgICAgICByZXMzID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UzID0gSlNPTi5wYXJzZShyZXMzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bkFsbG9jYXRlZFBheW1lbnQuZGNuX3JlZmVyZW5jZSwgJ0NPTVBMRVRFJykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7ICBcbiAgfVxuICB9XG5cbiAgc2F2ZUFuZENvbnRpbnVlKCl7XG4gICAgaWYodGhpcy5wYXltZW50R3JvdXApIHtcbiAgICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ21vcmVEZXRhaWxzJykucmVzZXQoKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCdtb3JlRGV0YWlscycpLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCd1c2VyTmFtZScpLnJlc2V0KCk7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgndXNlck5hbWUnKS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb24gPSAnJztcbiAgICAgIHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID0gJyc7XG4gICAgICBsZXQgR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA9IHRoaXMuZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudCh0aGlzLnBheW1lbnRHcm91cCk7XG4gICAgICBjb25zdCByZW1haW5pbmdUb0JlQXNzaWduZWQgPSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgLSBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyA9IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCA+IDA7XG4gICAgICB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID0gcmVtYWluaW5nVG9CZUFzc2lnbmVkIDwgMDtcbiAgICAgIHRoaXMucGF5bWVudFNlY3Rpb25MYWJlbCA9IHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyB7IFxuICAgICAgICAgIHRpdGxlOiAnVGhlcmUgaXMgYW4gT3ZlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uLiBUaGlzIHdpbGwgYmUgdXNlZCBpbiB0aGUgUmVmdW5kIHByb2Nlc3MuJyxcbiAgICAgICAgfTogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/IHsgXG4gICAgICAgICAgdGl0bGU6ICdUaGVyZSBpcyBhbiBVbmRlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uJyxcbiAgICAgICAgfTogeyBcbiAgICAgICAgICB0aXRsZTonQW1vdW50IGxlZnQgdG8gYmUgYWxsb2NhdGVkJyxcbiAgICAgICAgICByZWFzb246JycsXG4gICAgICAgIH07XG4gICAgICB0aGlzLmZlZWRiYWNrVXJsTGFiZWwgPSB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8gJ0NPTkZJUk1BTExPQ0FUSU9OX1NVUlBMVVMnIDogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/ICdDT05GSVJNQUxMT0NBVElPTl9TSE9SVEZBTEwnIDogJ0NPTkZJUk1BTExPQ0FUSU9OJztcbiAgICAgIHRoaXMucmVtYWluaW5nQW1vdW50ID0gIHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyByZW1haW5pbmdUb0JlQXNzaWduZWQgOiB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID8gcmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEgOiAwO1xuICAgICAgdGhpcy5hZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmcgPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPj0gMCA/IDAgOiAocmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEpO1xuICAgICAgdGhpcy5hbW91bnRGb3JBbGxvY2F0aW9uID0gR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA+PSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgPyB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgOiBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWxsb2NhdGVQYXltZW50Q29uZmlybWF0aW9uJztcdFxuICAgICAgfVxuICAgIH1cbiAgfVxuICAgZ2V0VW5hc3NpZ25lZFBheW1lbnQoKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLmJzcGF5bWVudGRjbikuc3Vic2NyaWJlKFxuICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy51bkFsbG9jYXRlZFBheW1lbnQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cy5maWx0ZXIocGF5bWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgIGJlRXhjZXB0aW9uTnVtYmVyID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UsXG4gICAgICAgIGV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgPT09IHRoaXMuY2NkQ2FzZU51bWJlciA/IG51bGwgOiB0aGlzLmNjZENhc2VOdW1iZXIgOiB0aGlzLmNjZENhc2VOdW1iZXI7XG4gICAgICAgdGhpcy5jY2RSZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyIDogbnVsbDtcbiAgICAgICB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlRXhjZXB0aW9uTnVtYmVyID8gYmVFeGNlcHRpb25OdW1iZXIgOiBleGNlcHRpb25SZWZlcmVuY2U7XG4gICAgICAgdGhpcy5nZXRQYXltZW50R3JvdXBEZXRhaWxzKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB0eXBlKSB7XG4gICAgdGhpcy5pc01vcmVEZXRhaWxzQm94SGlkZSA9IHRydWU7XG4gICAgaWYoIHR5cGUgPT09ICdleHBsYW5hdGlvbicgJiYga2V5ID09PSAnb3RoZXInICl7XG4gICAgICB0aGlzLmlzUGF5bWVudERldGFpbHNFbXB0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01pbkhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElGZWUgfSBmcm9tICcuL0lGZWUnO1xuXG5leHBvcnQgY2xhc3MgQWRkUmVtaXNzaW9uUmVxdWVzdCB7XG4gIGJlbmVmaWNpYXJ5X25hbWU6IHN0cmluZztcbiAgY2NkX2Nhc2VfbnVtYmVyOiBzdHJpbmc7XG4gIGZlZTogSUZlZTtcbiAgaHdmX2Ftb3VudDogbnVtYmVyO1xuICBod2ZfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmc7XG4gIGNhc2VfdHlwZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNjZF9jYXNlX251bWJlcjogc3RyaW5nLCBmZWU6IElGZWUsIGh3Zl9hbW91bnQ6IG51bWJlciwgaHdmX3JlZmVyZW5jZTogc3RyaW5nLCBjYXNlVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jY2RfY2FzZV9udW1iZXIgPSBjY2RfY2FzZV9udW1iZXI7XG4gICAgdGhpcy5mZWUgPSBmZWU7XG4gICAgdGhpcy5od2ZfYW1vdW50ID0gaHdmX2Ftb3VudDtcbiAgICB0aGlzLmh3Zl9yZWZlcmVuY2UgPSBod2ZfcmVmZXJlbmNlO1xuICAgIHRoaXMuY2FzZV90eXBlID0gY2FzZVR5cGU7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkZFJlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1hZGQtcmVtaXNzaW9uJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiYWRkLXJlbWlzc2lvblwiPlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBFcnJvciBpbiBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cbiAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQUREUkVNSVNTSU9OJz5cbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5BZGQgcmVtaXNzaW9uPC9oMT5cbiAgICAgIDxmb3JtIG5vdmFsaWRhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJyZW1pc3Npb25Gb3JtXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWxhYmVsLS1zXCIgZm9yPVwicmVtaXNzaW9uLWNvZGVcIj5cbiAgICAgICAgICAgICAgICAgIEFkZCByZW1pc3Npb24gdG8ge3sgZmVlLmNvZGUgfX06e3sgZmVlLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5FbnRlciByZW1pc3Npb24gZm9yIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGU6IEhXRi1BMUItMjNDPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItY2xhc3MnOiBpc1JlbWlzc2lvbkNvZGVFbXB0eSB8fCByZW1pc3Npb25Db2RlSGFzRXJyb3J9XCIgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay1pbnB1dC0td2lkdGgtMjAgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIGlkPVwicmVtaXNzaW9uQ29kZVwiIGFyaWEtbGFiZWw9XCJyZW1pc3Npb25Db2RlXCIgIG5hbWU9XCJyZW1pc3Npb25Db2RlXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW1pc3Npb25Db2RlXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzUmVtaXNzaW9uQ29kZUVtcHR5IHx8IHJlbWlzc2lvbkNvZGVIYXNFcnJvclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZW1pc3Npb25Db2RlRW1wdHlcIj5FbnRlciBhIHJlbWlzc2lvbiBjb2RlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtaXNzaW9uQ29kZUhhc0Vycm9yXCI+RW50ZXIgYSB2YWlsZCByZW1pc3Npb24gY29kZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1sYWJlbC0tc1wiIGZvcj1cImFtb3VudFwiPlxuICAgICAgICAgICAgICAgIEhvdyBtdWNoIGRvZXMgdGhlIGFwcGxpY2FudCBuZWVkIHRvIHBheT9cbiAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiYW1vdW50LWN1cnJlbmN5XCIgY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5pbiBwb3VuZHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtY3VycmVuY3ktaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtY3VycmVuY3ktaW5wdXRfX3N5bWJvbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsOCwqM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay1pbnB1dC0td2lkdGgtMTBcIiBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1jbGFzcyc6IGlzQW1vdW50RW1wdHkgfHwgYW1vdW50SGFzRXJyb3IgfHwgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yfVwiIGlkPVwiYW1vdW50XCIgYXJpYS1sYWJlbD1cImFtb3VudFwiICBuYW1lPVwiYW1vdW50XCIgdHlwZT1cInRleHRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiYW1vdW50LWN1cnJlbmN5XCIgZm9ybUNvbnRyb2xOYW1lPVwiYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNBbW91bnRFbXB0eSB8fCBhbW91bnRIYXNFcnJvciB8fCBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNBbW91bnRFbXB0eVwiPkVudGVyIGEgYW1vdW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhbW91bnRIYXNFcnJvclwiPkVudGVyIGEgdmFpbGQgYW1vdW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3JcIj5UaGUgcmVtaXNzaW9uIGFtb3VudCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgdG90YWwgZmVlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiYWRkUmVtaXNzaW9uKClcIj5cbiAgICAgICAgICAgICAgU3VibWl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ2NvbmZpcm1hdGlvbidcIj5cbiAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQUREUkVNSVNTSU9OQ09ORklSTUFUSU9OJz4gXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhZGQgcmVtaXNzaW9uIHRvIHRoaXMgZmVlP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVtaXNzaW9uIGNvZGU6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgcmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+RmVlIGNvZGU6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmNvZGUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5GZWUgZGVzY3JpcHRpb246PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+QW1vdW50IHRoZSBhcHBsaWNhbnQgbXVzdCBwYXk6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgIHJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlICB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFJlbWlzc2lvbi5lbWl0KClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZFwiXG4gICAgICBbbmdDbGFzc109J2lzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIidcbiAgICAgIChjbGljayk9XCJjb25maXJtUmVtaXNzaW9uKClcIj5cbiAgICAgICAgQ29uZmlybVxuICAgICAgPC9idXR0b24+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+XG5cbmAsXG4gIHN0eWxlczogW2AuYWRkLXJlbWlzc2lvbiAuYnV0dG9ue21hcmdpbjoyMHB4IDJweH0uYWRkLXJlbWlzc2lvbiB0ZC5nb3Z1ay10YWJsZV9fY2VsbHt3aWR0aDo1MCV9LmFkZC1yZW1pc3Npb24gLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6I2RlZTBlMjtib3gtc2hhZG93OjAgMnB4IDAgIzg1ODY4ODtjb2xvcjojMGIwYzBjO21hcmdpbi1yaWdodDouNWVtfS5hZGQtcmVtaXNzaW9uIC5nb3Z1ay1sYWJlbC0tcywuYWRkLXJlbWlzc2lvbiAuZ292dWstd2FybmluZy10ZXh0X190ZXh0LC5hZGQtcmVtaXNzaW9uIC5obWN0cy1jdXJyZW5jeS1pbnB1dF9fc3ltYm9se2ZvbnQtc2l6ZToxOXB4fS5hZGQtcmVtaXNzaW9uIC5pbmxpbmUtZXJyb3ItY2xhc3N7b3V0bGluZTojYTcxNDE0IHNvbGlkIDNweDtvdXRsaW5lLW9mZnNldDowfS5hZGQtcmVtaXNzaW9uIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgQWRkUmVtaXNzaW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZmVlOiBJRmVlO1xuICBASW5wdXQoKSBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBheW1lbnRHcm91cFJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2FuY2VsUmVtaXNzaW9uOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xuICBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgb3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuXG4gIGlzUmVtaXNzaW9uQ29kZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbkNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCcpXG4gICAgICBdKSksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKCkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlO1xuICAgIGlmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgJiYgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbGlkICYmIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjb25maXJtYXRpb24nO1xuICAgIH1lbHNlIHtcblxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkICYmICFpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0UmVtaXNzaW9uRm9ybSh2YWwsIGZpZWxkKXtcbiAgICBpZihmaWVsZD09PSdyZW1pc3Npb25Db2RlJyB8fCBmaWVsZD09PSdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uQ29kZUVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5yZW1pc3Npb25Db2RlSGFzRXJyb3IgPSB2YWxbMV07XG4gICAgfSBlbHNlIGlmIChmaWVsZD09PSdhbW91bnQnIHx8IGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFszXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzRdO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1pc3Npb24oKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBuZXdOZXRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlLFxuICAgICByZW1pc3Npb25BbW91bnQgPSB0aGlzLmZlZS5uZXRfYW1vdW50IC0gbmV3TmV0QW1vdW50LFxuICAgICByZXF1ZXN0Qm9keSA9IG5ldyBBZGRSZW1pc3Npb25SZXF1ZXN0XG4gICAgKHRoaXMuY2NkQ2FzZU51bWJlciwgdGhpcy5mZWUsIHJlbWlzc2lvbkFtb3VudCwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLnJlbWlzc2lvbkNvZGUudmFsdWUsIHRoaXMuY2FzZVR5cGUpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzKSB7XG4gICAgICAgICAgbGV0IExEVXJsID0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSdcbiAgICAgICAgICAgIExEVXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWBcbiAgICAgICAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9ZmVlLXN1bW1hcnkmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0mcGF5bWVudEdyb3VwUmVmPSR7dGhpcy5wYXltZW50R3JvdXBSZWZ9JmRjbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY259JHtMRFVybH1gKTtcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgZmVhdHVyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuXG4gICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9dHJ1ZSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQFBpcGUoe1xuICBuYW1lOiAnY2NkSHlwaGVucydcbn0pXG5leHBvcnQgY2xhc3MgQ2NkSHlwaGVuc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgYXJncz86IGFueSk6IGFueSB7XG4gICAgY29uc3QgcGF0dGVybiA9IC9eKFswLTldezR9KSsoWzAtOV17NH0pKyhbMC05XXs0fSkrKFswLTldezR9KSQvO1xuICAgIGlmICggdmFsdWUubWF0Y2gocGF0dGVybikpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sJyQxLSQyLSQzLSQ0JykgIFxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBQaXBlKHtcbiAgbmFtZTogJ2tleVZhbHVlJ1xufSlcbmV4cG9ydCBjbGFzcyBrZXlWYWx1ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICB0cmFuc2Zvcm0oaW5wdXQ6IGFueSk6IGFueSB7XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBmb3IgKGxldCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGtleXMucHVzaCh7IGtleToga2V5LCB2YWx1ZTogaW5wdXRba2V5XX0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AUGlwZSh7IG5hbWU6ICdzYW5pdGl6ZUh0bWwnIH0pXG5leHBvcnQgY2xhc3MgU2FuaXRpemVIdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgWExTWFN0eWxlIGZyb20gJ3hsc3gtc3R5bGUnO1xuXG5cbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgWGxGaWxlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCB3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0OyBcbiAgICBsZXQgd29ya2Jvb2s6IFhMU1guV29ya0Jvb2s7IFxuXG4gICAgaWYoZXhjZWxGaWxlTmFtZS5tYXRjaCgnRGF0YV9Mb3NzJykhPT0gbnVsbCl7XG4gICAgIHdvcmtzaGVldCA9ICBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbix7aGVhZGVyOlsnbG9zc19yZXNwJywncGF5bWVudF9hc3NldF9kY24nLCdlbnZfcmVmJywnZW52X2l0ZW0nLCdyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ2RhdGVfYmFua2VkJywnYmdjX2JhdGNoJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXREYXRhTG9zc1JlcG9ydEhlYWRlcnMod29ya3NoZWV0KTtcbiAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgIH0gZWxzZSBpZihleGNlbEZpbGVOYW1lLm1hdGNoKCdVbnByb2Nlc3NlZCcpIT09IG51bGwpe1xuICAgICB3b3Jrc2hlZXQgPSAgWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGpzb24se2hlYWRlcjpbJ3Jlc3Bfc2VydmljZV9pZCcsJ3Jlc3Bfc2VydmljZV9uYW1lJywnZXhjZXB0aW9uX3JlZicsJ2NjZF9yZWYnLCdkYXRlX2JhbmtlZCcsJ2JnY19iYXRjaCcsJ3BheW1lbnRfYXNzZXRfZGNuJywnZW52X3JlZicsJ2Vudl9pdGVtJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXRVbnByb2Nlc3NlZFJlcG9ydEhlYWRlcnMod29ya3NoZWV0KTtcbiAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgfSBlbHNlIGlmKGV4Y2VsRmlsZU5hbWUubWF0Y2goJ1Byb2Nlc3NlZF9VbmFsbG9jYXRlZCcpIT09IG51bGwpe1xuICAgICAgd29ya3NoZWV0ID0gIFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uLHtoZWFkZXI6WydyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ2FsbG9jYXRpb25fc3RhdHVzJywncmVjZWl2aW5nX29mZmljZScsJ2FsbG9jYXRpb25fcmVhc29uJywnY2NkX2V4Y2VwdGlvbl9yZWZlcmVuY2UnLCdjY2RfY2FzZV9yZWZlcmVuY2UnLCdwYXltZW50X2Fzc2V0X2RjbicsJ2Vudl9yZWYnLCdlbnZfaXRlbScsJ2RhdGVfYmFua2VkJywnYmdjX2JhdGNoJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICAgd29ya3NoZWV0ID0gIHRoaXMuc2V0UHJvY2Vzc2VkVW5hbGxvY2F0ZWRSZXBvcnRIZWFkZXJzKHdvcmtzaGVldCk7XG4gICAgICB3b3Jrc2hlZXQgPSB0aGlzLmF1dG9GaXRDb2x1bW5zKHdvcmtzaGVldCxqc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd29ya3NoZWV0ID0gIFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uLHtoZWFkZXI6WydyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ3N1cnBsdXNfc2hvcnRmYWxsJywnYmFsYW5jZScsJ3BheW1lbnRfYW1vdW50JywnY2NkX2Nhc2VfcmVmZXJlbmNlJywgJ2NjZF9leGNlcHRpb25fcmVmZXJlbmNlJywgJ3Byb2Nlc3NlZF9kYXRlJywgJ3JlYXNvbicsICdleHBsYW5hdGlvbicsICd1c2VyX25hbWUnXX0pO1xuICAgICAgd29ya3NoZWV0ID0gIHRoaXMuc2V0U2hvcnRGYWxsUmVwb3J0SGVhZGVycyh3b3Jrc2hlZXQpO1xuICAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgfVxuICAgIHdvcmtib29rID0geyBTaGVldHM6IHsgJ2RhdGEnOiB3b3Jrc2hlZXQgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcbiAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0gWExTWC53cml0ZSh3b3JrYm9vaywgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYXJyYXknIH0pO1xuICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCBleGNlbEZpbGVOYW1lKTtcbiAgfVxuXG5cbnByaXZhdGUgYXV0b0ZpdENvbHVtbnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQsanNvbjphbnkpIDogWExTWC5Xb3JrU2hlZXQge1xuICBsZXQgb2JqZWN0TWF4TGVuZ3RoID0gW107IFxuICBsZXQgQ29sV2lkdGggPSBbXTtcbiAgbGV0IG9iaiA9IDxhbnk+T2JqZWN0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwganNvbi5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHZhbHVlID0gb2JqLnZhbHVlcyhqc29uW2ldKTtcbiAgICAgIGxldCBrZXkgPSBvYmoua2V5cyhqc29uW2ldKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYodmFsdWVbal0gPT09IG51bGwpe1xuICAgICAgICAgIHZhbHVlW2pdID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0TWF4TGVuZ3RoW2pdID1cbiAgICAgICAgICBrZXlbal0ubGVuZ3RoID49IHZhbHVlW2pdLmxlbmd0aFxuICAgICAgICAgICAgPyBrZXlbal0ubGVuZ3RoKzJcbiAgICAgICAgICAgIDogdmFsdWVbal0ubGVuZ3RoKzE7XG4gICAgICAgICAgICBpZiggdmFsdWVbal0ubGVuZ3RoID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICBvYmplY3RNYXhMZW5ndGhbal0gPSAga2V5W2pdLmxlbmd0aCsyO1xuICAgICAgICAgICAgfVxuICAgICAgQ29sV2lkdGgucHVzaCh7J3dpZHRoJzogK29iamVjdE1heExlbmd0aFtqXX0pO1xuICAgICAgfVxuICAgIH1cbiAgICB3b3Jrc2hlZXRbJyFjb2xzJ10gPSBDb2xXaWR0aDtcbiAgICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5cbnByaXZhdGUgc2V0RGF0YUxvc3NSZXBvcnRIZWFkZXJzICh3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0KTogWExTWC5Xb3JrU2hlZXQge1xuICB3b3Jrc2hlZXQuQTEudiA9IFwiTG9zc19SZXNwXCI7XG4gIHdvcmtzaGVldC5CMS52ID0gXCJQYXltZW50X0Fzc2V0X0RDTlwiO1xuICB3b3Jrc2hlZXQuQzEudiA9IFwiRW52ZWxvcGVfUmVmXCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJFbnZlbG9wZV9JdGVtXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJSZXNwX1NlcnZpY2UgSURcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIlJlc3BfU2VydmljZSBOYW1lXCI7XG4gIHdvcmtzaGVldC5HMS52ID0gXCJEYXRlX0JhbmtlZFwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiQkdDX0JhdGNoXCI7XG4gIHdvcmtzaGVldC5JMS52ID0gXCJQYXltZW50X01ldGhvZFwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiQW1vdW50XCI7XG4gIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cbnByaXZhdGUgc2V0VW5wcm9jZXNzZWRSZXBvcnRIZWFkZXJzICh3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0KTogWExTWC5Xb3JrU2hlZXQge1xuICB3b3Jrc2hlZXQuQTEudiA9IFwiUmVzcF9TZXJ2aWNlIElEXCI7XG4gIHdvcmtzaGVldC5CMS52ID0gXCJSZXNwX1NlcnZpY2UgTmFtZVwiO1xuICB3b3Jrc2hlZXQuQzEudiA9IFwiRXhjZXB0aW9uX1JlZlwiO1xuICB3b3Jrc2hlZXQuRDEudiA9IFwiQ0NEX1JlZlwiO1xuICB3b3Jrc2hlZXQuRTEudiA9IFwiRGF0ZV9CYW5rZWRcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIkJHQ19CYXRjaFwiO1xuICB3b3Jrc2hlZXQuRzEudiA9IFwiUGF5bWVudF9Bc3NldF9EQ05cIjtcbiAgd29ya3NoZWV0LkgxLnYgPSBcIkVudmVsb3BlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSTEudiA9IFwiRW52ZWxvcGVfSXRlbVwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiUGF5bWVudF9NZXRob2RcIjtcbiAgd29ya3NoZWV0LksxLnYgPSBcIkFtb3VudFwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNldFByb2Nlc3NlZFVuYWxsb2NhdGVkUmVwb3J0SGVhZGVycyAod29ya3NoZWV0OiBYTFNYLldvcmtTaGVldCk6IFhMU1guV29ya1NoZWV0IHtcbiAgd29ya3NoZWV0LkExLnYgPSBcIlJlc3BfU2VydmljZSBJRFwiO1xuICB3b3Jrc2hlZXQuQjEudiA9IFwiUmVzcF9TZXJ2aWNlIE5hbWVcIjtcbiAgd29ya3NoZWV0LkMxLnYgPSBcIkFsbG9jYXRpb25fU3RhdHVzXCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJSZWNlaXZpbmdfT2ZmaWNlXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJBbGxvY2F0aW9uX1JlYXNvblwiO1xuICB3b3Jrc2hlZXQuRjEudiA9IFwiQ0NEX0V4Y2VwdGlvbl9SZWZcIjtcbiAgd29ya3NoZWV0LkcxLnYgPSBcIkNDRF9DYXNlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiUGF5bWVudF9Bc3NldF9EQ05cIjtcbiAgd29ya3NoZWV0LkkxLnYgPSBcIkVudmVsb3BlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiRW52ZWxvcGVfSXRlbVwiO1xuICB3b3Jrc2hlZXQuSzEudiA9IFwiRGF0ZV9CYW5rZWRcIjtcbiAgd29ya3NoZWV0LkwxLnYgPSBcIkJHQ19CYXRjaFwiO1xuICB3b3Jrc2hlZXQuTTEudiA9IFwiUGF5bWVudF9NZXRob2RcIjtcbiAgd29ya3NoZWV0Lk4xLnYgPSBcIkFtb3VudFwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNldFNob3J0RmFsbFJlcG9ydEhlYWRlcnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQpOiBYTFNYLldvcmtTaGVldCB7XG4gIHdvcmtzaGVldC5BMS52ID0gXCJSZXNwX1NlcnZpY2UgSURcIjtcbiAgd29ya3NoZWV0LkIxLnYgPSBcIlJlc3BfU2VydmljZSBOYW1lXCI7XG4gIHdvcmtzaGVldC5DMS52ID0gXCJPdmVyIFBheW1lbnRfVW5kZXIgUGF5bWVudFwiO1xuICB3b3Jrc2hlZXQuRDEudiA9IFwiQmFsYW5jZVwiO1xuICB3b3Jrc2hlZXQuRTEudiA9IFwiUGF5bWVudF9BbW91bnRcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIkNDRF9DYXNlX1JlZlwiO1xuICB3b3Jrc2hlZXQuRzEudiA9IFwiRXhjZXB0aW9uX1JlZlwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiUHJvY2Vzc2VkX0RhdGVcIjtcbiAgd29ya3NoZWV0LkkxLnYgPSBcIlJlYXNvblwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiRXhwbGFuYXRpb25cIjtcbiAgd29ya3NoZWV0LksxLnYgPSBcIlVwZGF0ZWQgTmFtZVwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7WGxGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1yZXBvcnRzJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1JFUE9SVFMnPlxuICAgICAgPGNjcGF5LWVycm9yLWJhbm5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiPjwvY2NwYXktZXJyb3ItYmFubmVyPlxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLXhsXCI+XG4gICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPiBDaG9vc2UgdGhlIHJlcG9ydCB0eXBlIGFuZCBkYXRlIHJhbmdlPC9oMT5cbiAgICAgIDwvbGVnZW5kPlxuPC9kaXY+XG48Zm9ybSBbZm9ybUdyb3VwXT1cInJlcG9ydHNGb3JtXCI+XG4gICAgIDxkaXYgIGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiPlxuICAgICAgICAgIDxkaXYgIGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgaWQ9XCJEYXRhTG9zc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlRGF0ZXMoJ0RBVEFfTE9TUycpXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJEQVRBX0xPU1NcIiBcbiAgICAgICAgICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cIkRhdGFMb3NzXCIvPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWxhYmVsLS1tXCIgZm9yPVwiRGF0YUxvc3NcIj5EYXRhIGxvc3M8L2xhYmVsPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPk1pc3NpbmcgdHJhbnNhY3Rpb25zIHdoZXJlIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSBvbmx5IGVpdGhlciBvZiBFeGVsYSBvciBCdWxrIHNjYW48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICBpZD1cIlVucHJvY2Vzc2VkVHJhbnNhY3Rpb25zXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVEYXRlcygnVU5QUk9DRVNTRUQnKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIHZhbHVlPVwiVU5QUk9DRVNTRURcIiBcbiAgICAgICAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiVW5wcm9jZXNzZWRUcmFuc2FjdGlvbnNcIi8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJVbnByb2Nlc3NlZFRyYW5zYWN0aW9uc1wiPlVucHJvY2Vzc2VkIHRyYW5zYWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+VHJhbnNhY3Rpb24gcmVjb3JkcyB0aGF0IGFyZSBzdGlsbCB1bnByb2Nlc3NlZCBieSBzdGFmZi48L3NwYW4+XG4gICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgaWQ9XCJQcm9jZXNzZWRVbmFsbG9jYXRlZFwiXG4gICAgICAgICAgICBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZURhdGVzKCdQUk9DRVNTRURfVU5BTExPQ0FURUQnKVwiXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgdmFsdWU9XCJQUk9DRVNTRURfVU5BTExPQ0FURURcIiBcbiAgICAgICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cIlByb2Nlc3NlZFVuYWxsb2NhdGVkXCIvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cIlByb2Nlc3NlZFVuYWxsb2NhdGVkXCI+UHJvY2Vzc2VkIHVuYWxsb2NhdGVkPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+UGF5bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIMOiwoDCmFVuaWRlbnRpZmllZMOiwoDCmSBvciDDosKAwphUcmFuc2ZlcnJlZMOiwoDCmSAoVW5zb2xpY2l0ZWQgcmVxdWVzdHMpPC9zcGFuPlxuICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgIGlkPVwiU2hvcnRmYWxsc2FuZFN1cnBsdXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVEYXRlcygnU1VSUExVU19BTkRfU0hPUlRGQUxMJylcIlxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIHZhbHVlPVwiU1VSUExVU19BTkRfU0hPUlRGQUxMXCIgXG4gICAgICAgICAgICBkYXRhLWFyaWEtY29udHJvbHM9XCJTaG9ydGZhbGxzYW5kU3VycGx1c1wiLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJTaG9ydGZhbGxzYW5kU3VycGx1c1wiPlVuZGVyIHBheW1lbnQgYW5kIE92ZXIgcGF5bWVudDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPlJlcXVlc3RzIHdoZXJlIGJhbGFuY2VzIGFyZSBtYXJrZWQgYXMgVW5kZXIgcGF5bWVudC9PdmVyIHBheW1lbnQgZnVydGhlciBjYXNlIG1hbmFnZW1lbnQuXG4gICAgICAgICAgICAgICBFLmc6IFJlZnVuZCBhcHByb3ZhbCwgQ3VzdG9tZXIgY29udGFjdDwvc3Bhbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgIFxuICAgICAgIDwvZGl2PlxuICAgICA8L2Rpdj5cbiAgICAgPGRpdiAgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWZyb21cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJkYXRlLWZyb21cIj5EYXRlIGZyb208L2xhYmVsPlxuICAgICAgPGlucHV0IChjaGFuZ2UpPVwiZ2V0U2VsZWN0ZWRGcm9tRGF0ZSgpXCIgW21heF09XCJnZXRUb2RheSgpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImRhdGUtZnJvbVwiIG5hbWU9XCJkYXRlLWZyb21cIiB0eXBlPVwiZGF0ZVwiICBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIiByZXF1aXJlZC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRhdGV0b1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cImRhdGUtdG9cIj5EYXRlIHRvPC9sYWJlbD5cbiAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImdldFNlbGVjdGVkRnJvbURhdGUoKVwiIFttYXhdPVwiZ2V0VG9kYXkoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJkYXRlLXRvXCIgbmFtZT1cInNlYXJjaFwiIHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kRGF0ZVwiIHJlcXVpcmVkLz5cbiAgICAgIDwvZGl2PlxuICAgICA8L2Rpdj5cbiAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgfHwgaXNEYXRlUmFuZ2VCZXRuV2Vla1wiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlXCI+UGxlYXNlIHNlbGVjdCAnRGF0ZSBGcm9tJyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJ0RhdGUgVG8nPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc0RhdGVSYW5nZUJldG5XZWVrXCI+IFBsZWFzZSBzZWxlY3QgdGhlIGRhdGUgcmFuZ2UgYmV0d2VlbiA3IGRheXM8L3NwYW4+XG4gICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cImJ0bnN1Ym1pdFwiPlxuICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiZG93bmxvYWRSZXBvcnQoKVwiIGNsYXNzPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFyZXBvcnRzRm9ybS52YWxpZCB8fCBpc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgfHwgaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZSB8fCBpc0RhdGVSYW5nZUJldG5XZWVrXCI+RG93bmxvYWQgcmVwb3J0PC9idXR0b24+XG4gICA8L2Rpdj5cbiA8L2Zvcm0+XG4gICAgXG5gLFxuICBzdHlsZXM6IFtgLmdvdnVrLXJhZGlvc19faW5wdXQ6Zm9jdXMrLmdvdnVrLXJhZGlvc19fbGFiZWw6OmJlZm9yZXtib3JkZXItd2lkdGg6NHB4O2JveC1zaGFkb3c6MCAwIDAgNHB4ICNmZmFmMDB9LmRhdGVmcm9te3dpZHRoOjUwJTtmbG9hdDpsZWZ0fS5kYXRldG97d2lkdGg6NTAlO2Zsb2F0OnJpZ2h0fS5nb3Z1ay1sYWJlbC0tbXtmb250LXNpemU6bGFyZ2V9LmZvcm0taGludHtwYWRkaW5nLWxlZnQ6LjdlbX0uaGVhZGVye21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjE1cHh9LmJ0bnN1Ym1pdHttYXJnaW4tYm90dG9tOjMwcHh9LmlubGluZS1lcnJvci1tZXNzYWdle2NvbG9yOiNhNzE0MTQ7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6MTBweH1gXVxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVwb3J0c0Zvcm06IEZvcm1Hcm91cDtcbiAgc3RhcnREYXRlOiBzdHJpbmc7XG4gIGVuZERhdGU6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBpc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQ6Qm9vbGVhbiA9IGZhbHNlO1xuICBpc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlOiBCb29sZWFuID0gZmFsc2U7XG4gIGlzRGF0ZVJhbmdlQmV0bldlZWs6IEJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gIHBheW1lbnRHcm91cHM6IElQYXltZW50R3JvdXBbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgeGxGaWxlU2VydmljZTogWGxGaWxlU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UpIHsgfVxuICAgXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mcm9tVmFsaWRhdGlvbigpO1xuXG4gICB9XG5cbiAgZ2V0VG9kYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gfVxuXG4gZ2V0U2VsZWN0ZWRGcm9tRGF0ZSgpOiB2b2lkIHtcbiB0aGlzLnZhbGlkYXRlRGF0ZXModGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUpO1xuIH1cblxuIHZhbGlkYXRlRGF0ZXMocmVwb3J0TmFtZSl7XG4gIGNvbnN0IHNlbGVjdGVkU3RhcnREYXRlID0gdGhpcy50cmFuZm9ybURhdGUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnZhbHVlKSxcbiAgICBzZWxlY3RlZEVuZERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnZW5kRGF0ZScpLnZhbHVlKTtcbiAgY29uc3QgaXNEYXRlUmFuZ2VNb3JlVGhhbldlZWsgPSAoPGFueT5uZXcgRGF0ZShzZWxlY3RlZFN0YXJ0RGF0ZSkgLSA8YW55Pm5ldyBEYXRlKHNlbGVjdGVkRW5kRGF0ZSkpLygxMDAwICogMzYwMCAqIC0yNCkgPiA3O1xuICBpZihuZXcgRGF0ZShzZWxlY3RlZFN0YXJ0RGF0ZSkgPiBuZXcgRGF0ZShzZWxlY3RlZEVuZERhdGUpICYmIHNlbGVjdGVkRW5kRGF0ZSAhPT0gJycpe1xuICAgIHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzdGFydERhdGUnKS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUJldG5XZWVrID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmKHJlcG9ydE5hbWUgJiYgcmVwb3J0TmFtZSA9PT0nU1VSUExVU19BTkRfU0hPUlRGQUxMJyAmJiBpc0RhdGVSYW5nZU1vcmVUaGFuV2VlayApIHtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlQmV0bldlZWsgPSB0cnVlO1xuICAgIHRoaXMuaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZSA9IGZhbHNlO1xuICB9XG5cbiB9XG5cbiAgZnJvbVZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5yZXBvcnRzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VsZWN0ZWRyZXBvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJykgLFxuICAgICAgc3RhcnREYXRlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZW5kRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnKSBcbiAgICB9KTtcbn1cblxuZG93bmxvYWRSZXBvcnQoKXtcbiAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICBjb25zdCBkYXRhTG9zc1JwdERlZmF1bHQgPSBbe2xvc3NfcmVzcDonJyxwYXltZW50X2Fzc2V0X2RjbjonJyxlbnZfcmVmOicnLGVudl9pdGVtOicnLHJlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxkYXRlX2JhbmtlZDonJyxiZ2NfYmF0Y2g6JycscGF5bWVudF9tZXRob2Q6JycsYW1vdW50OicnfV0sXG4gICAgdW5Qcm9jZXNzZWRScHREZWZhdWx0ID0gW3tyZXNwX3NlcnZpY2VfaWQ6JycscmVzcF9zZXJ2aWNlX25hbWU6JycsZXhjZXB0aW9uX3JlZjonJyxjY2RfcmVmOicnLGRhdGVfYmFua2VkOicnLGJnY19iYXRjaDonJyxwYXltZW50X2Fzc2V0X2RjbjonJyxlbnZfcmVmOicnLGVudl9pdGVtOicnLHBheW1lbnRfbWV0aG9kOicnLGFtb3VudDonJ31dLFxuICAgIHByb2Nlc3NlZFVuYWxsb2NhdGVkID1be3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxhbGxvY2F0aW9uX3N0YXR1czonJyxyZWNlaXZpbmdfb2ZmaWNlOicnLGFsbG9jYXRpb25fcmVhc29uOicnLGNjZF9leGNlcHRpb25fcmVmOicnLGNjZF9jYXNlX3JlZjonJyxwYXltZW50X2Fzc2V0X2RjbjonJyxlbnZfcmVmOicnLGVudl9pdGVtOicnLGRhdGVfYmFua2VkOicnLGJnY19iYXRjaDonJyxwYXltZW50X21ldGhvZDonJyxhbW91bnQ6JycsdXBkYXRlZF9ieTonJ31dLFxuICAgIHNob3J0RmFsbHNScHREZWZhdWx0ID0gW3tyZXNwX3NlcnZpY2VfaWQ6JycscmVzcF9zZXJ2aWNlX25hbWU6Jycsc3VycGx1c19zaG9ydGZhbGw6JycsYmFsYW5jZTonJyxwYXltZW50X2Ftb3VudDonJyxjY2RfY2FzZV9yZWZlcmVuY2U6JycsY2NkX2V4Y2VwdGlvbl9yZWZlcmVuY2U6JycscHJvY2Vzc2VkX2RhdGU6JycsIHJlYXNvbjonJywgZXhwbGFuYXRpb246JycsIHVzZXJfbmFtZTonJ31dLFxuICAgIHNlbGVjdGVkUmVwb3J0TmFtZSA9IHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlLFxuICAgIHNlbGVjdGVkU3RhcnREYXRlID0gdGhpcy50cmFuZm9ybURhdGUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnZhbHVlKSxcbiAgICBzZWxlY3RlZEVuZERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnZW5kRGF0ZScpLnZhbHVlKTtcblxuICAgIGlmKHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1BST0NFU1NFRF9VTkFMTE9DQVRFRCcgfHwgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnU1VSUExVU19BTkRfU0hPUlRGQUxMJyApe1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZG93bmxvYWRTZWxlY3RlZFJlcG9ydChzZWxlY3RlZFJlcG9ydE5hbWUsc2VsZWN0ZWRTdGFydERhdGUsc2VsZWN0ZWRFbmREYXRlKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+ICB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICBsZXQgcmVzPSB7ZGF0YTogdGhpcy5hcHBseURhdGVGb3JtYXQocmVzdWx0KX07XG4gICAgICAgICAgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1BST0NFU1NFRF9VTkFMTE9DQVRFRCcgKXtcbiAgICAgICAgICAgIHJlcy5kYXRhPSBwcm9jZXNzZWRVbmFsbG9jYXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1NVUlBMVVNfQU5EX1NIT1JURkFMTCcgKSB7XG4gICAgICAgICAgICByZXMuZGF0YT0gc2hvcnRGYWxsc1JwdERlZmF1bHQ7XG4gICAgICAgICAgfSBcbiAgICAgICAgICBpZihyZXN1bHRbJ2RhdGEnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IoIHZhciBpPTA7IGk8IHJlc1snZGF0YSddLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfcmVmJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigwLDEzKTtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X2l0ZW0nXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDEzLDIxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcImFtb3VudFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Ftb3VudCddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJiYWxhbmNlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnYmFsYW5jZSddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldW1wiYmFsYW5jZVwiXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IE9wID0gcmVzWydkYXRhJ11baV1bXCJzdXJwbHVzX3Nob3J0ZmFsbFwiXTtcbiAgICAgICAgICAgICAgaWYoT3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydzdXJwbHVzX3Nob3J0ZmFsbCddID0gT3AgPT1cIlN1cnBsdXNcIiA/IFwiT3ZlciBwYXltZW50XCI6XCJVbmRlciBwYXltZW50XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Ftb3VudFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ3BheW1lbnRfYW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bJ3BheW1lbnRfYW1vdW50J10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBcbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMueGxGaWxlU2VydmljZS5leHBvcnRBc0V4Y2VsRmlsZShyZXNbJ2RhdGEnXSwgdGhpcy5nZXRGaWxlTmFtZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSwgc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSkpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZG93bmxvYWRTZWxlY3RlZFJlcG9ydChzZWxlY3RlZFJlcG9ydE5hbWUsc2VsZWN0ZWRTdGFydERhdGUsc2VsZWN0ZWRFbmREYXRlKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+ICB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICBsZXQgcmVzID0ge2RhdGE6IHRoaXMuYXBwbHlEYXRlRm9ybWF0KHJlc3VsdCl9O1xuICAgICAgICAgIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdEQVRBX0xPU1MnICl7XG4gICAgICAgICAgICByZXMuZGF0YT0gZGF0YUxvc3NScHREZWZhdWx0O1xuICAgICAgICAgIH0gZWxzZSBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnVU5QUk9DRVNTRUQnKXtcbiAgICAgICAgICAgIHJlcy5kYXRhID0gdW5Qcm9jZXNzZWRScHREZWZhdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXN1bHRbJ2RhdGEnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yKCB2YXIgaT0wOyBpPCByZXNbJ2RhdGEnXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJhbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9yZWYnXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDAsMTMpO1xuICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9pdGVtJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigxMywyMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMueGxGaWxlU2VydmljZS5leHBvcnRBc0V4Y2VsRmlsZShyZXNbJ2RhdGEnXSwgdGhpcy5nZXRGaWxlTmFtZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSwgc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSApKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShzZWxlY3RlZE9wdGlvbjogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nICkge1xuICAgIGNvbnN0IGxvYyA9ICdlbi1VUycsXG4gICAgICBzdER0ID0gZm9ybWF0RGF0ZShzdGFydERhdGUsICdkZE1NeXknLCBsb2MpLFxuICAgICAgZW5EdCA9IGZvcm1hdERhdGUoZW5kRGF0ZSwgJ2RkTU15eScsIGxvYyksXG4gICAgICBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgY3VycmVudERhdGUgPSBmb3JtYXREYXRlKG5vdywgJ2RkTU15eScsIGxvYyksXG4gICAgICB0aW1lc3RhbXAgPSBgJHtjdXJyZW50RGF0ZX1fJHt0aGlzLmdldFR3b2RpZ2l0KG5vdy5nZXRIb3VycygpKX0ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldE1pbnV0ZXMoKSl9JHt0aGlzLmdldFR3b2RpZ2l0KG5vdy5nZXRTZWNvbmRzKCkpfWAsXG4gICAgICBzZWxlY3RlZE9wdGlvblR4dCA9IHRoaXMuZ2V0Q2FtZWxDYXNlU3RyaW5nKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uVHh0KydfJytzdER0KydfVG9fJytlbkR0KydfUnVuXycrIHRpbWVzdGFtcDtcbiAgfSBcbiAgdHJhbmZvcm1EYXRlKHN0ckRhdGU6IHN0cmluZykge1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICBpZiAoc3RyRGF0ZSkge1xuICAgICAgbGV0IHBhcnRzID0gc3RyRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgcmVzdWx0ID0gYCR7cGFydHNbMV19LyR7cGFydHNbMl19LyR7cGFydHNbMF19YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXRUd29kaWdpdChpbnB1dDogbnVtYmVyKXtcbiAgICByZXR1cm4gKFwiMFwiICsgaW5wdXQpLnNsaWNlKC0yKTtcbiAgfVxuICBnZXRDYW1lbENhc2VTdHJpbmcoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHN3aXRjaChzZWxlY3RlZE9wdGlvbikgeyBcbiAgICAgIGNhc2UgJ1VOUFJPQ0VTU0VEJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ1VucHJvY2Vzc2VkJztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGNhc2UgJ0RBVEFfTE9TUyc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdEYXRhX0xvc3MnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ1Byb2Nlc3NlZF9VbmFsbG9jYXRlZCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBjYXNlICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnOiB7IFxuICAgICAgICByZXN1bHQgPSAnT3ZlciBQYXltZW50X1VuZGVyIFBheW1lbnQnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgZGVmYXVsdDogeyBcbiAgICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRPcHRpb247XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICB9IFxuICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBhcHBseURhdGVGb3JtYXQocmVzKSB7XG4gICAgY29uc3QgZm10ID0gJ2RkL01NL3l5eXknLFxuICAgIGxvYyA9ICdlbi1VUyc7XG4gICAgcmV0dXJuIHJlc1snZGF0YSddLm1hcCh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWVbJ2RhdGVfYmFua2VkJ10pIHtcbiAgICAgICAgdmFsdWVbJ2RhdGVfYmFua2VkJ10gPSBmb3JtYXREYXRlKHZhbHVlWydkYXRlX2JhbmtlZCddLCBmbXQsIGxvYyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgXG4gIGNvbnZlcnRUb0Zsb2F0VmFsdWUoYW10KSB7XG4gICAgcmV0dXJuIGFtdCA/IE51bWJlci5wYXJzZUZsb2F0KGFtdCkudG9GaXhlZCgyKTogJzAuMDAnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge1BheW1lbnRMaXN0Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGF5bWVudC1saXN0L3BheW1lbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtQYXltZW50Vmlld0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7Q2FyZERldGFpbHNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9jYXJkLWRldGFpbHMvY2FyZC1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge1BhZ2VOb3RGb3VuZENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3BhZ2Utbm90LWZvdW5kLmNvbXBvbmVudCc7XG5pbXBvcnQge1BheW1lbnRMaWJDb21wb25lbnR9IGZyb20gJy4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IFN0YXR1c0hpc3RvcnlDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RhdHVzLWhpc3Rvcnkvc3RhdHVzLWhpc3RvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IFBiYURldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGJhLWRldGFpbHMvcGJhLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc29sZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZC9sb2dnZXIvY29uc29sZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRIdHRwQ2xpZW50IH0gZnJvbSAnLi9zZXJ2aWNlcy9zaGFyZWQvaHR0cGNsaWVudC93ZWJjb21wb25lbnQuaHR0cC5jbGllbnQnO1xuaW1wb3J0IHsgQ2FzZVRyYW5zYWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmVlU3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mZWUtc3VtbWFyeS9mZWUtc3VtbWFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJyb3JCYW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZXJyb3ItYmFubmVyL2Vycm9yLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFya1VuaWRlbnRpZmllZFBheW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWFyay11bmlkZW50aWZpZWQtcGF5bWVudC9tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXJrVW5zb2xpY2l0ZWRQYXltZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21hcmstdW5zb2xpY2l0ZWQtcGF5bWVudC9tYXJrLXVuc29saWNpdGVkLXBheW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFVucHJvY2Vzc2VkUGF5bWVudHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdW5wcm9jZXNzZWQtcGF5bWVudHMvdW5wcm9jZXNzZWQtcGF5bWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2Nlc3NlZC1wYXltZW50cy9wcm9jZXNzZWQtcGF5bWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbG9jYXRlUGF5bWVudHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxsb2NhdGUtcGF5bWVudHMvYWxsb2NhdGUtcGF5bWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IEFkZFJlbWlzc2lvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtcmVtaXNzaW9uL2FkZC1yZW1pc3Npb24uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2NkSHlwaGVuc1BpcGUgfSBmcm9tICcuL3BpcGVzL2NjZC1oeXBoZW5zLnBpcGUnO1xuaW1wb3J0IHsga2V5VmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy9rZXktdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBTYW5pdGl6ZUh0bWxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYW5pdGl6ZS1odG1sLnBpcGUnO1xuaW1wb3J0IHsgUmVwb3J0c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yZXBvcnRzL3JlcG9ydHMuY29tcG9uZW50JztcbmltcG9ydCB7IFhsRmlsZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3hsLWZpbGUveGwtZmlsZS5zZXJ2aWNlJztcblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIFBheW1lbnRMaXN0Q29tcG9uZW50LFxuICAgIFBheW1lbnRWaWV3Q29tcG9uZW50LFxuICAgIENhcmREZXRhaWxzQ29tcG9uZW50LFxuICAgIFBhZ2VOb3RGb3VuZENvbXBvbmVudCxcbiAgICBTdGF0dXNIaXN0b3J5Q29tcG9uZW50LFxuICAgIE1hcmtVbmlkZW50aWZpZWRQYXltZW50Q29tcG9uZW50LFxuICAgIE1hcmtVbnNvbGljaXRlZFBheW1lbnRDb21wb25lbnQsXG4gICAgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCxcbiAgICBQcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCxcbiAgICBBbGxvY2F0ZVBheW1lbnRzQ29tcG9uZW50LFxuICAgIFBiYURldGFpbHNDb21wb25lbnQsXG4gICAgQ2FzZVRyYW5zYWN0aW9uc0NvbXBvbmVudCxcbiAgICBGZWVTdW1tYXJ5Q29tcG9uZW50LFxuICAgIEFkZFJlbWlzc2lvbkNvbXBvbmVudCxcbiAgICBDY2RIeXBoZW5zUGlwZSxcbiAgICBrZXlWYWx1ZVBpcGUsXG4gICAgU2FuaXRpemVIdG1sUGlwZSxcbiAgICBSZXBvcnRzQ29tcG9uZW50LFxuICAgIEVycm9yQmFubmVyQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFsgUGF5bWVudExpYkNvbXBvbmVudCBdLFxuICBwcm92aWRlcnM6IFsgXG4gICAgeyBwcm92aWRlOiBMb2dnZXJTZXJ2aWNlLCB1c2VDbGFzczogQ29uc29sZUxvZ2dlclNlcnZpY2UgfSxcbiAgICBYbEZpbGVTZXJ2aWNlLFxuICAgIFdlYkNvbXBvbmVudEh0dHBDbGllbnRcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIFBheW1lbnRMaWJNb2R1bGUgeyB9XG4iXSwibmFtZXMiOlsiSW5qZWN0YWJsZSIsIkNvbXBvbmVudCIsIklucHV0IiwiX3Rocm93IiwiY2F0Y2hFcnJvciIsIkh0dHBDbGllbnQiLCJIdHRwSGVhZGVycyIsIk1ldGEiLCJub29wIiwicm91dGVyIiwibHMuZ2V0IiwiUm91dGVyIiwiQlNfRU5BQkxFX0ZMQUciLCJ0c2xpYl8xLl9fdmFsdWVzIiwiTG9jYXRpb24iLCJGb3JtQ29udHJvbCIsIlZhbGlkYXRvcnMiLCJGb3JtQnVpbGRlciIsIkV2ZW50RW1pdHRlciIsIk91dHB1dCIsIlBpcGUiLCJEb21TYW5pdGl6ZXIiLCJYTFNYLnV0aWxzIiwiWExTWC53cml0ZSIsIkZpbGVTYXZlci5zYXZlQXMiLCJmb3JtYXREYXRlIiwiTmdNb2R1bGUiLCJDb21tb25Nb2R1bGUiLCJIdHRwQ2xpZW50TW9kdWxlIiwiRm9ybXNNb2R1bGUiLCJSZWFjdGl2ZUZvcm1zTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7UUFVRTtTQUFpQjs7Ozs7UUFFakIseUNBQWE7Ozs7WUFBYixVQUFjLE9BQWU7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO2FBQ3pCOzs7O1FBRUQseUNBQWE7OztZQUFiO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN0Qjs7Ozs7UUFFRCxpREFBcUI7Ozs7WUFBckIsVUFBc0IsZUFBdUI7Z0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxlQUFlLENBQUM7YUFDMUM7Ozs7UUFFRCxpREFBcUI7OztZQUFyQjtnQkFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIs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
|