@hmcts/ccpay-web-component 3.0.27 → 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.
Files changed (52) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +109 -57
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/add-remission/add-remission.component.js +8 -6
  6. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +25 -24
  7. package/esm2015/lib/components/case-transactions/case-transactions.component.js +20 -15
  8. package/esm2015/lib/components/fee-summary/fee-summary.component.js +40 -46
  9. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +9 -4
  10. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +9 -4
  11. package/esm2015/lib/components/reports/reports.component.js +11 -5
  12. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +2 -1
  13. package/esm2015/lib/interfaces/AddRemissionRequest.js +5 -5
  14. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +5 -8
  15. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +29 -0
  16. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +5 -9
  17. package/esm2015/lib/payment-lib.component.js +19 -7
  18. package/esm2015/lib/services/payment-view/payment-view.service.js +9 -1
  19. package/esm2015/lib/services/xl-file/xl-file.service.js +2 -2
  20. package/esm5/lib/components/add-remission/add-remission.component.js +6 -4
  21. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +26 -14
  22. package/esm5/lib/components/case-transactions/case-transactions.component.js +13 -3
  23. package/esm5/lib/components/fee-summary/fee-summary.component.js +27 -19
  24. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +9 -4
  25. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +9 -4
  26. package/esm5/lib/components/reports/reports.component.js +8 -3
  27. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +2 -1
  28. package/esm5/lib/interfaces/AddRemissionRequest.js +4 -4
  29. package/esm5/lib/interfaces/AllocatePaymentRequest.js +4 -7
  30. package/esm5/lib/interfaces/PayhubAntennaRequest.js +26 -0
  31. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +4 -7
  32. package/esm5/lib/payment-lib.component.js +8 -3
  33. package/esm5/lib/services/payment-view/payment-view.service.js +14 -1
  34. package/esm5/lib/services/xl-file/xl-file.service.js +2 -2
  35. package/fesm2015/hmcts-ccpay-web-component.js +143 -114
  36. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  37. package/fesm5/hmcts-ccpay-web-component.js +106 -53
  38. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  39. package/hmcts-ccpay-web-component.metadata.json +1 -1
  40. package/lib/components/add-remission/add-remission.component.d.ts +1 -1
  41. package/lib/components/allocate-payments/allocate-payments.component.d.ts +4 -0
  42. package/lib/components/case-transactions/case-transactions.component.d.ts +2 -0
  43. package/lib/components/fee-summary/fee-summary.component.d.ts +2 -0
  44. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +1 -0
  45. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +1 -0
  46. package/lib/interfaces/AddRemissionRequest.d.ts +2 -2
  47. package/lib/interfaces/AllocatePaymentRequest.d.ts +3 -3
  48. package/lib/interfaces/PayhubAntennaRequest.d.ts +7 -0
  49. package/lib/interfaces/PaymentToPayhubRequest.d.ts +2 -3
  50. package/lib/payment-lib.component.d.ts +2 -0
  51. package/lib/services/payment-view/payment-view.service.d.ts +2 -0
  52. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs/observable/throw'), require('@angular/common/http'), require('rxjs/operators'), require('@angular/platform-browser'), require('@angular/router'), require('@angular/common'), require('@angular/forms'), require('file-saver'), require('xlsx')) :
3
- typeof define === 'function' && define.amd ? define('@hmcts/ccpay-web-component', ['exports', '@angular/core', 'rxjs/observable/throw', '@angular/common/http', 'rxjs/operators', '@angular/platform-browser', '@angular/router', '@angular/common', '@angular/forms', 'file-saver', 'xlsx'], factory) :
4
- (factory((global.hmcts = global.hmcts || {}, global.hmcts['ccpay-web-component'] = {}),global.ng.core,global.rxjs['observable/throw'],global.ng.common.http,global.rxjs.operators,global.ng.platformBrowser,global.ng.router,global.ng.common,global.ng.forms,null,null));
5
- }(this, (function (exports,i0,_throw,i1,operators,platformBrowser,router,common,forms,FileSaver,XLSX) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs/observable/throw'), require('@angular/common/http'), require('rxjs/operators'), require('@angular/platform-browser'), require('@angular/router'), require('local-storage'), require('@angular/common'), require('@angular/forms'), require('file-saver'), require('xlsx')) :
3
+ typeof define === 'function' && define.amd ? define('@hmcts/ccpay-web-component', ['exports', '@angular/core', 'rxjs/observable/throw', '@angular/common/http', 'rxjs/operators', '@angular/platform-browser', '@angular/router', 'local-storage', '@angular/common', '@angular/forms', 'file-saver', 'xlsx'], factory) :
4
+ (factory((global.hmcts = global.hmcts || {}, global.hmcts['ccpay-web-component'] = {}),global.ng.core,global.rxjs['observable/throw'],global.ng.common.http,global.rxjs.operators,global.ng.platformBrowser,global.ng.router,null,global.ng.common,global.ng.forms,null,null));
5
+ }(this, (function (exports,i0,_throw,i1,operators,platformBrowser,router,ls,common,forms,FileSaver,XLSX) { 'use strict';
6
6
 
7
7
  /**
8
8
  * @fileoverview added by tsickle
@@ -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'\"></app-mark-unidentified-payment>\n <app-mark-unsolicited-payment *ngIf=\"viewName === 'unsolicitedPage'\"></app-mark-unsolicited-payment>\n <app-allocate-payments *ngIf=\"viewName === 'allocate-payments'\"\n [isTurnOff]=\"ISTURNOFF\"></app-allocate-payments>\n <ccpay-fee-summary *ngIf=\"viewName === 'fee-summary'\"\n [ccdCaseNumber]=\"CCD_CASE_NUMBER\" [paymentGroupRef]=\"paymentGroupReference\"\n [isTurnOff]=\"ISTURNOFF\"></ccpay-fee-summary>\n <ccpay-reports *ngIf=\"viewName === 'reports'\"></ccpay-reports>\n "
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 */
@@ -122,7 +122,8 @@
122
122
  SELECTED_OPTION: [{ type: i0.Input, args: ['SELECTED_OPTION',] }],
123
123
  ISBSENABLE: [{ type: i0.Input, args: ['ISBSENABLE',] }],
124
124
  ISSFENABLE: [{ type: i0.Input, args: ['ISSFENABLE',] }],
125
- ISTURNOFF: [{ type: i0.Input, args: ['ISTURNOFF',] }]
125
+ ISTURNOFF: [{ type: i0.Input, args: ['ISTURNOFF',] }],
126
+ CASETYPE: [{ type: i0.Input, args: ['CASETYPE',] }]
126
127
  };
127
128
  return PaymentLibComponent;
128
129
  }());
@@ -594,6 +595,19 @@
594
595
  function (body, paymentGroupRef) {
595
596
  return this.https.post(this.paymentLibService.API_ROOT + "/payment-groups/" + paymentGroupRef + "/card-payments", body).pipe(operators.catchError(this.errorHandlerService.handleError));
596
597
  };
598
+ /**
599
+ * @param {?} body
600
+ * @param {?} paymentGroupRef
601
+ * @return {?}
602
+ */
603
+ PaymentViewService.prototype.postPaymentAntennaToPayHub = /**
604
+ * @param {?} body
605
+ * @param {?} paymentGroupRef
606
+ * @return {?}
607
+ */
608
+ function (body, paymentGroupRef) {
609
+ return this.https.post(this.paymentLibService.API_ROOT + "/payment-groups/" + paymentGroupRef + "/telephony-card-payments", body).pipe(operators.catchError(this.errorHandlerService.handleError));
610
+ };
597
611
  /**
598
612
  * @param {?} reportName
599
613
  * @param {?} startDate
@@ -1293,6 +1307,7 @@
1293
1307
  this.clAmountDue = 0;
1294
1308
  this.isFeeRecordsExist = false;
1295
1309
  this.isGrpOutstandingAmtPositive = false;
1310
+ this.lsCcdNumber = ls.get('ccdNumber');
1296
1311
  }
1297
1312
  /**
1298
1313
  * @return {?}
@@ -1304,6 +1319,7 @@
1304
1319
  var _this = this;
1305
1320
  this.isGrpOutstandingAmtPositive = false;
1306
1321
  this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
1322
+ this.caseType = this.paymentLibComponent.CASETYPE;
1307
1323
  if (this.paymentLibComponent.CCD_CASE_NUMBER === '') {
1308
1324
  this.ccdCaseNumber = this.paymentLibComponent.EXC_REFERENCE;
1309
1325
  }
@@ -1315,6 +1331,9 @@
1315
1331
  this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
1316
1332
  this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
1317
1333
  if (!this.isTurnOff) {
1334
+ if (this.lsCcdNumber !== this.ccdCaseNumber) {
1335
+ this.router.navigateByUrl("/ccd-search?takePayment=true");
1336
+ }
1318
1337
  this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(function (paymentGroups) {
1319
1338
  _this.paymentGroups = paymentGroups['payment_groups'];
1320
1339
  _this.calculateAmounts();
@@ -1652,7 +1671,7 @@
1652
1671
  var url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
1653
1672
  url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
1654
1673
  url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
1655
- this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + url);
1674
+ url += "&caseType=" + this.caseType;
1656
1675
  this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + url);
1657
1676
  }
1658
1677
  else {
@@ -1820,7 +1839,7 @@
1820
1839
  CaseTransactionsComponent.decorators = [
1821
1840
  { type: i0.Component, args: [{
1822
1841
  selector: 'ccpay-case-transactions',
1823
- 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 <!-- <hr class=\"govuk-section-records-break\">\n <ccpay-app-processed-payments\n *ngIf=\"takePayment\" [NONPAYMENTS]=\"nonPayments\"\n (goToPaymentViewComponent) = \"goToPaymentViewComponent($event)\"\t>\n </ccpay-app-processed-payments>\n <hr class=\"govuk-section-records-break\"> -->\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>",
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",
1824
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}"]
1825
1844
  },] },
1826
1845
  ];
@@ -1869,19 +1888,32 @@
1869
1888
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
1870
1889
  */
1871
1890
  var PaymentToPayhubRequest = (function () {
1872
- function PaymentToPayhubRequest(ccd_case_number, amount, service, serviceName) {
1891
+ function PaymentToPayhubRequest(ccd_case_number, amount, caseType) {
1873
1892
  this.currency = 'GBP';
1874
1893
  this.description = 'PayBubble payment';
1875
1894
  this.channel = 'telephony';
1876
1895
  this.provider = 'pci pal';
1877
1896
  this.ccd_case_number = ccd_case_number;
1878
1897
  this.amount = /** @type {?} */ (amount.toFixed(2));
1879
- this.service = serviceName;
1880
- this.site_id = service;
1898
+ this.case_type = caseType;
1881
1899
  }
1882
1900
  return PaymentToPayhubRequest;
1883
1901
  }());
1884
1902
 
1903
+ /**
1904
+ * @fileoverview added by tsickle
1905
+ * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
1906
+ */
1907
+ var PayhubAntennaRequest = (function () {
1908
+ function PayhubAntennaRequest(ccd_case_number, amount, caseType) {
1909
+ this.currency = 'GBP';
1910
+ this.ccd_case_number = ccd_case_number;
1911
+ this.amount = /** @type {?} */ (amount.toFixed(2));
1912
+ this.case_type = caseType;
1913
+ }
1914
+ return PayhubAntennaRequest;
1915
+ }());
1916
+
1885
1917
  /**
1886
1918
  * @fileoverview added by tsickle
1887
1919
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
@@ -1897,6 +1929,7 @@
1897
1929
  this.paymentLibComponent = paymentLibComponent;
1898
1930
  this.viewStatus = 'main';
1899
1931
  this.service = "";
1932
+ this.platForm = "";
1900
1933
  this.isBackButtonEnable = true;
1901
1934
  this.isFeeAmountZero = false;
1902
1935
  this.totalAfterRemission = 0;
@@ -1918,6 +1951,7 @@
1918
1951
  this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
1919
1952
  this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
1920
1953
  this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
1954
+ this.platForm = 'Antenna';
1921
1955
  this.paymentViewService.getBSfeature().subscribe(function (features) {
1922
1956
  /** @type {?} */
1923
1957
  var result = JSON.parse(features).filter(function (feature) { return feature.uid === BS_ENABLE_FLAG$1; });
@@ -2003,10 +2037,8 @@
2003
2037
  * @return {?}
2004
2038
  */
2005
2039
  function (fee) {
2006
- if (this.service) {
2007
- this.currentFee = fee;
2008
- this.viewStatus = 'add_remission';
2009
- }
2040
+ this.currentFee = fee;
2041
+ this.viewStatus = 'add_remission';
2010
2042
  };
2011
2043
  /**
2012
2044
  * @return {?}
@@ -2105,6 +2137,7 @@
2105
2137
  partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
2106
2138
  partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
2107
2139
  partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
2140
+ partUrl += "&caseType=" + this.paymentLibComponent.CASETYPE;
2108
2141
  /** @type {?} */
2109
2142
  var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=true&" + partUrl;
2110
2143
  this.router.navigateByUrl(url);
@@ -2135,6 +2168,7 @@
2135
2168
  partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
2136
2169
  partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
2137
2170
  partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
2171
+ partUrl += "&caseType=" + this.paymentLibComponent.CASETYPE;
2138
2172
  if (this.viewStatus === 'feeRemovalConfirmation' || this.viewStatus === 'add_remission') {
2139
2173
  this.viewStatus = 'main';
2140
2174
  return;
@@ -2153,19 +2187,19 @@
2153
2187
  var _this = this;
2154
2188
  this.isConfirmationBtnDisabled = true;
2155
2189
  /** @type {?} */
2156
- var seriveName = this.service === 'AA07' ? 'DIVORCE' : this.service === 'AA08' ? 'PROBATE' : 'FINREM';
2190
+ var requestBody = new PaymentToPayhubRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType);
2157
2191
  /** @type {?} */
2158
- var requestBody = new PaymentToPayhubRequest(this.ccdCaseNumber, this.outStandingAmount, this.service, seriveName);
2159
- this.paymentViewService.postPaymentToPayHub(requestBody, this.paymentGroupRef).subscribe(function (response) {
2160
- _this.location.go("payment-history?view=fee-summary");
2161
- _this.payhubHtml = response;
2162
- _this.viewStatus = 'payhub_view';
2163
- _this.isBackButtonEnable = false;
2164
- }, function (error) {
2165
- _this.errorMessage = error;
2166
- _this.isConfirmationBtnDisabled = false;
2167
- _this.router.navigateByUrl('/pci-pal-failure');
2168
- });
2192
+ var antennaReqBody = new PayhubAntennaRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType);
2193
+ if (this.platForm === 'Antenna') {
2194
+ this.paymentViewService.postPaymentAntennaToPayHub(antennaReqBody, this.paymentGroupRef).subscribe(function (response) {
2195
+ _this.isBackButtonEnable = false;
2196
+ window.location.href = '/makePaymentByTelephoneyProvider';
2197
+ }, function (error) {
2198
+ _this.errorMessage = error;
2199
+ _this.isConfirmationBtnDisabled = false;
2200
+ _this.router.navigateByUrl('/pci-pal-failure');
2201
+ });
2202
+ }
2169
2203
  };
2170
2204
  /**
2171
2205
  * @param {?} outStandingAmount
@@ -2200,7 +2234,7 @@
2200
2234
  FeeSummaryComponent.decorators = [
2201
2235
  { type: i0.Component, args: [{
2202
2236
  selector: 'ccpay-fee-summary',
2203
- 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)\" [ngClass]=\"{'remissionDisable': !service}\" *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)\" [ngClass]=\"{'remissionDisable': !service}\" *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\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 <div class=\"govuk-form-group govuk-form-group--mg\">\n <label class=\"govuk-label custom-govuk-label govuk-fieldset__heading--fz\" for=\"responsibleOffice\">\n <strong>What service is this fee for?</strong>\n </label>\n <select class=\"govuk-select govuk-select--custom\" id=\"responsibleOffice\" [(ngModel)]=\"service\" name=\"responsibleOffice\">\n <option value=\"\" selected='selected'>Please select</option>\n <option value=\"AA07\">Divorce</option>\n <option value=\"AA09\">Financial Remedy</option>\n <option value=\"AA08\">Probate</option>\n </select>\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 || !service || isConfirmationBtnDisabled\"\n [ngClass]='totalFee <= 0 || !service || 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\n<ccpay-add-remission *ngIf=\"viewStatus === 'add_remission' && currentFee\"\n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\" \n [fee]=\"currentFee\" \n [service]=\"service\" \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",
2204
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}"]
2205
2239
  },] },
2206
2240
  ];
@@ -2217,7 +2251,8 @@
2217
2251
  FeeSummaryComponent.propDecorators = {
2218
2252
  paymentGroupRef: [{ type: i0.Input }],
2219
2253
  ccdCaseNumber: [{ type: i0.Input }],
2220
- isTurnOff: [{ type: i0.Input }]
2254
+ isTurnOff: [{ type: i0.Input }],
2255
+ caseType: [{ type: i0.Input }]
2221
2256
  };
2222
2257
  return FeeSummaryComponent;
2223
2258
  }());
@@ -2274,7 +2309,7 @@
2274
2309
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
2275
2310
  */
2276
2311
  var AllocatePaymentRequest = (function () {
2277
- function AllocatePaymentRequest(ccd_case_number, unAllocatedPayment, siteID, exceptionRecord, allocatedRequest) {
2312
+ function AllocatePaymentRequest(ccd_case_number, unAllocatedPayment, caseType, exceptionRecord, allocatedRequest) {
2278
2313
  this.amount = unAllocatedPayment.amount;
2279
2314
  this.banked_date = unAllocatedPayment.date_banked;
2280
2315
  this.ccd_case_number = ccd_case_number;
@@ -2293,8 +2328,7 @@
2293
2328
  name: 'success'
2294
2329
  };
2295
2330
  this.payment_method = unAllocatedPayment.payment_method;
2296
- this.requestor = siteID === 'AA07' ? 'DIVORCE' : siteID === 'AA08' ? 'PROBATE' : 'FINREM';
2297
- this.site_id = siteID;
2331
+ this.case_type = caseType;
2298
2332
  if (allocatedRequest) {
2299
2333
  this.payment_allocation_dto = allocatedRequest;
2300
2334
  }
@@ -2446,10 +2480,10 @@
2446
2480
  name: 'Unidentified'
2447
2481
  },
2448
2482
  unidentified_reason: reason,
2449
- user_id: this.siteID,
2483
+ user_id: this.caseType,
2450
2484
  };
2451
2485
  /** @type {?} */
2452
- var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unassignedRecord, this.siteID, this.exceptionReference, allocatedRequest);
2486
+ var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unassignedRecord, this.caseType, this.exceptionReference, allocatedRequest);
2453
2487
  this.bulkScaningPaymentService.postBSWoPGStrategic(postStrategicBody).subscribe(function (res) {
2454
2488
  _this.errorMessage = _this.getErrorMessage(false);
2455
2489
  /** @type {?} */
@@ -2561,6 +2595,9 @@
2561
2595
  { type: BulkScaningPaymentService }
2562
2596
  ];
2563
2597
  };
2598
+ MarkUnidentifiedPaymentComponent.propDecorators = {
2599
+ caseType: [{ type: i0.Input }]
2600
+ };
2564
2601
  return MarkUnidentifiedPaymentComponent;
2565
2602
  }());
2566
2603
 
@@ -2678,10 +2715,10 @@
2678
2715
  },
2679
2716
  unidentified_reason: controls["reason"].value,
2680
2717
  receiving_office: this.selectedSiteId,
2681
- user_id: this.siteID,
2718
+ user_id: this.caseType,
2682
2719
  };
2683
2720
  /** @type {?} */
2684
- var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unassignedRecord, this.siteID, this.exceptionReference, allocatedRequest);
2721
+ var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unassignedRecord, this.caseType, this.exceptionReference, allocatedRequest);
2685
2722
  this.bulkScaningPaymentService.postBSWoPGStrategic(postStrategicBody).subscribe(function (res) {
2686
2723
  _this.errorMessage = _this.getErrorMessage(false);
2687
2724
  /** @type {?} */
@@ -2919,6 +2956,9 @@
2919
2956
  { type: BulkScaningPaymentService }
2920
2957
  ];
2921
2958
  };
2959
+ MarkUnsolicitedPaymentComponent.propDecorators = {
2960
+ caseType: [{ type: i0.Input }]
2961
+ };
2922
2962
  return MarkUnsolicitedPaymentComponent;
2923
2963
  }());
2924
2964
 
@@ -3058,6 +3098,7 @@
3058
3098
  var url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
3059
3099
  url += this.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
3060
3100
  url += this.isStFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
3101
+ url += "&caseType=" + this.paymentLibComponent.CASETYPE;
3061
3102
  this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + "&dcn=" + this.recordId + url);
3062
3103
  };
3063
3104
  /**
@@ -3299,6 +3340,8 @@
3299
3340
  this.userName = null;
3300
3341
  this.paymentRef = null;
3301
3342
  this.isStrategicFixEnable = true;
3343
+ this.cookieUserName = [];
3344
+ this.userNameField = null;
3302
3345
  this.reasonList = {
3303
3346
  overPayment: {
3304
3347
  hwfReward: 'Help with Fees (HWF) awarded. Please include the HWF reference number in the explanatory note',
@@ -3469,21 +3512,25 @@
3469
3512
  * @return {?}
3470
3513
  */
3471
3514
  function () {
3515
+ this.enCookieUserName = document.cookie.split(";").find(function (row) { return row.includes("user-info"); }).split("=")[1].split(";");
3516
+ this.cookieUserName = JSON.parse(decodeURIComponent(this.enCookieUserName));
3517
+ /** @type {?} */
3518
+ var fullName = this.cookieUserName['forename'] + ' ' + this.cookieUserName['surname'];
3472
3519
  /** @type {?} */
3473
3520
  var paymentDetailsField = this.overUnderPaymentForm.controls["moreDetails"];
3474
3521
  /** @type {?} */
3475
3522
  var paymentFormError = this.overUnderPaymentForm.controls["moreDetails"].errors;
3476
3523
  /** @type {?} */
3477
- var userNameField = this.overUnderPaymentForm.controls["userName"];
3524
+ var userNameField = fullName;
3478
3525
  /** @type {?} */
3479
3526
  var isEmptyCondtion = this.paymentReason && this.paymentExplanation;
3480
3527
  /** @type {?} */
3481
3528
  var isOtherOptionSelected = this.paymentExplanation === 'Other';
3482
3529
  this.resetForm([false, false, false, false, false, false, false, false], 'all');
3483
- if ((!this.isRemainingAmountGtZero && !this.isRemainingAmountLtZero) || isEmptyCondtion && (!isOtherOptionSelected && userNameField.valid || isOtherOptionSelected && userNameField.valid && paymentDetailsField.valid)) {
3530
+ if ((!this.isRemainingAmountGtZero && !this.isRemainingAmountLtZero) || isEmptyCondtion && (!isOtherOptionSelected && userNameField.length > 0 || isOtherOptionSelected && userNameField.length > 0 && paymentDetailsField.valid)) {
3484
3531
  this.isConfirmButtondisabled = true;
3485
3532
  this.otherPaymentExplanation = this.paymentExplanation === 'Other' ? paymentDetailsField.value : this.paymentExplanation;
3486
- this.userName = userNameField.value;
3533
+ this.userName = userNameField;
3487
3534
  this.finalServiceCall();
3488
3535
  }
3489
3536
  else {
@@ -3507,12 +3554,9 @@
3507
3554
  this.resetForm([false, false, false, false, false, true, false, false], 'other');
3508
3555
  }
3509
3556
  }
3510
- if (userNameField.value === "") {
3557
+ if (userNameField.length === 0) {
3511
3558
  this.resetForm([false, false, false, false, false, false, true, false], 'username');
3512
3559
  }
3513
- if (userNameField.value !== "" && userNameField.invalid) {
3514
- this.resetForm([false, false, false, false, false, false, false, true], 'username');
3515
- }
3516
3560
  }
3517
3561
  };
3518
3562
  /**
@@ -3562,11 +3606,11 @@
3562
3606
  name: 'Allocated'
3563
3607
  },
3564
3608
  payment_group_reference: this.paymentGroup.payment_group_reference,
3565
- user_id: this.siteID,
3609
+ case_type: this.caseType,
3566
3610
  user_name: this.userName
3567
3611
  };
3568
3612
  /** @type {?} */
3569
- var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unAllocatedPayment, this.siteID, this.exceptionReference, allocatedRequest);
3613
+ var postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unAllocatedPayment, this.caseType, this.exceptionReference, allocatedRequest);
3570
3614
  this.bulkScaningPaymentService.postBSPaymentStrategic(postStrategicBody, this.paymentGroup.payment_group_reference).subscribe(function (res) {
3571
3615
  _this.errorMessage = _this.errorHandlerService.getServerErrorMessage(false);
3572
3616
  /** @type {?} */
@@ -3645,10 +3689,10 @@
3645
3689
  this.isRemainingAmountGtZero = remainingToBeAssigned > 0;
3646
3690
  this.isRemainingAmountLtZero = remainingToBeAssigned < 0;
3647
3691
  this.paymentSectionLabel = this.isRemainingAmountGtZero ? {
3648
- title: 'There is a surplus of',
3692
+ title: 'There is an Over payment of',
3649
3693
  reason: 'Provide a reason. This will be used in the Refund process.',
3650
3694
  } : this.isRemainingAmountLtZero ? {
3651
- title: 'There is a shortfall of',
3695
+ title: 'There is an Under payment of',
3652
3696
  reason: 'Provide a reason',
3653
3697
  } : {
3654
3698
  title: 'Amount left to be allocated',
@@ -3713,7 +3757,7 @@
3713
3757
  AllocatePaymentsComponent.decorators = [
3714
3758
  { type: i0.Component, args: [{
3715
3759
  selector: 'app-allocate-payments',
3716
- template: "<div class=\"allocate-payments\">\n <div *ngIf=\"viewStatus==='mainForm' && isTurnOff\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ALLOCATEPAYMENTS'>\n <div class=\"govuk-breadcrumbs\" *ngIf=\"paymentRef\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"gotoSummaryPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-heading-section\">\n <h1 class=\"govuk-heading-xl\">Allocate payment to fee group</h1>\n <h2 class=\"govuk-heading-l\">Amount left to be allocated:\n {{ unAllocatedPayment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</h2>\n </div>\n <div class=\"payment-group-section\" *ngFor=\"let paymentGroup of paymentGroups\">\n <h3 class=\"govuk-heading-m\">Group reference: {{paymentGroup.payment_group_reference}}</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\"></td>\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\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1 govuk-table__custom--col1\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n <div class=\"multiple-choice\">\n <input id=\"unpaiedFee-{{i}}\" name=\"unassignedRecord\" type=\"radio\"\n (click)=\"selectedPaymentGroup(paymentGroup)\" />\n <label for=\"unpaiedFee-{{i}}\"></label>\n </div>\n </td>\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\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{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\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n\n </tr>\n\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 class=\"govuk-button-group-allocate\">\n <button type=\"button\" class=\"button govuk-!-margin-right-1\" [disabled]=\"isContinueButtondisabled\"\n (click)=\"saveAndContinue()\">\n Continue\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"gotoCasetransationPage()\">\n Cancel\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"(viewStatus === 'mainForm' && !isTurnOff) || viewStatus === 'allocatePaymentConfirmation'\">\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='{{feedbackUrlLabel}}'>\n <h1 class=\"govuk-heading-xl\">Confirm association</h1>\n <h2 class=\"govuk-heading-l govuk-heading-l--custom\">\n Amount to be allocated: {{amountForAllocation | currency:'GBP':'symbol-narrow':'1.2-2'}}\n </h2>\n <div class=\"payment-group-section\" *ngIf=\"paymentGroup\">\n <h3 class=\"govuk-heading-m--custom\" *ngIf=\"isTurnOff\">Group reference: {{paymentGroup.payment_group_reference}}\n </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\">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 </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\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6\" [attr.rowspan]=\"paymentGroup.fees.length\"\n *ngIf=\"i==0\"> {{afterFeeAllocateOutstanding | 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 class=\"govuk-warning-text\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero || remainingAmount === 0\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text govuk-warning-text__custom\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n {{paymentSectionLabel.title}} {{ remainingAmount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </strong>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero\">\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentReasonHasError}\">\n {{paymentSectionLabel.reason}}\n </span>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentExplanationHasError}\">\n Provide an explanatory note\n </span>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n\n <form [formGroup]=\"overUnderPaymentForm\" novalidate>\n <div\n [ngClass]=\"isMoreDetailsBoxHide ? 'govuk-radios__conditional govuk-radios__conditional--hidden' : isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError ? 'govuk-radios__conditional inline-error-border' : 'govuk-radios__conditional'\"\n id=\"conditional-how-contacted-conditional-3\">\n <div class=\"govuk-form-group\">\n <span id=\"more-detail-hint\" class=\"govuk-hint govuk-font__custom\">\n Please enter details\n </span>\n <textarea class=\"govuk-textarea\"\n [ngClass]=\"{'inline-error-class': isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError}\"\n id=\"moreDetails\" name=\"moreDetails\" rows=\"5\" formControlName=\"moreDetails\">\n </textarea>\n <p class=\"inline-error-message\"\n *ngIf=\"isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError\">\n <span *ngIf=\"isPaymentDetailsEmpty\">Enter a explanation</span>\n <span *ngIf=\"isPaymentDetailsInvalid\">Enter a valid explanation</span>\n <span *ngIf=\"paymentDetailsMinHasError\">Explanation should be at least 3 characters.</span>\n <span *ngIf=\"paymentDetailsMaxHasError\">Explanation should be 255 characters or under.</span>\n </p>\n </div>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero\">\n <label class=\"govuk-label govuk-font__custom\" for=\"userName\">\n Enter your name\n </label>\n <input class=\"govuk-input\" id=\"userName\" name=\"userName\" type=\"text\"\n [ngClass]=\"{'inline-error-class': isUserNameEmpty || isUserNameInvalid}\" formControlName=\"userName\">\n <p class=\"inline-error-message\" *ngIf=\"isUserNameEmpty || isUserNameInvalid\">\n <span *ngIf=\"isUserNameEmpty\">Enter your name.</span>\n <span *ngIf=\"isUserNameInvalid\">Enter a valid name</span>\n </p>\n </div>\n <div class=\"govuk-button--group\">\n <button type=\"submit\" [disabled]=\"isConfirmButtondisabled\"\n [ngClass]=\"isConfirmButtondisabled ? 'button button--disabled' : 'button'\"\n (click)=\"confirmAllocatePayement()\">\n Confirm\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"cancelAllocatePayment($event)\">\n Cancel\n </button>\n </div>\n </form>\n </ng-container>\n</div>",
3760
+ template: "<div class=\"allocate-payments\">\n <div *ngIf=\"viewStatus==='mainForm' && isTurnOff\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ALLOCATEPAYMENTS'>\n <div class=\"govuk-breadcrumbs\" *ngIf=\"paymentRef\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"gotoSummaryPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-heading-section\">\n <h1 class=\"govuk-heading-xl\">Allocate payment to fee group</h1>\n <h2 class=\"govuk-heading-l\">Amount left to be allocated:\n {{ unAllocatedPayment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</h2>\n </div>\n <div class=\"payment-group-section\" *ngFor=\"let paymentGroup of paymentGroups\">\n <h3 class=\"govuk-heading-m\">Group reference: {{paymentGroup.payment_group_reference}}</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\"></td>\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\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1 govuk-table__custom--col1\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n <div class=\"multiple-choice\">\n <input id=\"unpaiedFee-{{i}}\" name=\"unassignedRecord\" type=\"radio\"\n (click)=\"selectedPaymentGroup(paymentGroup)\" />\n <label for=\"unpaiedFee-{{i}}\"></label>\n </div>\n </td>\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\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{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\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n\n </tr>\n\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 class=\"govuk-button-group-allocate\">\n <button type=\"button\" class=\"button govuk-!-margin-right-1\" [disabled]=\"isContinueButtondisabled\"\n (click)=\"saveAndContinue()\">\n Continue\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"gotoCasetransationPage()\">\n Cancel\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"(viewStatus === 'mainForm' && !isTurnOff) || viewStatus === 'allocatePaymentConfirmation'\">\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='{{feedbackUrlLabel}}'>\n <h1 class=\"govuk-heading-xl\">Confirm association</h1>\n <h2 class=\"govuk-heading-l govuk-heading-l--custom\">\n Amount to be allocated: {{amountForAllocation | currency:'GBP':'symbol-narrow':'1.2-2'}}\n </h2>\n <div class=\"payment-group-section\" *ngIf=\"paymentGroup\">\n <h3 class=\"govuk-heading-m--custom\" *ngIf=\"isTurnOff\">Group reference: {{paymentGroup.payment_group_reference}}\n </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\">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 </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\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6\" [attr.rowspan]=\"paymentGroup.fees.length\"\n *ngIf=\"i==0\"> {{afterFeeAllocateOutstanding | 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 class=\"govuk-warning-text\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero || remainingAmount === 0\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text govuk-warning-text__custom\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n {{paymentSectionLabel.title}} {{ remainingAmount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </strong>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero\">\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentReasonHasError}\">\n {{paymentSectionLabel.reason}}\n </span>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentExplanationHasError}\">\n Provide an explanatory note\n </span>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n\n <form [formGroup]=\"overUnderPaymentForm\" novalidate>\n <div\n [ngClass]=\"isMoreDetailsBoxHide ? 'govuk-radios__conditional govuk-radios__conditional--hidden' : isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError ? 'govuk-radios__conditional inline-error-border' : 'govuk-radios__conditional'\"\n id=\"conditional-how-contacted-conditional-3\">\n <div class=\"govuk-form-group\">\n <span id=\"more-detail-hint\" class=\"govuk-hint govuk-font__custom\">\n Please enter details\n </span>\n <textarea class=\"govuk-textarea\"\n [ngClass]=\"{'inline-error-class': isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError}\"\n id=\"moreDetails\" name=\"moreDetails\" rows=\"5\" formControlName=\"moreDetails\">\n </textarea>\n <p class=\"inline-error-message\"\n *ngIf=\"isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError\">\n <span *ngIf=\"isPaymentDetailsEmpty\">Enter a explanation</span>\n <span *ngIf=\"isPaymentDetailsInvalid\">Enter a valid explanation</span>\n <span *ngIf=\"paymentDetailsMinHasError\">Explanation should be at least 3 characters.</span>\n <span *ngIf=\"paymentDetailsMaxHasError\">Explanation should be 255 characters or under.</span>\n </p>\n </div>\n </div>\n <div class=\"govuk-button--group\">\n <button type=\"submit\" [disabled]=\"isConfirmButtondisabled\"\n [ngClass]=\"isConfirmButtondisabled ? 'button button--disabled' : 'button'\"\n (click)=\"confirmAllocatePayement()\">\n Confirm\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"cancelAllocatePayment($event)\">\n Cancel\n </button>\n </div>\n </form>\n </ng-container>\n</div>",
3717
3761
  styles: [".allocate-payments{margin:20px 0}.allocate-payments .govuk-table__cell--col1,.allocate-payments .govuk-table__cell--col3{width:10%}.allocate-payments .govuk-table__cell--col2,.allocate-payments .govuk-table__cell--col6{width:25%}.allocate-payments .govuk-table__cell--col4,.allocate-payments .govuk-table__cell--col5{width:15%}.allocate-payments .govuk-button-group-allocate{display:flex;justify-content:flex-start}.allocate-payments .govuk-button--secondary{margin-left:10px;background-color:#b3b8bdf2}.allocate-payments .govuk-custom-warning__message{font-size:30px;position:relative;top:12px;font-weight:700}.allocate-payments .govuk-warning-text-custom{margin-bottom:0!important;padding:10px 0 5px}.allocate-payments .govuk-table__custom--col1{padding-top:0;padding-bottom:20px;padding-left:15px}.allocate-payments .govuk-table__custom--col6{text-align:center}.allocate-payments .govuk-list__custom{padding-left:20px}.allocate-payments .govuk-font__custom,.allocate-payments .govuk-heading-m--custom,.allocate-payments .govuk-hint,.allocate-payments .govuk-label--m,.allocate-payments .govuk-list__custom,.allocate-payments .govuk-radios__item,.allocate-payments .govuk-warning-text__custom{font-size:19px}.allocate-payments .govuk-radios__conditional--hidden{display:none}.allocate-payments .form-group-error{border-left:5px solid #b10e1e;padding-left:15px}.allocate-payments .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.allocate-payments .inline-error-message{color:#a71414;font-weight:700;margin-top:10px}.allocate-payments .inline-error-border{border-color:#a71414}"]
3718
3762
  },] },
3719
3763
  ];
@@ -3729,7 +3773,8 @@
3729
3773
  ];
3730
3774
  };
3731
3775
  AllocatePaymentsComponent.propDecorators = {
3732
- isTurnOff: [{ type: i0.Input }]
3776
+ isTurnOff: [{ type: i0.Input }],
3777
+ caseType: [{ type: i0.Input }]
3733
3778
  };
3734
3779
  return AllocatePaymentsComponent;
3735
3780
  }());
@@ -3739,12 +3784,12 @@
3739
3784
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
3740
3785
  */
3741
3786
  var AddRemissionRequest = (function () {
3742
- function AddRemissionRequest(ccd_case_number, fee, hwf_amount, hwf_reference, service) {
3787
+ function AddRemissionRequest(ccd_case_number, fee, hwf_amount, hwf_reference, caseType) {
3743
3788
  this.ccd_case_number = ccd_case_number;
3744
3789
  this.fee = fee;
3745
3790
  this.hwf_amount = hwf_amount;
3746
3791
  this.hwf_reference = hwf_reference;
3747
- this.site_id = service;
3792
+ this.case_type = caseType;
3748
3793
  }
3749
3794
  return AddRemissionRequest;
3750
3795
  }());
@@ -3862,11 +3907,12 @@
3862
3907
  /** @type {?} */
3863
3908
  var remissionAmount = this.fee.net_amount - newNetAmount;
3864
3909
  /** @type {?} */
3865
- var requestBody = new AddRemissionRequest(this.ccdCaseNumber, this.fee, remissionAmount, this.remissionForm.controls["remissionCode"].value, this.service);
3910
+ var requestBody = new AddRemissionRequest(this.ccdCaseNumber, this.fee, remissionAmount, this.remissionForm.controls["remissionCode"].value, this.caseType);
3866
3911
  this.paymentViewService.postPaymentGroupWithRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe(function (response) {
3867
3912
  if (JSON.parse(response).success) {
3868
3913
  /** @type {?} */
3869
3914
  var LDUrl = _this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
3915
+ LDUrl += "&caseType=" + _this.caseType;
3870
3916
  if (_this.paymentLibComponent.bspaymentdcn) {
3871
3917
  _this.router.routeReuseStrategy.shouldReuseRoute = function () { return false; };
3872
3918
  _this.router.onSameUrlNavigation = 'reload';
@@ -3904,6 +3950,7 @@
3904
3950
  partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
3905
3951
  partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
3906
3952
  partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
3953
+ partUrl += "&caseType=" + this.caseType;
3907
3954
  /** @type {?} */
3908
3955
  var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=true&selectedOption=" + this.option + partUrl;
3909
3956
  this.router.navigateByUrl(url);
@@ -3927,7 +3974,7 @@
3927
3974
  AddRemissionComponent.propDecorators = {
3928
3975
  fee: [{ type: i0.Input }],
3929
3976
  ccdCaseNumber: [{ type: i0.Input }],
3930
- service: [{ type: i0.Input }],
3977
+ caseType: [{ type: i0.Input }],
3931
3978
  paymentGroupRef: [{ type: i0.Input }],
3932
3979
  isTurnOff: [{ type: i0.Input }],
3933
3980
  isStrategicFixEnable: [{ type: i0.Input }],
@@ -4206,7 +4253,7 @@
4206
4253
  function (worksheet) {
4207
4254
  worksheet["A1"].v = "Resp_Service ID";
4208
4255
  worksheet["B1"].v = "Resp_Service Name";
4209
- worksheet["C1"].v = "Surplus_Shortfall";
4256
+ worksheet["C1"].v = "Over Payment_Under Payment";
4210
4257
  worksheet["D1"].v = "Balance";
4211
4258
  worksheet["E1"].v = "Payment_Amount";
4212
4259
  worksheet["F1"].v = "CCD_Case_Ref";
@@ -4376,6 +4423,11 @@
4376
4423
  if (res['data'][i]["balance"] !== undefined) {
4377
4424
  res['data'][i]['balance'] = _this.convertToFloatValue(res['data'][i]["balance"]);
4378
4425
  }
4426
+ /** @type {?} */
4427
+ var Op = res['data'][i]["surplus_shortfall"];
4428
+ if (Op !== undefined) {
4429
+ res['data'][i]['surplus_shortfall'] = Op == "Surplus" ? "Over payment" : "Under payment";
4430
+ }
4379
4431
  if (res['data'][i]["payment_amount"] !== undefined) {
4380
4432
  res['data'][i]['payment_amount'] = _this.convertToFloatValue(res['data'][i]['payment_amount']);
4381
4433
  }
@@ -4503,7 +4555,7 @@
4503
4555
  break;
4504
4556
  }
4505
4557
  case 'SURPLUS_AND_SHORTFALL': {
4506
- result = 'Surplus_Shortfall';
4558
+ result = 'Over Payment_Under Payment';
4507
4559
  break;
4508
4560
  }
4509
4561
  default: {
@@ -4547,7 +4599,7 @@
4547
4599
  ReportsComponent.decorators = [
4548
4600
  { type: i0.Component, args: [{
4549
4601
  selector: 'ccpay-reports',
4550
- template: "<div class=\"header\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='REPORTS'>\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <legend class=\"govuk-fieldset__legend--xl\">\n <h1 class=\"govuk-fieldset__heading\"> Choose the report type and date range</h1>\n </legend>\n</div>\n<form [formGroup]=\"reportsForm\">\n <div class=\"govuk-form-group\">\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input \n required\n id=\"DataLoss\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('DATA_LOSS')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"DATA_LOSS\" \n data-aria-controls=\"DataLoss\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"DataLoss\">Data loss</label>\n <span class=\"form-hint\">Missing transactions where data has been received from only either of Exela or Bulk scan</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"UnprocessedTransactions\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('UNPROCESSED')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"UNPROCESSED\" \n data-aria-controls=\"UnprocessedTransactions\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"UnprocessedTransactions\">Unprocessed transactions</label>\n <span class=\"form-hint\">Transaction records that are still unprocessed by staff.</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ProcessedUnallocated\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('PROCESSED_UNALLOCATED')\"\n type=\"radio\"\n value=\"PROCESSED_UNALLOCATED\" \n data-aria-controls=\"ProcessedUnallocated\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ProcessedUnallocated\">Processed unallocated</label>\n <span class=\"form-hint\">Payments that are marked as \u2018Unidentified\u2019 or \u2018Transferred\u2019 (Unsolicited requests)</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ShortfallsandSurplus\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('SURPLUS_AND_SHORTFALL')\"\n type=\"radio\"\n value=\"SURPLUS_AND_SHORTFALL\" \n data-aria-controls=\"ShortfallsandSurplus\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ShortfallsandSurplus\">Shortfalls and surplus</label>\n <span class=\"form-hint\">Requests where balances are marked as shortfall/surplus further case management.\n E.g: Refund approval, Customer contact</span>\n </div>\n \n </div>\n </div>\n <div class=\"govuk-form-group\">\n <div class=\"datefrom\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-from\">Date from</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-from\" name=\"date-from\" type=\"date\" formControlName=\"startDate\" required/>\n </div>\n\n <div class=\"dateto\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-to\">Date to</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-to\" name=\"search\" type=\"date\" formControlName=\"endDate\" required/>\n </div>\n </div>\n <p class=\"inline-error-message\" *ngIf=\"isStartDateLesthanEndDate || isDateRangeBetnWeek\">\n <span *ngIf=\"isStartDateLesthanEndDate\">Please select 'Date From' less than or equal to 'Date To'</span>\n <span *ngIf=\"isDateRangeBetnWeek\"> Please select the date range between 7 days</span>\n </p>\n <div class=\"btnsubmit\">\n <button type=\"submit\" (click)=\"downloadReport()\" class=\"button\" [disabled]=\"!reportsForm.valid || isDownLoadButtondisabled || isStartDateLesthanEndDate || isDateRangeBetnWeek\">Download report</button>\n </div>\n </form>\n ",
4602
+ template: "<div class=\"header\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='REPORTS'>\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <legend class=\"govuk-fieldset__legend--xl\">\n <h1 class=\"govuk-fieldset__heading\"> Choose the report type and date range</h1>\n </legend>\n</div>\n<form [formGroup]=\"reportsForm\">\n <div class=\"govuk-form-group\">\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input \n required\n id=\"DataLoss\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('DATA_LOSS')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"DATA_LOSS\" \n data-aria-controls=\"DataLoss\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"DataLoss\">Data loss</label>\n <span class=\"form-hint\">Missing transactions where data has been received from only either of Exela or Bulk scan</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"UnprocessedTransactions\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('UNPROCESSED')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"UNPROCESSED\" \n data-aria-controls=\"UnprocessedTransactions\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"UnprocessedTransactions\">Unprocessed transactions</label>\n <span class=\"form-hint\">Transaction records that are still unprocessed by staff.</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ProcessedUnallocated\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('PROCESSED_UNALLOCATED')\"\n type=\"radio\"\n value=\"PROCESSED_UNALLOCATED\" \n data-aria-controls=\"ProcessedUnallocated\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ProcessedUnallocated\">Processed unallocated</label>\n <span class=\"form-hint\">Payments that are marked as \u2018Unidentified\u2019 or \u2018Transferred\u2019 (Unsolicited requests)</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ShortfallsandSurplus\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('SURPLUS_AND_SHORTFALL')\"\n type=\"radio\"\n value=\"SURPLUS_AND_SHORTFALL\" \n data-aria-controls=\"ShortfallsandSurplus\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ShortfallsandSurplus\">Under payment and Over payment</label>\n <span class=\"form-hint\">Requests where balances are marked as Under payment/Over payment further case management.\n E.g: Refund approval, Customer contact</span>\n </div>\n \n </div>\n </div>\n <div class=\"govuk-form-group\">\n <div class=\"datefrom\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-from\">Date from</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-from\" name=\"date-from\" type=\"date\" formControlName=\"startDate\" required/>\n </div>\n\n <div class=\"dateto\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-to\">Date to</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-to\" name=\"search\" type=\"date\" formControlName=\"endDate\" required/>\n </div>\n </div>\n <p class=\"inline-error-message\" *ngIf=\"isStartDateLesthanEndDate || isDateRangeBetnWeek\">\n <span *ngIf=\"isStartDateLesthanEndDate\">Please select 'Date From' less than or equal to 'Date To'</span>\n <span *ngIf=\"isDateRangeBetnWeek\"> Please select the date range between 7 days</span>\n </p>\n <div class=\"btnsubmit\">\n <button type=\"submit\" (click)=\"downloadReport()\" class=\"button\" [disabled]=\"!reportsForm.valid || isDownLoadButtondisabled || isStartDateLesthanEndDate || isDateRangeBetnWeek\">Download report</button>\n </div>\n </form>\n \n",
4551
4603
  styles: [".govuk-radios__input:focus+.govuk-radios__label::before{border-width:4px;box-shadow:0 0 0 4px #ffaf00}.datefrom{width:50%;float:left}.dateto{width:50%;float:right}.govuk-label--m{font-size:large}.form-hint{padding-left:.7em}.header{margin-top:10px;margin-bottom:15px}.btnsubmit{margin-bottom:30px}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px}"]
4552
4604
  },] },
4553
4605
  ];
@@ -4660,4 +4712,4 @@
4660
4712
 
4661
4713
  })));
4662
4714
 
4663
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtY2NwYXktd2ViLWNvbXBvbmVudC51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9wYXltZW50LWxpYi5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGF5bWVudC1saWIuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2Vycm9yLWhhbmRsZXIuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9zZXJ2aWNlcy9wYXltZW50LWxpc3QvcGF5bWVudC1saXN0LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvY2FyZC1kZXRhaWxzL2NhcmQtZGV0YWlscy5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3BhZ2Utbm90LWZvdW5kLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvcGJhLWRldGFpbHMvcGJhLWRldGFpbHMuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvc2hhcmVkL2xvZ2dlci9jb25zb2xlLWxvZ2dlci5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC50cyIsbnVsbCwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9QYXltZW50VG9QYXlodWJSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9mZWUtc3VtbWFyeS9mZWUtc3VtbWFyeS5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2Vycm9yLWJhbm5lci9lcnJvci1iYW5uZXIuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvaW50ZXJmYWNlcy9VbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL0FsbG9jYXRlUGF5bWVudFJlcXVlc3QudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL21hcmstdW5pZGVudGlmaWVkLXBheW1lbnQvbWFyay11bmlkZW50aWZpZWQtcGF5bWVudC5jb21wb25lbnQudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9pbnRlcmZhY2VzL1Vuc29saWNpdGVkUGF5bWVudHNSZXF1ZXN0LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9tYXJrLXVuc29saWNpdGVkLXBheW1lbnQvbWFyay11bnNvbGljaXRlZC1wYXltZW50LmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvdW5wcm9jZXNzZWQtcGF5bWVudHMvdW5wcm9jZXNzZWQtcGF5bWVudHMuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9wcm9jZXNzZWQtcGF5bWVudHMvcHJvY2Vzc2VkLXBheW1lbnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2ludGVyZmFjZXMvSUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3QudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9jb21wb25lbnRzL2FsbG9jYXRlLXBheW1lbnRzL2FsbG9jYXRlLXBheW1lbnRzLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2ludGVyZmFjZXMvQWRkUmVtaXNzaW9uUmVxdWVzdC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL2NvbXBvbmVudHMvYWRkLXJlbWlzc2lvbi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudC50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3BpcGVzL2NjZC1oeXBoZW5zLnBpcGUudHMiLCJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50L2xpYi9waXBlcy9rZXktdmFsdWUucGlwZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3BpcGVzL3Nhbml0aXplLWh0bWwucGlwZS50cyIsIm5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvbGliL3NlcnZpY2VzL3hsLWZpbGUveGwtZmlsZS5zZXJ2aWNlLnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvY29tcG9uZW50cy9yZXBvcnRzL3JlcG9ydHMuY29tcG9uZW50LnRzIiwibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC9saWIvcGF5bWVudC1saWIubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGliU2VydmljZSB7XG4gIEFQSV9ST09UOiBzdHJpbmc7XG4gIEJVTEtTQ0FOX0FQSV9ST09UOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBzZXRBcGlSb290VXJsKGFwaVJvb3Q6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuQVBJX1JPT1QgPSBhcGlSb290O1xuICB9XG5cbiAgZ2V0QXBpUm9vdFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkFQSV9ST09UO1xuICB9XG5cbiAgc2V0QnVsa1NjYW5BcGlSb290VXJsKGJ1bGtzY2FuYXBpUm9vdDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5CVUxLU0NBTl9BUElfUk9PVCA9IGJ1bGtzY2FuYXBpUm9vdDtcbiAgfVxuXG4gIGdldEJ1bGtTY2FuQXBpUm9vdFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkJVTEtTQ0FOX0FQSV9ST09UO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuL3BheW1lbnQtbGliLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJTUGF5bWVudHMgfSBmcm9tICcuL2ludGVyZmFjZXMvSUJTUGF5bWVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYXltZW50LWxpYicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGNjcGF5LXBheW1lbnQtbGlzdCAqbmdJZj1cInZpZXdOYW1lID09PSAncGF5bWVudC1saXN0J1wiPjwvY2NwYXktcGF5bWVudC1saXN0PlxuICAgIDxjY3BheS1wYXltZW50LXZpZXcgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3BheW1lbnQtdmlldydcIlxuICAgIFtpc1R1cm5PZmZdPVwiSVNUVVJOT0ZGXCI+PC9jY3BheS1wYXltZW50LXZpZXc+XG4gICAgPGNjcGF5LWNhc2UtdHJhbnNhY3Rpb25zICAqbmdJZj1cInZpZXdOYW1lID09PSAnY2FzZS10cmFuc2FjdGlvbnMnXCI+PC9jY3BheS1jYXNlLXRyYW5zYWN0aW9ucz5cbiAgICA8YXBwLW1hcmstdW5pZGVudGlmaWVkLXBheW1lbnQgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3VuaWRlbnRpZmllZFBhZ2UnXCI+PC9hcHAtbWFyay11bmlkZW50aWZpZWQtcGF5bWVudD5cbiAgICA8YXBwLW1hcmstdW5zb2xpY2l0ZWQtcGF5bWVudCAqbmdJZj1cInZpZXdOYW1lID09PSAndW5zb2xpY2l0ZWRQYWdlJ1wiPjwvYXBwLW1hcmstdW5zb2xpY2l0ZWQtcGF5bWVudD5cbiAgICA8YXBwLWFsbG9jYXRlLXBheW1lbnRzICpuZ0lmPVwidmlld05hbWUgPT09ICdhbGxvY2F0ZS1wYXltZW50cydcIlxuICAgIFtpc1R1cm5PZmZdPVwiSVNUVVJOT0ZGXCI+PC9hcHAtYWxsb2NhdGUtcGF5bWVudHM+XG4gICAgPGNjcGF5LWZlZS1zdW1tYXJ5ICpuZ0lmPVwidmlld05hbWUgPT09ICdmZWUtc3VtbWFyeSdcIlxuICAgICAgW2NjZENhc2VOdW1iZXJdPVwiQ0NEX0NBU0VfTlVNQkVSXCIgW3BheW1lbnRHcm91cFJlZl09XCJwYXltZW50R3JvdXBSZWZlcmVuY2VcIlxuICAgICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIj48L2NjcGF5LWZlZS1zdW1tYXJ5PlxuICAgIDxjY3BheS1yZXBvcnRzICpuZ0lmPVwidmlld05hbWUgPT09ICdyZXBvcnRzJ1wiPjwvY2NwYXktcmVwb3J0cz5cbiAgICBgXG59KVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudExpYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnQVBJX1JPT1QnKSBBUElfUk9PVDogc3RyaW5nO1xuICBASW5wdXQoJ0JVTEtTQ0FOX0FQSV9ST09UJykgQlVMS1NDQU5fQVBJX1JPT1Q6IHN0cmluZztcbiAgQElucHV0KCdDQ0RfQ0FTRV9OVU1CRVInKSBDQ0RfQ0FTRV9OVU1CRVI6IHN0cmluZztcbiAgQElucHV0KCdFWENfUkVGRVJFTkNFJykgRVhDX1JFRkVSRU5DRTogc3RyaW5nO1xuICBASW5wdXQoJ1BBWU1FTlRfTUVUSE9EJykgUEFZTUVOVF9NRVRIT0Q6IHN0cmluZztcbiAgQElucHV0KCdWSUVXJykgVklFVzogc3RyaW5nO1xuICBASW5wdXQoJ1BBWU1FTlRfR1JPVVBfUkVGJykgUEFZTUVOVF9HUk9VUF9SRUY/OiBzdHJpbmc7XG4gIEBJbnB1dCgnVEFLRVBBWU1FTlQnKSBUQUtFUEFZTUVOVDogYm9vbGVhbjtcbiAgQElucHV0KCdEQ05fTlVNQkVSJykgRENOX05VTUJFUjogc3RyaW5nO1xuICBASW5wdXQoJ1NFTEVDVEVEX09QVElPTicpIFNFTEVDVEVEX09QVElPTjogc3RyaW5nO1xuICBASW5wdXQoJ0lTQlNFTkFCTEUnKSBJU0JTRU5BQkxFOiBCb29sZWFuO1xuICBASW5wdXQoJ0lTU0ZFTkFCTEUnKSBJU1NGRU5BQkxFOiBib29sZWFuO1xuICBASW5wdXQoJ0lTVFVSTk9GRicpIElTVFVSTk9GRjogYm9vbGVhbjtcblxuICBwYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICB1blByb2Nlc3NlZFBheW1lbnRTZXJ2aWNlSWQ6IHN0cmluZyA9IG51bGw7XG4gIHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmc7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgdW5Qcm9jZXNzZWRQYXltZW50OiBJQlNQYXltZW50cyA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGF5bWVudExpYlNlcnZpY2Uuc2V0QXBpUm9vdFVybCh0aGlzLkFQSV9ST09UKTtcbiAgICB0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLnNldEJ1bGtTY2FuQXBpUm9vdFVybCh0aGlzLkJVTEtTQ0FOX0FQSV9ST09UKTtcbiAgICBpZiAodGhpcy5QQVlNRU5UX0dST1VQX1JFRikge1xuICAgICAgdGhpcy5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLlBBWU1FTlRfR1JPVVBfUkVGO1xuICAgIH1cbiAgICBpZiAodGhpcy5EQ05fTlVNQkVSKSB7XG4gICAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMuRENOX05VTUJFUjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5WSUVXID09PSAnZmVlLXN1bW1hcnknKSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9IGVsc2UgIGlmICh0aGlzLlZJRVcgIT09ICdyZXBvcnRzJykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSB0aGlzLlZJRVc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBfdGhyb3cgfSBmcm9tICdyeGpzL29ic2VydmFibGUvdGhyb3cnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cblxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cblxuICBoYW5kbGVFcnJvcihlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBBIGNsaWVudC1zaWRlIG9yIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgQW4gZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGlmICghZXJyLmVycm9yKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ05vdCBmb3VuZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVyci5lcnJvci5tZXNzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9ICdTZXJ2ZXIgZXJyb3InO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyLmVycm9yLm1lc3NhZ2V9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF90aHJvdyhlcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGlzRXJyb3JFeGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogXCJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZVwiLFxuICAgICAgYm9keTogXCJUcnkgYWdhaW4gbGF0ZXJcIixcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBub29wID0gKCk6IGFueSA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMb2dnZXIge1xuXG4gIGluZm86IGFueTtcbiAgd2FybjogYW55O1xuICBlcnJvcjogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyIHtcblxuICBpbmZvOiBhbnk7XG4gIHdhcm46IGFueTtcbiAgZXJyb3I6IGFueTtcblxuICBpbnZva2VDb25zb2xlTWV0aG9kKHR5cGU6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQge31cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBJUGF5bWVudHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50cyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50TGlzdFNlcnZpY2Uge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG5cbiAgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcihjY2RDYXNlTnVtYmVyOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnRzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC1saXN0LXNlcnZpY2UgZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlciBmb3I6ICcsIGNjZENhc2VOdW1iZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnRzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9L3BheW1lbnRzYCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtQYXltZW50TGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtbGlzdC9wYXltZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudHMnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJU3RhdHVzSGlzdG9yeX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3RhdHVzSGlzdG9yeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICBQYXltZW50cyBsaXN0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWRcbiAgICAgIDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBwYXltZW50c1wiPlxuXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgZ3JvdXAgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPkRhdGUgY3JlYXRlZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5DaGFubmVsPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYm9sZCBmb250LXhzbWFsbFwiPk1ldGhvZDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImJvbGQgZm9udC14c21hbGxcIj5BbW91bnQ8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJib2xkIGZvbnQteHNtYWxsXCI+U3RhdHVzPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgcGF5bWVudHMucGF5bWVudHNcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRQYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCBwYXltZW50LnBheW1lbnRfcmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlIH19PC9hPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQucGF5bWVudF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgaGg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj57eyBwYXltZW50LmNoYW5uZWwgfCB0aXRsZWNhc2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJmb250LXhzbWFsbFwiPnt7IHBheW1lbnQubWV0aG9kIHwgdGl0bGVjYXNlIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZm9udC14c21hbGxcIj7DgsKje3sgcGF5bWVudC5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInBheW1lbnQubWV0aG9kID09PSAnY2FyZCcgJiYgcGF5bWVudC5jaGFubmVsID09PSAnb25saW5lJ1wiPlxuICAgICAgICAgIDxkZXRhaWxzPlxuICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9XCJzdW1tYXJ5IGZvbnQteHNtYWxsXCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3NwYW4+PC9zdW1tYXJ5PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWJvcmRlci1uYXJyb3dcIiAqbmdJZj1cInBheW1lbnQuc3RhdHVzID09PSAnRmFpbGVkJ1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0dXNIaXN0b3J5IG9mIHBheW1lbnQuc3RhdHVzX2hpc3Rvcmllc1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDEwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCByZWplY3RlZCBkdWUgdG8gcGF5bWVudCBtZXRob2Qgc2VsZWN0ZWQgb3IgcGF5bWVudCBpbmZvcm1hdGlvbiBlbnRlcmVkLCBmb3IgZXhhbXBsZSwgZmFpbGVkIGZyYXVkIGNoZWNrLCBhIDNEIFNlY3VyZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCBvciB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIGVub3VnaCBtb25leSBpbiBhY2NvdW50XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC14c21hbGxcIiAqbmdJZj1cInN0YXR1c0hpc3RvcnkuZXJyb3JfY29kZSA9PT0gJ1AwMDIwJ1wiPlxuICAgICAgICAgICAgICAgICAgUGF5bWVudCB3YXMgbm90IGNvbmZpcm1lZCBhbmQgY29tcGxldGVkIHdpdGhpbiA5MCBtaW51dGVzIG9mIGJlaW5nIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXhzbWFsbFwiICpuZ0lmPVwic3RhdHVzSGlzdG9yeS5lcnJvcl9jb2RlID09PSAnUDAwMzAnXCI+XG4gICAgICAgICAgICAgICAgICBVc2VyIGNsaWNrZWQgb24gdGhlIMOiwoDCnENhbmNlbCBwYXltZW50w6LCgMKdIGJ1dHRvbiBkdXJpbmcgdGhlIHBheW1lbnQgam91cm5leVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCIgKm5nSWY9XCJzdGF0dXNIaXN0b3J5LmVycm9yX2NvZGUgPT09ICdQMDA1MCdcIj5cbiAgICAgICAgICAgICAgICAgIE11bHRpcGxlIHBvc3NpYmxlIGNhdXNlcywgZm9yIGV4YW1wbGUgYSBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCB0aGUgcGF5bWVudCBwcm92aWRlciwgb3IgaW5jb3JyZWN0IGxvZ2luIGNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdjYXJkJyAmJiBwYXltZW50LmNoYW5uZWwgPT09ICd0ZWxlcGhvbnknXCIgY2xhc3M9XCJmb250LXhzbWFsbFwiPlxuICAgICAgICAgIHt7IHBheW1lbnQuc3RhdHVzfX1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudC5tZXRob2QgPT09ICdwYXltZW50IGJ5IGFjY291bnQnXCI+XG4gICAgICAgICAgPGRldGFpbHM+XG4gICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz1cInN1bW1hcnkgZm9udC14c21hbGxcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvc3Bhbj48L3N1bW1hcnk+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtYm9yZGVyLW5hcnJvd1wiICpuZ0lmPVwicGF5bWVudC5zdGF0dXMgPT09ICdQZW5kaW5nJ1wiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQteHNtYWxsXCI+VGhpcyBtZWFucyB0aGUgdHJhbnNhY3Rpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IExpYmVyYXRhLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90YWJsZT5cblxuICA8L2Rpdj5cblxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwYXltZW50czogSVBheW1lbnRzO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudExpc3RTZXJ2aWNlOiBQYXltZW50TGlzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXltZW50TGlzdFNlcnZpY2UuZ2V0UGF5bWVudEJ5Q2NkQ2FzZU51bWJlcih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLCB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUEFZTUVOVF9NRVRIT0QpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50cyA9PiB0aGlzLnBheW1lbnRzID0gcGF5bWVudHMsXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICAgICk7XG4gIH1cblxuICBsb2FkUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50UmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYkNvbXBvbmVudEh0dHBDbGllbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtZXRhOiBNZXRhXG4gICkgeyB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCBvcHRzKTtcbiAgfVxuXG4gIHB1dCh1cmw6IHN0cmluZywgYm9keTogYW55IHwgbnVsbCwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuYWRkSGVhZGVycyhvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nLCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5hZGRIZWFkZXJzKG9wdGlvbnMgfHwge30pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgb3B0cyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodXJsLCBvcHRzKTtcbiAgfVxuICBcbiAgcGF0Y2godXJsOiBzdHJpbmcsIGJvZHk6IGFueSB8IG51bGwsIG9wdGlvbnM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFkZEhlYWRlcnMob3B0aW9ucyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaCh1cmwsIGJvZHksIG9wdHMpO1xuICB9XG5cbiAgYWRkSGVhZGVycyhvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNzcmZUb2tlbiA9IHRoaXMubWV0YS5nZXRUYWcoJ25hbWU9Y3NyZi10b2tlbicpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaGVhZGVyc1tlbGVtZW50XSA9IG9wdGlvbnMuaGVhZGVycy5nZXQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaGVhZGVyc1snWC1SZXF1ZXN0ZWQtV2l0aCddID0gJ1hNTEh0dHBSZXF1ZXN0JztcbiAgICBoZWFkZXJzWydDU1JGLVRva2VuJ10gPSBjc3JmVG9rZW4uY29udGVudDtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoaGVhZGVycyk7XG4gICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRIdHRwQ2xpZW50IH0gZnJvbSAnLi4vc2hhcmVkL2h0dHBjbGllbnQvd2ViY29tcG9uZW50Lmh0dHAuY2xpZW50JztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgVW5pZGVudGlmaWVkUGF5bWVudHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9VbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QnO1xuaW1wb3J0IHsgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Vuc29saWNpdGVkUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFsbG9jYXRlUGF5bWVudFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FsbG9jYXRlUGF5bWVudFJlcXVlc3QnO1xuaW1wb3J0IHsgSUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgbWV0YTogTWV0YTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cHM6IFdlYkNvbXBvbmVudEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlKSB7IH1cblxuICBnZXRQYXltZW50RGV0YWlscyhwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZyk6IE9ic2VydmFibGU8SVBheW1lbnQ+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdQYXltZW50LXZpZXctc2VydmljZSBnZXRQYXltZW50RGV0YWlscyBmb3I6ICcsIHBheW1lbnRSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnQ+KHBheW1lbnRNZXRob2QgPT09ICdjYXJkJyB8fCBwYXltZW50TWV0aG9kID09PSAnY2FzaCcgfHwgcGF5bWVudE1ldGhvZCA9PT0gJ2NoZXF1ZScgfHwgcGF5bWVudE1ldGhvZCA9PT0gJ3Bvc3RhbCBvcmRlcicgP1xuICAgICAgICAgIGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2NhcmQtcGF5bWVudHMvJHtwYXltZW50UmVmZXJlbmNlfWAgOlxuICAgICAgICAgIGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L2NyZWRpdC1hY2NvdW50LXBheW1lbnRzLyR7cGF5bWVudFJlZmVyZW5jZX1gLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICBnZXRQYXltZW50R3JvdXBEZXRhaWxzKHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJUGF5bWVudEdyb3VwPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC12aWV3LXNlcnZpY2UgZ2V0UGF5bWVudEdyb3VwRGV0YWlscyBmb3I6ICcsIHBheW1lbnRHcm91cFJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUGF5bWVudD4oYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZlcmVuY2V9YCwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbiAgZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHMocGF5bWVudFJlZmVyZW5jZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJUGF5bWVudEdyb3VwPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC12aWV3LXNlcnZpY2UgZ2V0UGF5bWVudEdyb3VwRGV0YWlscyBmb3I6ICcsIHBheW1lbnRSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnQ+KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzL2ZlZS1wYXktYXBwb3J0aW9uLyR7cGF5bWVudFJlZmVyZW5jZX1gLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuICBwb3N0QlNQYXltZW50cyhib2R5OiBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzL2J1bGstc2Nhbi1wYXltZW50c2AsIGJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RCU1VuaWRlbnRpZmllZFBheW1lbnRzKGJvZHk6IFVuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWFsbG9jYXRpb25zYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcG9zdEJTVW5zb2xpY2l0ZWRQYXltZW50cyhib2R5OiBVbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWFsbG9jYXRpb25zYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcG9zdEJTQWxsb2NhdGlvblBheW1lbnRzKGJvZHk6IElBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtYWxsb2NhdGlvbnNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyhwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZywgZmVlSWQ6IG51bWJlciwgYm9keTogQWRkUmVtaXNzaW9uUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucG9zdChgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9wYXltZW50LWdyb3Vwcy8ke3BheW1lbnRHcm91cFJlZmVyZW5jZX0vZmVlcy8ke2ZlZUlkfS9yZW1pc3Npb25zYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWVJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbygnUGF5bWVudC12aWV3LXNlcnZpY2UgZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cCBmb3I6ICcsIGZlZUlkKTtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5kZWxldGUoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vZmVlcy8ke2ZlZUlkfWApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcilcbiAgICApO1xuICB9XG4gIHBvc3RQYXltZW50VG9QYXlIdWIoYm9keTogUGF5bWVudFRvUGF5aHViUmVxdWVzdCwgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50R3JvdXBSZWZ9L2NhcmQtcGF5bWVudHNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBkb3dubG9hZFNlbGVjdGVkUmVwb3J0KHJlcG9ydE5hbWU6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6c3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9yZXBvcnQvZGF0YT9kYXRlX2Zyb209JHtzdGFydERhdGV9JmRhdGVfdG89JHtlbmREYXRlfSZyZXBvcnRfdHlwZT0ke3JlcG9ydE5hbWV9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5nZXQodXJsLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KS5waXBlKCBjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcikpO1xuICB9XG4gIGdldEJTZmVhdHVyZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLmdldCgnYXBpL3BheW1lbnQtaGlzdG9yeS9idWxrLXNjYW4tZmVhdHVyZScsIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pLnBpcGUoIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKSk7XG4gIH1cbiAgZ2V0U2l0ZUlEKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZ2V0KCdhcGkvcGF5bWVudC1oaXN0b3J5L3JlZmRhdGEvbGVnYWN5LXNpdGVzJywgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkucGlwZSggY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50Vmlld1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge1BheW1lbnRMaWJDb21wb25lbnR9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtdmlldycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiPlxuICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCI+XG4gICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cImdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYmFjay1saW5rXCI+QmFjazwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgPC9kaXY+XG5cbiAgPG1haW4gY2xhc3M9XCJnb3Z1ay1tYWluLXdyYXBwZXIgZ292dWstIS1wYWRkaW5nLXRvcC0wXCIgaWQ9XCJtYWluLWNvbnRlbnRcIiByb2xlPVwibWFpblwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVycm9yLXN1bW1hcnlcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsbGVkYnk9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICAgIFBheW1lbnQgZGV0YWlscyBjb3VsZCBub3QgYmUgcmV0cmlldmVkXG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC12aWV3LWFsaWdubWVudFwiICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBwYXltZW50R3JvdXBcIj5cblxuICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdQQVlNRU5UREVUQUlMUyc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2UgZ292dWstIS1tYXJnaW4tdG9wLTBcIj5QYXltZW50IGRldGFpbHM8L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGJvZHk+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBncm91cCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhbW91bnQ8L3RkPlxuICAgICAgICAgIDx0ZD7DgsKje3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnBheW1lbnRzWzBdICYmIHBheW1lbnRHcm91cC5wYXltZW50c1swXS5leHRlcm5hbF9yZWZlcmVuY2VcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+R292UGF5IFRyYW5zYWN0aW9uIElEPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmV4dGVybmFsX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50c1swXSAmJiBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgJiYgIXBheW1lbnRHcm91cC5wYXltZW50c1swXS5leHRlcm5hbF9yZWZlcmVuY2VcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhc3NldCBudW1iZXIoRENOKTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5kb2N1bWVudF9jb250cm9sX251bWJlciB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50c1swXSAmJiBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgJiYgIXBheW1lbnRHcm91cC5wYXltZW50c1swXS5leHRlcm5hbF9yZWZlcmVuY2VcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+QmFua2VkIGRhdGU8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uYmFua2VkX2RhdGUgfCBkYXRlOidkZCBNTU0geXl5eScgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+RmVlIGFuZCByZW1pc3Npb24gZGV0YWlsczwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlc1wiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgPHRkPkFwcGxpY2F0aW9uIGZvciB7eyBmZWUuZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkZlZSBjb2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyBmZWUuY29kZSB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCIgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLmFwcG9ydGlvbl9hbW91bnQgJiYgIWZlZS5yZW1pc3Npb25zICYmICFpc1R1cm5PZmYgfVwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9ucyAmJiAhaXNUdXJuT2ZmIH1cIj7DgsKje3sgZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLm5ldF9hbW91bnQgJiYgaXNUdXJuT2ZmXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCIgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLmFwcG9ydGlvbl9hbW91bnQgJiYgIWZlZS5yZW1pc3Npb25zfVwiID5OZXQgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RyLWJvcmRlcic6ICFmZWUuYXBwb3J0aW9uX2Ftb3VudCAmJiAhZmVlLnJlbWlzc2lvbnN9XCI+w4LCo3t7IGZlZS5uZXRfYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLmFwcG9ydGlvbl9hbW91bnRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXcgdHItYm9yZGVyXCIgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLnJlbWlzc2lvbnN9XCI+QWxsb2NhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwieyd0ci1ib3JkZXInOiAhZmVlLnJlbWlzc2lvbnN9XCI+w4LCo3t7IGZlZS5hcHBvcnRpb25fYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJmZWUucmVtaXNzaW9uc1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlJlbWlzc2lvbiBjb2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2ZlZS5yZW1pc3Npb25zLmh3Zl9yZWZlcmVuY2V9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJmZWUucmVtaXNzaW9uc1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtdyB0ci1ib3JkZXJcIj5SZW1pc3Npb24gYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRyLWJvcmRlclwiPsOCwqN7eyBmZWUucmVtaXNzaW9ucy5od2ZfYW1vdW50IHwgbnVtYmVyOicuMid9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBjYXJkIGRldGFpbHMgLS0+XG4gICAgICA8Y2NwYXktY2FyZC1kZXRhaWxzICpuZ0lmPVwiaXNDYXJkUGF5bWVudCAmJiAhaXNUZWxlcGhvbnlQYXltZW50XCI+PC9jY3BheS1jYXJkLWRldGFpbHM+XG5cbiAgICAgIDwhLS0gcGJhIGRldGFpbHMgLS0+XG4gICAgICA8Y2NwYXktcGJhLWRldGFpbHMgKm5nSWY9XCIhaXNDYXJkUGF5bWVudFwiIFtwYXltZW50XT1cInBheW1lbnRHcm91cC5wYXltZW50c1swXVwiPjwvY2NwYXktcGJhLWRldGFpbHM+XG5cbiAgICAgIDwhLS0gU3RhdHVzIGhpc3RvcmllcyAtLT5cbiAgICAgIDxjY3BheS1wYXltZW50LXN0YXR1c2VzICpuZ0lmPVwiaXNTdGF0dXNBbGxvY2F0ZWRcIj48L2NjcGF5LXBheW1lbnQtc3RhdHVzZXM+XG5cbiAgICA8L2Rpdj5cblxuICA8L21haW4+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AudGItY29sLXd7d2lkdGg6MzMwcHh9LnRyLWJvcmRlcntib3JkZXItYm90dG9tOjJweCBzb2xpZH0ucGF5bWVudC12aWV3LWFsaWdubWVudHttYXJnaW4tbGVmdDozMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIFBheW1lbnRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuZGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVI7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIGxldCBmZWVzID0gW107XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG5cbiAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICBpZihyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzID0gZmVlc1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LCAgXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICk7XG4gICBcbiAgfVxuXG4gIGdldCBpc0NhcmRQYXltZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5tZXRob2QgPT09ICdjYXJkJztcbiAgfVxuXG4gIGdldCBpc1RlbGVwaG9ueVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmNoYW5uZWwgPT09ICd0ZWxlcGhvbnknO1xuICB9XG5cbiAgcHVibGljIGdvVG9QYXltZW50TGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC1saXN0JztcbiAgfVxuXG4gIGdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcblxuaW1wb3J0IHtJQ2FyZERldGFpbHN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUNhcmREZXRhaWxzJztcbmltcG9ydCB7UGF5bWVudExpYlNlcnZpY2V9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXJkRGV0YWlsc1NlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2UpIHsgfVxuXG4gIGdldENhcmREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IE9ic2VydmFibGU8SUNhcmREZXRhaWxzPiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbygnQ2FyZC1kZXRhaWwtc2VydmljZSBnZXRDYXJkRGV0YWlscyBmb3I6ICcsIHBheW1lbnRSZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUNhcmREZXRhaWxzPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXJkLXBheW1lbnRzLyR7cGF5bWVudFJlZmVyZW5jZX0vZGV0YWlsc2AsIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmREZXRhaWxzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuc2VydmljZSc7XG5pbXBvcnQge0lDYXJkRGV0YWlsc30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQ2FyZERldGFpbHMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWNhcmQtZGV0YWlscycsXG4gIHRlbXBsYXRlOiBgXG48ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UGF5bWVudCBtZXRob2Q8L2gyPlxuPC9kaXY+XG5cbjxkaXYgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICBQYXltZW50IG1ldGhvZCB1bmF2YWlsYWJsZSwgVGhlIHBheW1lbnQgaGFzIGVpdGhlciBleHBpcmVkIG9yIHVuc3VjY2Vzc2Z1bC5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWVycm9yTWVzc2FnZSAmJiBjYXJkRGV0YWlsc1wiPlxuXG48dGFibGU+XG4gIDx0Ym9keT5cbiAgPHRyPlxuICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5NZXRob2Q8L3RkPlxuICAgIDx0ZD5DYXJkPC90ZD5cbiAgPC90cj5cbiAgPHRyPlxuICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5UeXBlPC90ZD5cbiAgICA8dGQ+e3sgY2FyZERldGFpbHMuY2FyZF9icmFuZCB9fTwvdGQ+XG4gIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuPC9kaXY+XG5cbmAsXG4gIHN0eWxlczogW2AudGItY29sLXd7d2lkdGg6MzMwcHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgQ2FyZERldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwYWdlVGl0bGU6IHN0cmluZyA9ICdDYXJkIGRldGFpbHMnO1xuICBjYXJkRGV0YWlsczogSUNhcmREZXRhaWxzO1xuICBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FyZERldGFpbHNTZXJ2aWNlOiBDYXJkRGV0YWlsc1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXJkRGV0YWlsc1NlcnZpY2UuZ2V0Q2FyZERldGFpbHModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIGNhcmREZXRhaWxzID0+IHRoaXMuY2FyZERldGFpbHMgPSBjYXJkRGV0YWlscyxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3JcbiAgICApO1xuICB9XG5cbiAgZ2V0IGdldFBheW1lbnRSZWZlcmVuY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50UmVmZXJlbmNlO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxoMT5UaGlzIGlzIG5vdCB0aGUgcGFnZSB5b3Ugd2VyZSBsb29raW5nIGZvciE8L2gxPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgUGFnZU5vdEZvdW5kQ29tcG9uZW50IHsgfVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGF5bWVudExpYlNlcnZpY2UgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJU3RhdHVzSGlzdG9yaWVzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3RhdHVzSGlzdG9yaWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdGF0dXNIaXN0b3J5U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZSkgeyB9XG5cbiAgZ2V0UGF5bWVudFN0YXR1c2VzQnlSZWZlcmVuY2UocGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElTdGF0dXNIaXN0b3JpZXM+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdTdGF0dXMtaGlzdG9yeS1zZXJ2aWNlIGdldFBheW1lbnRTdGF0dXNlc0J5UmVmZXJlbmNlIGZvcjogJywgcGF5bWVudFJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJU3RhdHVzSGlzdG9yaWVzPihwYXltZW50TWV0aG9kID09PSAnY2FyZCcgfHwgcGF5bWVudE1ldGhvZCA9PT0gJ2Nhc2gnIHx8IHBheW1lbnRNZXRob2QgPT09ICdjaGVxdWUnIHx8IHBheW1lbnRNZXRob2QgPT09ICdwb3N0YWwgb3JkZXInID9cbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXJkLXBheW1lbnRzLyR7cGF5bWVudFJlZmVyZW5jZX0vc3RhdHVzZXNgIDpcbiAgICAgICAgICBgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jcmVkaXQtYWNjb3VudC1wYXltZW50cy8ke3BheW1lbnRSZWZlcmVuY2V9L3N0YXR1c2VzYCwge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVN0YXR1c0hpc3RvcmllcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN0YXR1c0hpc3Rvcmllcyc7XG5pbXBvcnQgeyBTdGF0dXNIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXR1cy1oaXN0b3J5L3N0YXR1cy1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtc3RhdHVzZXMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj57eyBwYWdlVGl0bGUgfX08L2gyPlxuPC9kaXY+XG5cblxuPGRpdiBjbGFzcz1cImVycm9yLXN1bW1hcnlcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsbGVkYnk9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgUGF5bWVudCBzdGF0dXMgaGlzdG9yeSBjb3VsZCBub3QgYmUgcmV0cmlldmVkXG4gIDwvaDI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAge3sgZXJyb3JNZXNzYWdlIH19XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCIhZXJyb3JNZXNzYWdlICYmIHN0YXR1c2VzXCI+XG4gIDx0YWJsZT5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD5TdGF0dXM8L3RoPlxuICAgICAgICAgIDx0aD5BbW91bnQ8L3RoPlxuICAgICAgICAgIDx0aD5EYXRlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+IFxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBzdGF0dXNlcy5zdGF0dXNfaGlzdG9yaWVzXCI+XG4gICAgICAgICAgPHRkPnt7IHN0YXR1cy5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgIDx0ZD7DgsKje3sgc3RhdHVzZXMuYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBzdGF0dXMuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgaGg6bW06c3MnfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBTdGF0dXNIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnUGF5bWVudCBzdGF0dXMgaGlzdG9yeSc7XG4gIHN0YXR1c2VzOiBJU3RhdHVzSGlzdG9yaWVzO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXR1c0hpc3RvcnlTZXJ2aWNlOiBTdGF0dXNIaXN0b3J5U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0YXR1c0hpc3RvcnlTZXJ2aWNlLmdldFBheW1lbnRTdGF0dXNlc0J5UmVmZXJlbmNlKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlLCB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCkuc3Vic2NyaWJlKFxuICAgICAgc3RhdHVzZXMgPT4gdGhpcy5zdGF0dXNlcyA9IHN0YXR1c2VzLFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvclxuICAgICk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1wYmEtZGV0YWlscycsXG4gIHRlbXBsYXRlOiBgXG4gIDxoMiBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5QYXltZW50IG1ldGhvZDwvaDI+XG4gIDx0YWJsZT5cbiAgICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPk1ldGhvZDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJjYXBpdGFsaXplXCI+e3sgcGF5bWVudC5tZXRob2QgfCBsb3dlcmNhc2V9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+VHlwZTwvdGQ+XG4gICAgICA8dGQ+Q3JlZGl0PC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciAqbmdJZj1cInBheW1lbnQub3JnYW5pc2F0aW9uX25hbWVcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QQkEgYWNjb3VudCBuYW1lPC90ZD5cbiAgICAgIDx0ZD57eyBwYXltZW50Lm9yZ2FuaXNhdGlvbl9uYW1lIH19PC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciAqbmdJZj1cInBheW1lbnQuYWNjb3VudF9udW1iZXJcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QQkEgbnVtYmVyPC90ZD5cbiAgICAgIDx0ZD57eyBwYXltZW50LmFjY291bnRfbnVtYmVyIH19PC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciAqbmdJZj1cInBheW1lbnQuY3VzdG9tZXJfcmVmZXJlbmNlXCI+XG4gICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+Q3VzdG9tZXIgaW50ZXJuYWwgcmVmZXJlbmNlPC90ZD5cbiAgICAgIDx0ZD57eyBwYXltZW50LmN1c3RvbWVyX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuYCxcbiAgc3R5bGVzOiBbYC5jYXBpdGFsaXplOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS50Yi1jb2wtd3t3aWR0aDozMzBweH1gXVxufSlcbmV4cG9ydCBjbGFzcyBQYmFEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGF5bWVudDogSVBheW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5zZXJ2aWNlJztcblxuZXhwb3J0IGxldCBpc0RlYnVnTW9kZSA9IGZhbHNlO1xuXG5jb25zdCBub29wID0gKCk6IGFueSA9PiB1bmRlZmluZWQ7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnNvbGVMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyIHtcblxuICBnZXQgaW5mbygpIHtcbiAgICBpZiAoaXNEZWJ1Z01vZGUpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHdhcm4oKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlKSB7XG4gICAgICByZXR1cm4gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlcnJvcigpIHtcbiAgICBpZiAoaXNEZWJ1Z01vZGUpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH1cbiAgfVxuXG4gIGludm9rZUNvbnNvbGVNZXRob2QodHlwZTogc3RyaW5nLCBhcmdzPzogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbG9nRm46IEZ1bmN0aW9uID0gKGNvbnNvbGUpW3R5cGVdIHx8IGNvbnNvbGUubG9nIHx8IG5vb3A7XG4gICAgbG9nRm4uYXBwbHkoY29uc29sZSwgW2FyZ3NdKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uL3NoYXJlZC9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtFcnJvckhhbmRsZXJTZXJ2aWNlfSBmcm9tICcuLi9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7UGF5bWVudExpYlNlcnZpY2V9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYlNlcnZpY2U6IFBheW1lbnRMaWJTZXJ2aWNlXG4gICAgICAgICAgICAgICkgeyB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwcyhjY2RDYXNlTnVtYmVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElQYXltZW50R3JvdXBbXT4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ0Nhc2UtdHJhbnNhY3Rpb25zLXNlcnZpY2UgZ2V0UGF5bWVudEdyb3VwcyBmb3I6ICcsIGNjZENhc2VOdW1iZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVBheW1lbnRHcm91cFtdPihgJHt0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLkFQSV9ST09UfS9jYXNlcy8ke2NjZENhc2VOdW1iZXJ9L3BheW1lbnRncm91cHNgLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0Vycm9ySGFuZGxlclNlcnZpY2V9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViQ29tcG9uZW50SHR0cENsaWVudCB9IGZyb20gJy4uL3NoYXJlZC9odHRwY2xpZW50L3dlYmNvbXBvbmVudC5odHRwLmNsaWVudCc7XG5pbXBvcnQge1BheW1lbnRMaWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUJTUGF5bWVudHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lCU1BheW1lbnRzJztcbmltcG9ydCB7IEFsbG9jYXRlUGF5bWVudFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FsbG9jYXRlUGF5bWVudFJlcXVlc3QnO1xuaW1wb3J0IHsgSVBheW1lbnRHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgaHR0cHM6IFdlYkNvbXBvbmVudEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliU2VydmljZTogUGF5bWVudExpYlNlcnZpY2VcbiAgICAgICAgICAgICAgKSB7IH1cblxuICBnZXRCU1BheW1lbnRzQnlDQ0QoY2NkQ2FzZU51bWJlcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJQlNQYXltZW50cz4ge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUJTUGF5bWVudHM+KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQlVMS1NDQU5fQVBJX1JPT1R9L2Nhc2VzLyR7Y2NkQ2FzZU51bWJlcn1gLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuICBnZXRCU1BheW1lbnRzQnlEQ04oZGNuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElCU1BheW1lbnRzPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUJTUGF5bWVudHM+KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQlVMS1NDQU5fQVBJX1JPT1R9L2Nhc2VzP2RvY3VtZW50X2NvbnRyb2xfbnVtYmVyPSR7ZGNufWAsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG4gIHBvc3RCU0FsbG9jYXRlUGF5bWVudChib2R5OiBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0LCBwYXltZW50UmVmOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBzLnBvc3QoYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vcGF5bWVudC1ncm91cHMvJHtwYXltZW50UmVmfS9idWxrLXNjYW4tcGF5bWVudHNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwb3N0QlNQYXltZW50U3RyYXRlZ2ljKGJvZHk6IEFsbG9jYXRlUGF5bWVudFJlcXVlc3QsIHBheW1lbnRHcm91cFJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzLyR7cGF5bWVudEdyb3VwUmVmfS9idWxrLXNjYW4tcGF5bWVudHMtc3RyYXRlZ2ljYCwgYm9keSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cbiAgcG9zdEJTV29QR1N0cmF0ZWdpYyhib2R5OiBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwcy5wb3N0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQVBJX1JPT1R9L3BheW1lbnQtZ3JvdXBzL2J1bGstc2Nhbi1wYXltZW50cy1zdHJhdGVnaWNgLCBib2R5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBwYXRjaEJTQ2hhbmdlU3RhdHVzKGRjbk51bWJlcjogc3RyaW5nLCBzdGF0dXM6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMucGF0Y2goYCR7dGhpcy5wYXltZW50TGliU2VydmljZS5BUElfUk9PVH0vYnVsay1zY2FuLXBheW1lbnRzLyR7ZGNuTnVtYmVyfS9zdGF0dXMvJHtzdGF0dXN9YCwgc3RhdHVzKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IpXG4gICAgKTtcbiAgfVxuICBjYWxjdWxhdGVPdXRTdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApOiBudW1iZXIge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMDtcblxuICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgIH0pO1xuICAgIH0gICBcbiAgICByZXR1cm4gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICB9XG5cbiAgcmVtb3ZlVW53YW50ZWRTdHJpbmcoaW5wdXQ6IHN0cmluZywgcmVwbGFjZVRleHQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhdHRlcm4gPSAvW1xcX10vZ2k7XG4gICAgcmV0dXJuIGlucHV0LnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZVRleHQpO1xuICB9XG5cbiAgZG93bmxvYWRTZWxlY3RlZFJlcG9ydChyZXBvcnROYW1lOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOnN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cHMuZ2V0KGAke3RoaXMucGF5bWVudExpYlNlcnZpY2UuQlVMS1NDQU5fQVBJX1JPT1R9L3JlcG9ydC9kYXRhP2RhdGVfZnJvbT0ke3N0YXJ0RGF0ZX0mZGF0ZV90bz0ke2VuZERhdGV9JnJlcG9ydF90eXBlPSR7cmVwb3J0TmFtZX1gLCB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbn1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BheW1lbnRMaWJDb21wb25lbnR9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQge0lQYXltZW50R3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQge0Nhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0lGZWV9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge0lQYXltZW50fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7SVJlbWlzc2lvbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVtaXNzaW9uJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXNlLXRyYW5zYWN0aW9ucycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyXCI+XG4gICAgPGRpdiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdtYWluJyYmICFpc1R1cm5PZmYgJiYgdGFrZVBheW1lbnRcIj5cblxuXG4gICAgPGRpdiAgICpuZ0lmPVwidGFrZVBheW1lbnRcIiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXhsXCI+Q2FzZSB0cmFuc2FjdGlvbnM8L2gxPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgKm5nSWY9JyFpc0V4Y2VwdGlvblJlY29yZCcgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNiBnb3Z1ay0hLXBhZGRpbmctdG9wLTZcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5DQ0QgcmVmZXJlbmNlOjwvaDM+XG4gICAgICAgIDxzcGFuPiB7eyBjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSdpc0V4Y2VwdGlvblJlY29yZCcgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNiBnb3Z1ay0hLXBhZGRpbmctdG9wLTZcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5FeGNlcHRpb24gcmVmZXJlbmNlOjwvaDM+XG4gICAgICAgIDxzcGFuPiB7eyBjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+VG90YWwgcGF5bWVudHM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCByZW1pc3Npb25zPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50IGR1ZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstdGFibGVfX2hlYWRlci0tY3VzdG9tXCIgc2NvcGU9XCJjb2xcIiAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIj5VbmFsbG9jYXRlZCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFscGF5bWVudHMgZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBzdW1tYXJ5LXRhYmxlLWZvbnRcIj57eyB0b3RhbFBheW1lbnRzIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBzdW1tYXJ5LXRhYmxlLWZvbnRcIj57eyB0b3RhbFJlbWlzc2lvbnMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IGNsQW1vdW50RHVlIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhc2UtdHJhbnNhY3Rpb25fX2NvbG9yIHN1bW1hcnktdGFibGUtZm9udFwiICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiPnt7dW5wcm9jZXNzZWRSZWNvcmRDb3VudH19PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiICpuZ0lmPVwidGFrZVBheW1lbnRcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBZGRGZWVCdG5FbmFibGVkXCJcbiAgICAgICAgICBbbmdDbGFzc109JyFpc0FkZEZlZUJ0bkVuYWJsZWQgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay1idXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgVGFrZSB0ZWxlcGhvbnkgcGF5bWVudFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cblxuICAgICAgPGNjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50c1xuICAgICAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCJcbiAgICAgIFtJU19CVVRUT05fRU5BQkxFXT1cInRha2VQYXltZW50XCJcbiAgICAgIFtGRUVfUkVDT1JEU19FWElTVFNdPVwiaXNBbnlGZWVHcm91cEF2aWxhYmxlXCJcbiAgICAgIFtJU1RVUk5PRkZdPVwiaXNUdXJuT2ZmXCJcbiAgICAgIFtJU1NGRU5BQkxFXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcbiAgICAgIFtQQVlNRU5UUkVGXT1cInBheW1lbnRSZWZcIlxuICAgICAgKGdldFVucHJvY2Vzc2VkRmVlQ291bnQpID0gXCJnZXRVbnByb2Nlc3NlZEZlZUNvdW50KCRldmVudClcIlxuICAgICAgKHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCkgPSBcInNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCgkZXZlbnQpXCI+XG4gICAgICA8L2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cz5cbiAgICAgIDwhLS0gPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFrXCI+XG4gICAgICA8Y2NwYXktYXBwLXByb2Nlc3NlZC1wYXltZW50c1xuICAgICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIFtOT05QQVlNRU5UU109XCJub25QYXltZW50c1wiXG4gICAgICAoZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KSA9IFwiZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KCRldmVudClcIlx0PlxuICAgICAgPC9jY3BheS1hcHAtcHJvY2Vzc2VkLXBheW1lbnRzPlxuICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFrXCI+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgICpuZ0lmPVwidGFrZVBheW1lbnRcIiBjbGFzcz1cIiBnb3Z1ay0hLW1hcmdpbi10b3AtOVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+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+IFxuXG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcyBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTZcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5DQ0QgcmVmZXJlbmNlOjwvaDM+XG4gICAgICAgIDxzcGFuPiB7eyBjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+VG90YWwgcGF5bWVudHM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCByZW1pc3Npb25zPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50IGR1ZTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFscGF5bWVudHMgZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgdG90YWxSZW1pc3Npb25zIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ICh0b3RhbEZlZXMgLSB0b3RhbFJlbWlzc2lvbnMpIC0gdG90YWxQYXltZW50cyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDwhLS0gTm8gZmVlcyBzdGFydCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicGF5bWVudEdyb3Vwcz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctc21hbGxcIj5FeGlzdGluZyBmZWVzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Db2RlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2FsY3VsYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Hcm91cCBhbW91bnQgb3V0c3RhbmRpbmc8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI2XCI+Tm8gZmVlcyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBObyBmZWVzIGVuZCAtLT5cblxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHBheW1lbnRHcm91cCBvZiBwYXltZW50R3JvdXBzXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLWdyaWQtY29sdW1uLWZ1bGwtLWdyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5Hcm91cCByZWZlcmVuY2U6IHt7cGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuXG4gICAgICAgIDwhLS1OZXcgQ29kZSBzdGFydC0tPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLXNtYWxsXCI+RXhpc2l0aW5nIGZlZXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPWZlZWNsYXNzPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q29kZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJncm91cGFtb3VudCBnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Hcm91cCBhbW91bnQgb3V0c3RhbmRpbmc8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiID5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXM7ICBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDFcIj57e2ZlZS5jb2RlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDJcIj4ge3tmZWUuZGVzY3JpcHRpb259fSA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDMgYWxpZ24tY2VudGVyXCI+IHt7ZmVlLnZvbHVtZT8gZmVlLnZvbHVtZSA6ICctJ319IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNFwiPiB7eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNVwiPiB7e2ZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNiBnb3Z1ay10YWJsZV9fY3VzdG9tLS1jb2w2XCIgW2F0dHIucm93c3Bhbl09XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGhcIiAqbmdJZj1cImk9PTBcIj5cbiAgICAgICAgICAgICAge3tnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fSA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoPT0wXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstaW5zZXQtdGV4dCBnb3Z1ay1pbnNldC10ZXh0X19uby1ib3JkZXJcIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50cyB8fCBwYXltZW50R3JvdXAucmVtaXNzaW9uc1wiPlxuICAgICAgPGRldGFpbHM+XG4gICAgICAgIDxzdW1tYXJ5IGNsYXNzPVwiZ292dWstaGlkZXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5XCI+QWxsb2NhdGVkIHBheW1lbnRzIGFuZCByZW1pc3Npb25zPC9zcGFuPlxuICAgICAgICA8L3N1bW1hcnk+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtYm9yZGVyLW5hcnJvd1wiPlxuICAgICAgICAgICAgICA8IS0tIHBheW1lbnRzIC0tPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UGF5bWVudHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgY3JlYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPk1ldGhvZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICAqbmdGb3I9XCJsZXQgcGF5bWVudCBvZiBwYXltZW50R3JvdXAucGF5bWVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvVG9QYXllbWVudFZpZXcocGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FwaXRhbGl6ZSB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50Lm1ldGhvZCB8IGxvd2VyY2FzZX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e2dldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudCl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnBheW1lbnRzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgICAgIDwhLS0gcmVtaXNzaW9ucyAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UmVtaXNzaW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EYXRlIGNyZWF0ZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIGNvZGU8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGFwcGxpZWQgYWdhaW5zdDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHJlbWlzc2lvbiBvZiBwYXltZW50R3JvdXAucmVtaXNzaW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLnJlbWlzc2lvbl9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uZmVlX2NvZGUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmh3Zl9hbW91bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNVwiPk5vIHJlbWlzc2lvbnMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgXG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRha2VQYXltZW50XCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwibG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSA8PSAwIHx8IGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109JyhnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCkgPD0gMCB8fCBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQpID8gXCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInPlxuICAgICAgICAgICAgICAgIEFkZCB0ZWxlcGhvbmUgcGF5bWVudFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzXG4gICAgICAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIlxuICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0ZlZVJlY29yZHNFeGlzdFwiIFxuICAgICAgW0lTX09TX0FNVF9BVkFJTEFCTEVdPVwiaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlXCIgXG4gICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICA8L2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cz5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3cgZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50c1wiICAqbmdJZj1cInRvdGFsUmVmdW5kQW1vdW50ID4gMCAmJiB0YWtlUGF5bWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cy1jb2wxXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+U3VycGx1cyBwYXltZW50czwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgIFRvdGFsIHN1cnBsdXMgcGF5bWVudHMgcmVjZWl2ZWQ6IHt7dG90YWxSZWZ1bmRBbW91bnQgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJ319XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlICYmICF0YWtlUGF5bWVudFwiXG4gIFtJU19CVVRUT05fRU5BQkxFXT1cInRha2VQYXltZW50XCJcbiAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICBbSVNTRkVOQUJMRV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gIFtGRUVfUkVDT1JEU19FWElTVFNdPVwiaXNGZWVSZWNvcmRzRXhpc3RcIiBcbiAgW0lTX09TX0FNVF9BVkFJTEFCTEVdPVwiaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlXCIgXG4gIChzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQpID0gXCJzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQoJGV2ZW50KVwiPlxuPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG5cbjxkaXYgKm5nSWY9XCIhdGFrZVBheW1lbnRcIiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlByb2Nlc3NlZCBwYXltZW50czwvc3Bhbj5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgdXBkYXRlZDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPk1ldGhvZDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX3VwZGF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FwaXRhbGl6ZSB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50Lm1ldGhvZCB8IGxvd2VyY2FzZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e2dldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudCl9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI4XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuPC9kaXY+XG48L2Rpdj5cblxuPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVSRU1PVkFMQ09ORklSTUFUSU9OXzInPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJ1wiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGZlZT9cbiAgICA8L3N0cm9uZz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JiXCI+XG4gICAgPGZvcm0gbm92YWxpZGF0ZT5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFJlbW92YWwoKVwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVtb3ZlQnRuRGlzYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSdpc1JlbW92ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAoY2xpY2spPVwicmVtb3ZlRmVlKGZlZUlkKVwiPlxuICAgICAgICBSZW1vdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiAgPC9tYWluPlxuPC9kaXY+YCxcbiAgc3R5bGVzOiBbYC5nb3Z1ay1ncmlkLWNvbHVtbi1mdWxsLS1ncntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjEwcHh9LmRpc2FibGV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOmdyZXk7cG9pbnRlci1ldmVudHM6bm9uZX0uZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50c3ttYXJnaW46MjBweCAwfS5nb3Z1ay1ncmlkX19zdXJwbHVzLXBheW1lbnRzPi5nb3Z1ay1ncmlkLWNvbHVtbi1mdWxse3BhZGRpbmc6MH0uZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cy1jb2wxe21hcmdpbi1ib3R0b206MTBweH0uZ292dWstaW5zZXQtdGV4dF9fbm8tYm9yZGVye2JvcmRlci1sZWZ0OjB9LmdvdnVrLWhpZGV0ZXh0e2ZvbnQtc2l6ZToyMnB4O3BhZGRpbmctYm90dG9tOjEwcHh9Lmxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2V9LmNoYW5uZWw6OmZpcnN0LWxldHRlcnt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmdvdnVrLWhlYWRpbmcteGx7Zm9udC1zaXplOjQ4cHg7bWFyZ2luLWJvdHRvbToxcHh9LmdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGV7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwMH0udG90YWxwYXltZW50cy5nb3Z1ay10YWJsZV9fcm93e2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDAhaW1wb3J0YW50fS5nb3Z1ay1pbnNldC10ZXh0e21hcmdpbi1sZWZ0OjFlbX0uZ292dWstYnV0dG9ue2ZvbnQtc2l6ZToxOXB4fS5nb3Z1ay10YWJsZV9fY2VsbC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sNi5nb3Z1ay10YWJsZV9fY3VzdG9tLS1jb2w2LC5ncm91cGFtb3VudC5nb3Z1ay10YWJsZV9faGVhZGVye3RleHQtYWxpZ246cmlnaHR9LmZlZWNsYXNze3BhZGRpbmctbGVmdDouN2VtfS5hbGlnbi1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9ZGV0YWlscyBzdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfS5jYXNlLXRyYW5zYWN0aW9uX19jb2xvcntjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaXRhbGl6ZTo6Zmlyc3QtbGV0dGVye3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uZ292dWstaW5zZXQtdGV4dF9fbm8tbGVmdC1tYXJnaW57bWFyZ2luLWxlZnQ6MDtwYWRkaW5nLWxlZnQ6MH0ud2hpdGVzcGFjZS1pbmhlcml0e3doaXRlLXNwYWNlOmluaGVyaXQhaW1wb3J0YW50fS5nb3Z1ay1zZWN0aW9uLXJlY29yZHMtYnJlYWt7bWFyZ2luOjEwcHg7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwMCFpbXBvcnRhbnR9LmV4aXNpdG5nLWZlZXN7bWFyZ2luLWxlZnQ6MTJweH0uYWRkLXRlbGVwaG9ueS1wYXltZW50e21hcmdpbi10b3A6LTJlbTttYXJnaW4tbGVmdDotMmVtfS5nb3Z1ay10YWJsZV9faGVhZGVyLS1jdXN0b217dGV4dC1hbGlnbjpjZW50ZXJ9LmRpc2FibGUtbGlua3tjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOiM4ZThjOGN9LnBhbmVsLW5vLS1zdHlsZXtib3JkZXItbGVmdC1zdHlsZTpub25lfS5jb2wtMjh7d2lkdGg6MjglfS5jb2wtMTV7d2lkdGg6MTUlfS5obWN0cy1iYW5uZXI+LmhtY3RzLWJhbm5lcl9fbWVzc2FnZXtmb250LXNpemU6MTlweDtsaW5lLWhlaWdodDoxLjI1fS5zdW1tYXJ5LXRhYmxlLWZvbnR7Zm9udC1zaXplOjM2cHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZVRyYW5zYWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHRha2VQYXltZW50OiBib29sZWFuO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGV4Y1JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50R3JvdXBzOiBhbnlbXSA9IFtdO1xuICBwYXltZW50czogSVBheW1lbnRbXSA9IFtdO1xuICBub25QYXltZW50czogSVBheW1lbnRbXSA9IFtdO1xuICBhbGxQYXltZW50czogSVBheW1lbnRbXSA9IFtdO1xuICByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10gPSBbXTtcbiAgZmVlczogSUZlZVtdID0gW107XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICB0b3RhbEZlZXM6IG51bWJlcjtcbiAgdG90YWxQYXltZW50czogbnVtYmVyO1xuICB0b3RhbE5vbk9mZlBheW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsUmVtaXNzaW9uczogbnVtYmVyO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBkY25OdW1iZXI6IHN0cmluZztcbiAgcGF5bWVudFJlZjogc3RyaW5nO1xuICBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0V4Y2VwdGlvblJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXhjZXB0aW9uUmVjb3JkUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzQW55RmVlR3JvdXBBdmlsYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICBpc1JlbWlzc2lvbnNNYXRjaDogYm9vbGVhbjtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgaXNSZW1vdmVCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmZWVJZDpJRmVlO1xuICBjbEFtb3VudER1ZTogbnVtYmVyID0gMDtcbiAgdW5wcm9jZXNzZWRSZWNvcmRDb3VudDogbnVtYmVyO1xuICBpc0ZlZVJlY29yZHNFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG90YWxSZWZ1bmRBbW91bnQ6IE51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gIHByaXZhdGUgY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2U6IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLFxuICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICBpZighdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzID0gcGF5bWVudEdyb3Vwc1sncGF5bWVudF9ncm91cHMnXTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvcjtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvcjtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTtcbiAgfVxuXG4gIHNldERlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbEZlZXMgPSAwLjAwO1xufVxuXG5nZXRBbGxvY2F0aW9uU3RhdHVzKHBheW1lbnRzOiBhbnkpe1xuXG4gIGxldCBwYXltZW50QWxsb2NhdGlvbiA9IHBheW1lbnRzLnBheW1lbnRfYWxsb2NhdGlvbixcbiAgICAgIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4wO1xuICByZXR1cm4gaXNBbGxvY2F0aW9uU3RhdHVzRXhpc3QgPyBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA6ICctJztcbiAgLy9yZXR1cm4gXCItXCI7XG5cbn1cblxuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTogdm9pZCB7XG4gIGlmKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgKHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2NjZG9yZXhjZXB0aW9uJyB8fCB0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdyYycpKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgIHJlY29yZERhdGEgPT4ge1xuICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPjApIHtcbiAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVjb3JkRGF0YVsnZGF0YSddICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UubGVuZ3RoID4gMCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHJlY29yZERhdGFbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlID4wKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdkY24nKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIubGVuZ3RoID4gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIubGVuZ3RoID09PSAwICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgIGlmIChwYXltZW50LmNhc2VfcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgJiYgcGF5bWVudC5jY2RfY2FzZV9udW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNhbGN1bGF0ZUFtb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDAsXG4gICAgICBub25PZmZMaW5lUGF5bWVudCA9IDAuMDA7XG4gIFxuICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICAgICAgaWYoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgICAgICAgICBsZXQgYSA9IGZlZS5hbW91bnRfZHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGxldCBiID0gZmVlLmFtb3VudF9kdWUgPD0gMDtcbiAgICAgICAgICAgICAgdGhpcy5jbEFtb3VudER1ZSA9IGEgPyB0aGlzLmNsQW1vdW50RHVlICsgZmVlLm5ldF9hbW91bnQgOiBiID8gdGhpcy5jbEFtb3VudER1ZSArIDAgOiB0aGlzLmNsQW1vdW50RHVlICsgZmVlLmFtb3VudF9kdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWVbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10gPSBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ107XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgdGhpcy50b3RhbEZlZXMgPSBmZWVzVG90YWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICAgICAgbGV0IGFsbG9jYXRpb25MZW4gPSBwYXltZW50LnBheW1lbnRfYWxsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICBpZihhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCB8fCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgJiYgYWxsb2NhdGlvbkxlblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0nQWxsb2NhdGVkJykge1xuICAgICAgICAgICAgICAgIG5vbk9mZkxpbmVQYXltZW50ID0gbm9uT2ZmTGluZVBheW1lbnQgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiggYWxsb2NhdGlvbkxlbi5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9uUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoYWxsb2NhdGlvbkxlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcbiAgICAgICAgICAgIHRoaXMuYWxsUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVxuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSBwYXltZW50c1RvdGFsO1xuICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgICAgdGhpcy50b3RhbE5vbk9mZlBheW1lbnRzID0gbm9uT2ZmTGluZVBheW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzaXNvbiA9PiB7XG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNpc29uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgdGhpcy5yZW1pc3Npb25zLnB1c2gocmVtaXNpc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsUmVtaXNzaW9ucyA9IHJlbWlzc2lvbnNUb3RhbDtcbiAgICB9KTtcblxuICB9XG4gIGNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpIHtcbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICBsZXQgaXNOZXdQYXltZW50R3JvdXAgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaCgocGF5bWVudEdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGxldCBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IDAuMDAsXG4gICAgICAgICAgICBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgICAgICAgZmVlcyA9IFtdO1xuXG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcblxuICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgICAgICBpZihyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZighdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCkge1xuICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlzTmV3UGF5bWVudEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHNbaW5kZXhdWydvbGQnXSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XS5mZWVzID0gZmVlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgICBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgICAgICAgICAgIGlmKGdycE91dHN0YW5kaW5nQW1vdW50ID4gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudFJlZiA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHBheW1lbnRHcm91cC5mZWVzICYmIHBheW1lbnRHcm91cC5mZWVzLmxlbmd0aCA+IDAgJiYgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPD0gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYoKCFpc05ld1BheW1lbnRHcm91cCAmJiB0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSkgfHwgKCFpc05ld1BheW1lbnRHcm91cCAmJiAhdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUpKSB7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHRvdGFsUmVmdW5kQW1vdW50ID0gMCxcbiAgICAgICAgaXNGZWVBbW91bnRaZXJvID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDA7XG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgICB0aGlzLmlzRmVlUmVjb3Jkc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICAgICAgICBpZihmZWUuY2FsY3VsYXRlZF9hbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9ICBcbiAgICAgICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICAgICAgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50IDwgMCkge1xuICAgICAgICAgICAgICBpZih0b3RhbFJlZnVuZEFtb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gZ3JwT3V0c3RhbmRpbmdBbW91bnQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG90YWxSZWZ1bmRBbW91bnQgPSAodG90YWxSZWZ1bmRBbW91bnQgKyBncnBPdXRzdGFuZGluZ0Ftb3VudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwIHx8IChncnBPdXRzdGFuZGluZ0Ftb3VudCA9PT0gMCAmJiBpc0ZlZUFtb3VudFplcm8pKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3RhbFJlZnVuZEFtb3VudCAqIC0xO1xuICAgICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTs7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZighdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgfHwgdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIGxldCB1cmwgPSB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgICAgIHVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9mZWUtc2VhcmNoP3NlbGVjdGVkT3B0aW9uPSR7dGhpcy5zZWxlY3RlZE9wdGlvbn0mY2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn0ke3VybH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5wYXltZW50UmVmO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9XG4gIH1cblxuICByZWRpcmVjdFRvUmVwb3J0c1BhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL3JlcG9ydHM/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfWApO1xuICB9XG4gIGxvYWRGZWVTdW1tYXJ5UGFnZShwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICB9XG5cbiAgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSBwYXltZW50R3JvdXAucGF5bWVudE1ldGhvZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRHcm91cFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50UmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICB9XG5cbiAgZ29Ub1BheWVtZW50VmlldyhwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdvVG9QYXltZW50Vmlld0NvbXBvbmVudCh7cGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50UmVmZXJlbmNlLCBwYXltZW50TWV0aG9kfSk7XG4gIH1cblxuICBzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQodW5wcm9jZXNzZWRSZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgaWYgKCB1bnByb2Nlc3NlZFJlY29yZElkICkge1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSAgICAgIFxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCh1blByb2Nlc3NlZFJlY29yZENvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkUmVjb3JkQ291bnQgPSB1blByb2Nlc3NlZFJlY29yZENvdW50O1xuICB9XG5cbiAgY2FsY3VsYXRlQW1vdW50RHVlKGZlZTogSUZlZSkge1xuXG4gICAgaWYoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZlZS5hbW91bnRfZHVlICE9PSB1bmRlZmluZWQ/IGZlZS5hbW91bnRfZHVlIDogZmVlLm5ldF9hbW91bnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjAuMDBcIjtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlRmVlKGZlZTogSUZlZSl7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5mZWVJZCA9IGZlZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbic7XG4gIH1cbiAgY2FuY2VsUmVtb3ZhbCgpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIH1cbiAgcmVtb3ZlRmVlKGZlZTogYW55KXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlKS5zdWJzY3JpYmUoXG4gICAgICAoc3VjY2VzczogYW55KSA9PiB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbW91bnRkdWVFeGlzdChhbW91bnREdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgYW1vdW50RHVlID09PSAndW5kZWZpbmVkJztcbiAgfVxufVxuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJpbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi9JRmVlJztcblxuZXhwb3J0IGNsYXNzIFBheW1lbnRUb1BheWh1YlJlcXVlc3Qge1xuICBjdXJyZW5jeSA9ICdHQlAnO1xuICBzaXRlX2lkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uID0gJ1BheUJ1YmJsZSBwYXltZW50JztcbiAgY2hhbm5lbCA9ICd0ZWxlcGhvbnknO1xuICBwcm92aWRlciA9ICdwY2kgcGFsJztcbiAgc2VydmljZTogc3RyaW5nO1xuXG4gIGNjZF9jYXNlX251bWJlcjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihjY2RfY2FzZV9udW1iZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIHNlcnZpY2U6IHN0cmluZywgc2VydmljZU5hbWU6IHN0cmluZykge1xuICB0aGlzLmNjZF9jYXNlX251bWJlciA9IGNjZF9jYXNlX251bWJlcjtcbiAgdGhpcy5hbW91bnQgPSA8YW55PmFtb3VudC50b0ZpeGVkKDIpO1xuICB0aGlzLnNlcnZpY2U9IHNlcnZpY2VOYW1lO1xuICB0aGlzLnNpdGVfaWQgPSBzZXJ2aWNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7IFBheW1lbnRUb1BheWh1YlJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1BheW1lbnRUb1BheWh1YlJlcXVlc3QnO1xuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktZmVlLXN1bW1hcnknLFxuICB0ZW1wbGF0ZTogYFxuPGRpdiBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzXCIgKm5nSWY9XCJpc0JhY2tCdXR0b25FbmFibGVcIj5cbiAgPG9sIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3RcIj5cbiAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCIgKm5nSWY9XCIhaXNUdXJuT2ZmXCI+XG4gICAgICA8YSAoY2xpY2spPVwibG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKVwiIGNsYXNzPVwiZ292dWstYmFjay1saW5rIGdvdnVrLWxhYmVsXCI+QmFjazwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIiAqbmdJZj1cImlzVHVybk9mZlwiPlxuICAgICAgICA8YSAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50LCdzdW1tYXJ5JylcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICA8L29sPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZmVlLXN1bW1hcnlcIiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdtYWluJ1wiPlxuICAgIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0ZFRVNVTU1BUlknPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiPlxuICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy14bGFyZ2VcIj5GZWUgU3VtbWFyeTwvaDE+XG4gICAgPC9kaXY+XG5cblxuICAgIMOCwqA8ZGl2w4LCoGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tb25lLXRoaXJkXCLDgsKgYWxpZ249XCJyaWdodFwiPlxuICAgICAgw4LCoMOCwqDDgsKgw4LCoMOCwqDDgsKgPGJ1dHRvbsOCwqAgKm5nSWY9XCIhaXNUdXJuT2ZmXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCJcbiAgICAgIMOCwqDDgsKgw4LCoMOCwqDDgsKgw4LCoFtkaXNhYmxlZF09XCJpc1BheW1lbnRFeGlzdFwiXG4gICAgICDDgsKgw4LCoMOCwqDDgsKgw4LCoMOCwqBbbmdDbGFzc109J2lzUGF5bWVudEV4aXN0ID/DgsKgXCJidXR0b27DgsKgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCLDgsKgOsOCwqBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInPlxuICAgICAgICAgICAgICBBZGQgYSBuZXcgZmVlXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGEgKm5nSWY9XCJpc1R1cm5PZmZcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50LCdzdW1tYXJ5JylcIiBjbGFzcz1cImJ1dHRvblwiPkFkZCBhIG5ldyBmZWU8L2E+XHRcbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgPGRpdiBjbGFzcz1cImVycm9yLXN1bW1hcnlcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsbGVkYnk9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgUGF5bWVudCBHcm91cCBkZXRhaWxzIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWRcbiAgICAgIDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiICAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgcGF5bWVudEdyb3VwXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRoIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiBzY29wZT1cImNvbFwiPkZlZSBDb2RlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiBzY29wZT1cImNvbFwiPkZlZSBkZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gY29kZTwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCIgc2NvcGU9XCJjb2xcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlc1wiPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXM7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmNvZGUgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdyZXktdGV4dFwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5GZWUgYW1vdW50OjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tMlwiPnt7IGZlZS5mZWVfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIiAqbmdJZj1cIiFpc1R1cm5PZmZcIj5cbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY29uZmlybVJlbW92ZUZlZShmZWUuaWQpXCIgW25nQ2xhc3NdPSdpc1BheW1lbnRFeGlzdCB8fCBmZWUucmVtaXNzaW9ucyA/IFwiZGlzYWJsZS1saW5rXCIgOiBcIlwiJz5yZW1vdmUgZmVlPC9hPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIiAqbmdJZj1cImlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjb25maXJtUmVtb3ZlRmVlKGZlZS5pZClcIj5yZW1vdmUgZmVlPC9hPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdJZj1cImZlZS52b2x1bWUgJiYgZmVlLnZvbHVtZSA+IDBcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdyZXktdGV4dCBzdWJjb2x1bW4tMVwiPlZvbHVtZTo8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBmZWUudm9sdW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5GZWUgdG90YWw6PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZmVlLmNhbGN1bGF0ZWRfYW1vdW50ICB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5SZW1pc3Npb24gYW1vdW50OjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBzdWJjb2x1bW4tMlwiPnt7IGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQ/ICggZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX2Ftb3VudCAgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJykgOiAnLScgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIiAqbmdJZj1cIiFpc1R1cm5PZmZcIj4gXG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImFkZFJlbWlzc2lvbihmZWUpXCIgW25nQ2xhc3NdPVwieydyZW1pc3Npb25EaXNhYmxlJzogIXNlcnZpY2V9XCIgKm5nSWY9XCIoZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX2Ftb3VudCA9PT0gMCB8fCAhZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX2Ftb3VudCkgJiYgIWlzUGF5bWVudEV4aXN0XCI+XG4gICAgICAgICAgICAgICAgICBEZWR1Y3QgcmVtaXNzaW9uXG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIiAqbmdJZj1cImlzVHVybk9mZlwiPiBcbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiYWRkUmVtaXNzaW9uKGZlZSlcIiBbbmdDbGFzc109XCJ7J3JlbWlzc2lvbkRpc2FibGUnOiAhc2VydmljZX1cIiAqbmdJZj1cImdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgPT09IDAgfHwgIWdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnRcIj5cbiAgICAgICAgICAgICAgICBEZWR1Y3QgcmVtaXNzaW9uXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBncmV5LXRleHQgc3ViY29sdW1uLTFcIj5Ub3RhbCBhZnRlciByZW1pc3Npb246PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0yXCI+e3sgZmVlLm5ldF9hbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZCBzdWJjb2x1bW4tMVwiPlRvdGFsIHBheW1lbnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyB0b3RhbEFmdGVyUmVtaXNzaW9uIC0gb3V0U3RhbmRpbmdBbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyIHN1YmNvbHVtbi0zXCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlciBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGQgc3ViY29sdW1uLTFcIj5Ub3RhbCBvdXRzdGFuZGluZyBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj57eyBvdXRTdGFuZGluZ0Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTNcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0lmPVwiIWJzUGF5bWVudERjbk51bWJlclwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cCBnb3Z1ay1mb3JtLWdyb3VwLS1tZ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgY3VzdG9tLWdvdnVrLWxhYmVsIGdvdnVrLWZpZWxkc2V0X19oZWFkaW5nLS1melwiIGZvcj1cInJlc3BvbnNpYmxlT2ZmaWNlXCI+XG4gICAgICAgICAgICAgIDxzdHJvbmc+V2hhdCBzZXJ2aWNlIGlzIHRoaXMgZmVlIGZvcj88L3N0cm9uZz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZ292dWstc2VsZWN0IGdvdnVrLXNlbGVjdC0tY3VzdG9tXCIgaWQ9XCJyZXNwb25zaWJsZU9mZmljZVwiIFsobmdNb2RlbCldPVwic2VydmljZVwiIG5hbWU9XCJyZXNwb25zaWJsZU9mZmljZVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJz5QbGVhc2Ugc2VsZWN0PC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBQTA3XCI+RGl2b3JjZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQUEwOVwiPkZpbmFuY2lhbCBSZW1lZHk8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFBMDhcIj5Qcm9iYXRlPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj48L3RkPlxuICAgICAgPHRkIGNsYXNzPVwibm8tYm9yZGVyXCI+PC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cIm5vLWJvcmRlclwiPjwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXJcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1ib3JkZXIgc3ViY29sdW1uLTJcIj4gXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInRha2VQYXltZW50KClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0b3RhbEZlZSA8PSAwIHx8ICFzZXJ2aWNlIHx8IGlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ndG90YWxGZWUgPD0gMCB8fCAhc2VydmljZSB8fCBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgICAgICAgICBUYWtlIHBheW1lbnRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2Uob3V0U3RhbmRpbmdBbW91bnQsIGlzRmVlQW1vdW50WmVybylcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvdXRTdGFuZGluZ0Ftb3VudCA+IDAgfHwgKGlzRmVlQW1vdW50WmVybyAmJiBvdXRTdGFuZGluZ0Ftb3VudCA9PT0gMClcIj5cbiAgICAgICAgICAgICAgICAgIEFsbG9jYXRlIHBheW1lbnRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvdXRTdGFuZGluZ0Ftb3VudCA8IDAgfHwgKCFpc0ZlZUFtb3VudFplcm8gJiYgb3V0U3RhbmRpbmdBbW91bnQgPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICBDb250aW51ZVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L21haW4+XG48L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nXCI+XG4gICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVSRU1PVkFMQ09ORklSTUFUSU9OXzEnPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmVlP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncmJcIj5cbiAgICAgICAgPGZvcm0gbm92YWxpZGF0ZT5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxSZW1pc3Npb24oKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIiBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZW1vdmVCdG5EaXNhYmxlZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPSdpc1JlbW92ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZlZShjdXJyZW50RmVlKVwiPlxuICAgICAgICAgICAgUmVtb3ZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48Y2NwYXktYWRkLXJlbWlzc2lvbiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdhZGRfcmVtaXNzaW9uJyAmJiBjdXJyZW50RmVlXCJcbiBbaXNUdXJuT2ZmXT1cImlzVHVybk9mZlwiXG4gW2lzU3RyYXRlZ2ljRml4RW5hYmxlXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCIgXG4gW2ZlZV09XCJjdXJyZW50RmVlXCIgXG4gW3NlcnZpY2VdPVwic2VydmljZVwiIFxuIFtjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIiBcbiBbcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cFJlZlwiIFxuIChjYW5jZWxSZW1pc3Npb24pPVwiY2FuY2VsUmVtaXNzaW9uKClcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG4gPGlucHV0ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheWh1Yl92aWV3JyAmJiBwYXlodWJIdG1sXCIgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1BDSVBBTCc+XG48ZGl2ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheWh1Yl92aWV3JyAmJiBwYXlodWJIdG1sXCIgW2lubmVySFRNTF09XCJwYXlodWJIdG1sIHwgc2FuaXRpemVIdG1sXCIgaWQ9XCJwYXlodWItaHRtbC1pZFwiPjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5mZWUtc3VtbWFyeSAuZ3JleS10ZXh0e2NvbG9yOiM2YjczNzY7Zm9udC13ZWlnaHQ6NTAwfS5mZWUtc3VtbWFyeSAuZ292dWstdGFibGV7bWFyZ2luLWJvdHRvbTowfS5mZWUtc3VtbWFyeSAubm8tYm9yZGVye2JvcmRlcjpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZmVlLXN1bW1hcnkgdGFibGUgdGQsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoe2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjUwMDt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWF4LXdpZHRoOjMyMHB4fS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAubm8tcGFkZGluZywuZmVlLXN1bW1hcnkgdGFibGUgdGggLm5vLXBhZGRpbmd7cGFkZGluZzowfS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAuc3ViY29sdW1uLTEsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5zdWJjb2x1bW4tMXt3aWR0aDo0NSV9LmZlZS1zdW1tYXJ5IHRhYmxlIHRkIC5zdWJjb2x1bW4tMiwuZmVlLXN1bW1hcnkgdGFibGUgdGggLnN1YmNvbHVtbi0ye3dpZHRoOjI1JTt0ZXh0LWFsaWduOnJpZ2h0fS5mZWUtc3VtbWFyeSB0YWJsZSB0ZCAuc3ViY29sdW1uLTMsLmZlZS1zdW1tYXJ5IHRhYmxlIHRoIC5zdWJjb2x1bW4tM3t3aWR0aDozMCU7dGV4dC1hbGlnbjpjZW50ZXJ9LmdvdnVrLWJ1dHRvbi1ncmJ7cGFkZGluZy1ib3R0b206MjBweH0uZ292dWstYnV0dG9uLWdyYiAuZ292dWstYnV0dG9uLS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojZGVlMGUyO2JveC1zaGFkb3c6MCAycHggMCAjODU4Njg4O2NvbG9yOiMwYjBjMGM7bWFyZ2luLXJpZ2h0OjEwcHh9LmdvdnVrLWZvcm0tZ3JvdXAtLW1ne21hcmdpbi10b3A6MTBweCFpbXBvcnRhbnR9LmdvdnVrLWZpZWxkc2V0X19oZWFkaW5nLS1mentmb250LXNpemU6MTZweH0ucmVtaXNzaW9uRGlzYWJsZXtjb2xvcjpncmV5O2N1cnNvcjpkZWZhdWx0fS5oZWFkaW5nLXhsYXJnZXttYXJnaW46MCAwIDE0cHggLTIwcHh9LmdvdnVrLXNlbGVjdC0tY3VzdG9te3dpZHRoOjUwJX0uZGlzYWJsZS1saW5re2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6IzhlOGM4Y31gXVxufSlcblxuZXhwb3J0IGNsYXNzIEZlZVN1bW1hcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IHN0cmluZztcblxuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgY3VycmVudEZlZTogSUZlZTtcbiAgdG90YWxGZWU6IG51bWJlcjtcbiAgcGF5aHViSHRtbDogU2FmZUh0bWw7XG4gIHNlcnZpY2U6IHN0cmluZyA9IFwiXCI7XG4gIHVwUGF5bWVudEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjpzdHJpbmc7XG4gIGlzQmFja0J1dHRvbkVuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIG91dFN0YW5kaW5nQW1vdW50OiBudW1iZXI7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlOztcbiAgdG90YWxBZnRlclJlbWlzc2lvbjogbnVtYmVyID0gMDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbW92ZUJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudEV4aXN0OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uc0V4aXN0OiBCb29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgZmVhdHVyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmJzUGF5bWVudERjbk51bWJlcikge1xuICAgICAgdGhpcy5nZXRVbmFzc2lnbmVkUGF5bWVudGxpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRQYXltZW50R3JvdXAoKTtcbiAgfVxuXG4gICAgZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCkge1xuICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gJ2RjbicpIHtcbiAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRENOX05VTUJFUikuc3Vic2NyaWJlKFxuICAgICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICAgIGlmKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5Q0NEKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICAgIGlmKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7ICBcbiAgICAgICAgICB9ICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbiAgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZUNvZGU6IHN0cmluZyk6IElSZW1pc3Npb24ge1xuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zICYmIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbWlzc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGZWUgPSBmZWU7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkX3JlbWlzc2lvbic7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwKCkge1xuICAgIGxldCBmZWVzID0gW107XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRHcm91cFJlZikuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG4gICAgICAgIHRoaXMuaXNQYXltZW50RXhpc3QgPSBwYXltZW50R3JvdXAucGF5bWVudHMgPyBwYXltZW50R3JvdXAucGF5bWVudHMubGVuZ3RoID4gMCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc0V4aXN0ID0gcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMgPyBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRvdGFsQWZ0ZXJSZW1pc3Npb24gID0gdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uICArIGZlZS5uZXRfYW1vdW50O1xuICAgICAgICAgICAgICBpZihmZWUuY2FsY3VsYXRlZF9hbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmVlQW1vdW50WmVybyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgXG4gICAgICAgICAgICAgIGlmKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm91dFN0YW5kaW5nQW1vdW50ID0gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICB9XG5cbiAgY29uZmlybVJlbW92ZUZlZShmZWU6IElGZWUpe1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEZlZSA9IGZlZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbic7XG4gIH1cblxuICByZW1vdmVGZWUoZmVlOiBhbnkpe1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWUpLnN1YnNjcmliZShcbiAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5wYXltZW50R3JvdXAuZmVlcyAmJiB0aGlzLnBheW1lbnRHcm91cC5mZWVzLmxlbmd0aCA+IDEpe1xuICAgICAgICAgIHRoaXMudG90YWxBZnRlclJlbWlzc2lvbiA9IDA7XG4gICAgICAgICAgdGhpcy5nZXRQYXltZW50R3JvdXAoKTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuIGxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgbGV0IHBhcnRVcmwgPSBgc2VsZWN0ZWRPcHRpb249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OfWA7XG4gICAgICAgIHBhcnRVcmwgKz10aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICAgICBwYXJ0VXJsICs9dGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgbGV0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PXRydWUmJHtwYXJ0VXJsfWA7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICB9XG4gIGNhbmNlbFJlbWlzc2lvbigpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIH1cbiAgcmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgcGFnZT86IHN0cmluZykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgIHBhcnRVcmwgKz10aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgaWYodGhpcy52aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbicgfHwgdGhpcy52aWV3U3RhdHVzID09PSAnYWRkX3JlbWlzc2lvbicpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHVybCA9IGAvZmVlLXNlYXJjaD9jY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT059JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuICB0YWtlUGF5bWVudCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlcml2ZU5hbWUgPSB0aGlzLnNlcnZpY2UgPT09J0FBMDcnID8gJ0RJVk9SQ0UnOiB0aGlzLnNlcnZpY2UgPT09J0FBMDgnID8gJ1BST0JBVEUnIDogJ0ZJTlJFTScsXG5cbiAgICAgIHJlcXVlc3RCb2R5ID0gbmV3IFBheW1lbnRUb1BheWh1YlJlcXVlc3QodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLm91dFN0YW5kaW5nQW1vdW50LCB0aGlzLnNlcnZpY2UsIHNlcml2ZU5hbWUpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50VG9QYXlIdWIocmVxdWVzdEJvZHksIHRoaXMucGF5bWVudEdyb3VwUmVmKS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMubG9jYXRpb24uZ28oYHBheW1lbnQtaGlzdG9yeT92aWV3PWZlZS1zdW1tYXJ5YCk7XG4gICAgICAgIHRoaXMucGF5aHViSHRtbCA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5aHViX3ZpZXcnO1xuICAgICAgICB0aGlzLmlzQmFja0J1dHRvbkVuYWJsZT1mYWxzZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL3BjaS1wYWwtZmFpbHVyZScpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgZ29Ub0FsbG9jYXRlUGFnZShvdXRTdGFuZGluZ0Ftb3VudDogbnVtYmVyLCBpc0ZlZUFtb3VudFplcm86IEJvb2xlYW4pIHtcbiAgICBpZiAob3V0U3RhbmRpbmdBbW91bnQgPiAwIHx8IChvdXRTdGFuZGluZ0Ftb3VudCA9PT0gMCAmJiBpc0ZlZUFtb3VudFplcm8pKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5wYXltZW50R3JvdXBSZWY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnYWxsb2NhdGUtcGF5bWVudHMnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCk7XG4gICAgfVxuICB9XG4gIGlzQ2hlY2tBbW91bnRkdWVFeGlzdChhbW91bnREdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgYW1vdW50RHVlID09PSAndW5kZWZpbmVkJztcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1lcnJvci1iYW5uZXInLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGUgZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGUtY3VzdG9tXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAgICB7e2Vycm9yTWVzc2FnZS50aXRsZX19XG4gIDwvaDI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICA8bGk+XG4gICAgICAgICAge3tlcnJvck1lc3NhZ2UuYm9keX19XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+YCxcbiAgc3R5bGVzOiBbYC5nb3Z1ay1lcnJvci1zdW1tYXJ5IGgye2ZvbnQtc2l6ZToyNHB4fS5nb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0IGxpe2ZvbnQtc2l6ZToxOXB4fWBdXG59KVxuXG5leHBvcnQgY2xhc3MgRXJyb3JCYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2Vycm9yTWVzc2FnZScpIGVycm9yTWVzc2FnZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cbn1cbiIsIlxuZXhwb3J0IGNsYXNzIFVuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCB7XG4gIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IGFueTtcbiAgcGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudF9yZWZlcmVuY2U6IHN0cmluZztcbiAgdW5pZGVudGlmaWVkX3JlYXNvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRfcmVmZXJlbmNlIDogc3RyaW5nLCB1bmlkZW50aWZpZWRfcmVhc29uOiBhbnkpIHtcbiAgICB0aGlzLnBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXMgPSB7XG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBuYW1lOiBcIlVuaWRlbnRpZmllZFwiXG4gICAgfTtcbiAgICB0aGlzLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID0gcGF5bWVudF9ncm91cF9yZWZlcmVuY2UgO1xuICAgIHRoaXMucGF5bWVudF9yZWZlcmVuY2U9IHBheW1lbnRfcmVmZXJlbmNlO1xuICAgIHRoaXMudW5pZGVudGlmaWVkX3JlYXNvbj0gdW5pZGVudGlmaWVkX3JlYXNvbjtcblxuICB9XG5cblxuXG59XG4iLCJpbXBvcnQgeyBJQlNQYXltZW50cyB9IGZyb20gXCIuL0lCU1BheW1lbnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IHtcbiAgYW1vdW50OiBOdW1iZXI7XG4gIGJhbmtlZF9kYXRlOiBTdHJpbmc7XG4gIGNjZF9jYXNlX251bWJlcjogU3RyaW5nO1xuICBleGNlcHRpb25fcmVjb3JkOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBTdHJpbmc7XG4gIGRvY3VtZW50X2NvbnRyb2xfbnVtYmVyOiBTdHJpbmc7XG4gIGV4dGVybmFsX3Byb3ZpZGVyOiBTdHJpbmc7XG4gIGdpcm9fc2xpcF9ubzogU3RyaW5nO1xuICBwYXllcl9uYW1lOiBTdHJpbmc7XG4gIHBheW1lbnRfY2hhbm5lbDogT2JqZWN0O1xuICBwYXltZW50X3N0YXR1czogT2JqZWN0O1xuICBwYXltZW50X21ldGhvZDogU3RyaW5nO1xuICByZXF1ZXN0b3I6IFN0cmluZztcbiAgc2l0ZV9pZDogU3RyaW5nO1xuICBwYXltZW50X2FsbG9jYXRpb25fZHRvPzoge1xuICAgIGFsbG9jYXRpb25fcmVhc29uOiBTdHJpbmcsXG4gICAgYWxsb2NhdGlvbl9zdGF0dXM6IFN0cmluZyxcbiAgICBleHBsYW5hdGlvbjogU3RyaW5nLFxuICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IE9iamVjdCxcbiAgICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogU3RyaW5nLFxuICAgIHBheW1lbnRfcmVmZXJlbmNlOiBTdHJpbmcsXG4gICAgcmVhc29uOiBTdHJpbmcsXG4gICAgcmVjZWl2aW5nX29mZmljZTogU3RyaW5nLFxuICAgIHVuaWRlbnRpZmllZF9yZWFzb246IFN0cmluZyxcbiAgICB1c2VyX2lkOiBTdHJpbmcsXG4gICAgdXNlcl9uYW1lOiBTdHJpbmdcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNjZF9jYXNlX251bWJlciA6IHN0cmluZywgdW5BbGxvY2F0ZWRQYXltZW50OiBJQlNQYXltZW50cywgc2l0ZUlEOiBzdHJpbmcsIGV4Y2VwdGlvblJlY29yZDogc3RyaW5nLCBhbGxvY2F0ZWRSZXF1ZXN0PzogYW55KSB7XG4gICAgdGhpcy5hbW91bnQgPSB1bkFsbG9jYXRlZFBheW1lbnQuYW1vdW50O1xuICAgIHRoaXMuYmFua2VkX2RhdGUgPSB1bkFsbG9jYXRlZFBheW1lbnQuZGF0ZV9iYW5rZWQ7XG4gICAgdGhpcy5jY2RfY2FzZV9udW1iZXIgPSBjY2RfY2FzZV9udW1iZXI7XG4gICAgdGhpcy5leGNlcHRpb25fcmVjb3JkID0gZXhjZXB0aW9uUmVjb3JkO1xuICAgIHRoaXMuY3VycmVuY3k9IHVuQWxsb2NhdGVkUGF5bWVudC5jdXJyZW5jeTtcbiAgICB0aGlzLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyID0gdW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2U7XG4gICAgdGhpcy5leHRlcm5hbF9wcm92aWRlciA9ICdleGVsYSc7XG4gICAgdGhpcy5naXJvX3NsaXBfbm8gPSB1bkFsbG9jYXRlZFBheW1lbnQuYmdjX3JlZmVyZW5jZTtcbiAgICB0aGlzLnBheWVyX25hbWUgPSB1bkFsbG9jYXRlZFBheW1lbnQucGF5ZXJfbmFtZTtcbiAgICB0aGlzLnBheW1lbnRfY2hhbm5lbCA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIG5hbWU6ICdidWxrIHNjYW4nXG4gICAgfTtcbiAgICB0aGlzLnBheW1lbnRfc3RhdHVzID17XG4gICAgICBkZXNjcmlwdGlvbjogJ2J1bGsgc2NhbiBwYXltZW50IGNvbXBsZXRlZCcsXG4gICAgICBuYW1lOiAnc3VjY2VzcydcbiAgICB9XG4gICAgdGhpcy5wYXltZW50X21ldGhvZCA9IHVuQWxsb2NhdGVkUGF5bWVudC5wYXltZW50X21ldGhvZDtcbiAgICB0aGlzLnJlcXVlc3Rvcj0gc2l0ZUlEPT09J0FBMDcnID8gJ0RJVk9SQ0UnIDogc2l0ZUlEPT09J0FBMDgnID8gJ1BST0JBVEUnIDogJ0ZJTlJFTSc7XG4gICAgdGhpcy5zaXRlX2lkPSBzaXRlSUQ7XG4gICAgaWYoYWxsb2NhdGVkUmVxdWVzdCkge1xuICAgICAgdGhpcy5wYXltZW50X2FsbG9jYXRpb25fZHRvID0gYWxsb2NhdGVkUmVxdWVzdDtcbiAgICB9XG5cbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IElCU1BheW1lbnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQgeyBVbmlkZW50aWZpZWRQYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1VuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdCc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1hcmstdW5pZGVudGlmaWVkLXBheW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJta3BheS11bmlkZW50aWZpZWRcIiA+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+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYC5ta3BheS11bmlkZW50aWZpZWR7bWFyZ2luOjEwcHggMCAyMHB4fS5ta3BheS11bmlkZW50aWZpZWQgLmdvdnVrLWJ1dHRvbi0tZ3JvdXAgLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e21hcmdpbi1sZWZ0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojYjNiOGJkZjJ9Lm1rcGF5LXVuaWRlbnRpZmllZCAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0ubWtwYXktdW5pZGVudGlmaWVkIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9LmdvdnVrLWdyaWQtY29sdW1uLWZ1bGx7cGFkZGluZzowfS51bmlkZW50aWZpZWRTdWJUZXh0e2xpbmUtaGVpZ2h0OjQ1cHh9LmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dHtmb250LXNpemU6MTlweH0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0uY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtVbmlkZW50aWZpZWRQYXltZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtOiBGb3JtR3JvdXA7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW52ZXN0aWNhdGlvbkRldGFpbEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGludmVzdGljYXRpb25EZXRhaWxNaW5IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICB1bmFzc2lnbmVkUmVjb3JkOklCU1BheW1lbnRzO1xuICBzaXRlSUQ6IHN0cmluZyA9IG51bGw7XG4gIGludmVzdGlnYXRpb25Db21tZW50OiBzdHJpbmc7XG4gIGlzQ29uZmlybUJ1dHRvbmRpc2FibGVkOkJvb2xlYW4gPSBmYWxzZTtcbiAgY2NkUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBleGNlcHRpb25SZWZlcmVuY2U6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnQoKTtcblxuICAgIHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnZlc3RpY2F0aW9uRGV0YWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpXG4gICAgICBdKSlcbiAgICB9KTtcbiAgfVxuIGdldFVuYXNzaWduZWRQYXltZW50KCkge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5nZXRCU1BheW1lbnRzQnlEQ04odGhpcy5ic3BheW1lbnRkY24pLnN1YnNjcmliZShcbiAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnVuYXNzaWduZWRSZWNvcmQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cy5maWx0ZXIocGF5bWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICAgYmVFeGNlcHRpb25OdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSxcbiAgICAgICAgICBleGNlcHRpb25SZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyID09PSB0aGlzLmNjZENhc2VOdW1iZXIgPyBudWxsIDogdGhpcy5jY2RDYXNlTnVtYmVyIDogdGhpcy5jY2RDYXNlTnVtYmVyO1xuICAgICAgICB0aGlzLmNjZFJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgOiBudWxsO1xuICAgICAgICB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlRXhjZXB0aW9uTnVtYmVyID8gYmVFeGNlcHRpb25OdW1iZXIgOiBleGNlcHRpb25SZWZlcmVuY2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHRyaW1VbmRlcnNjb3JlKG1ldGhvZDogc3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnJlbW92ZVVud2FudGVkU3RyaW5nKG1ldGhvZCwnICcpO1xuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbiAgY29uc3QgaW52ZXN0aWNhdGlvbkZpZWxkID0gdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uY29udHJvbHMuaW52ZXN0aWNhdGlvbkRldGFpbDtcbiAgY29uc3QgZm9ybWVycm9yID0gaW52ZXN0aWNhdGlvbkZpZWxkLmVycm9ycztcbiAgICBpZiAodGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuaWRlbnRpZmllZEZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuaW52ZXN0aWdhdGlvbkNvbW1lbnQgPSB0aGlzLm1hcmtQYXltZW50VW5pZGVudGlmaWVkRm9ybS5jb250cm9scy5pbnZlc3RpY2F0aW9uRGV0YWlsLnZhbHVlO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3VuaWRlbnRpZmllZENvbnRpbnVlQ29uZmlybSc7XG4gICAgfWVsc2Uge1xuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoaW52ZXN0aWNhdGlvbkZpZWxkLnZhbHVlICE9ICcnICYmIGludmVzdGljYXRpb25GaWVsZC5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5taW5sZW5ndGggJiYgZm9ybWVycm9yLm1pbmxlbmd0aC5hY3R1YWxMZW5ndGggPCAzICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0pO1xuICAgICAgfVxuICAgICAgaWYoZm9ybWVycm9yICYmIGZvcm1lcnJvci5tYXhsZW5ndGggJiYgZm9ybWVycm9yLm1heGxlbmd0aC5hY3R1YWxMZW5ndGggPiAyNTUgKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwpIHtcbiAgICAgIHRoaXMuaXNJbnZlc3RpY2F0aW9uRGV0YWlsRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmludmVzdGljYXRpb25EZXRhaWxIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaW52ZXN0aWNhdGlvbkRldGFpbE1pbkhhc0Vycm9yID0gdmFsWzJdO1xuICAgICAgdGhpcy5pbnZlc3RpY2F0aW9uRGV0YWlsTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gIH1cbiAgY29uZmlybVBheW1lbnRzKCkge1xuICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHJlYXNvbiA9IHRoaXMubWFya1BheW1lbnRVbmlkZW50aWZpZWRGb3JtLmdldCgnaW52ZXN0aWNhdGlvbkRldGFpbCcpLnZhbHVlO1xuXG4gICAgaWYoIXRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUpIHtcbiAgICAgIGxldCBhbGxvY2F0ZWRSZXF1ZXN0ID0ge1xuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonVW5pZGVudGlmaWVkJyxcbiAgICAgICAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBuYW1lOiAnVW5pZGVudGlmaWVkJ1xuICAgICAgICB9LFxuICAgICAgICB1bmlkZW50aWZpZWRfcmVhc29uOiByZWFzb24sXG4gICAgICAgIHVzZXJfaWQ6IHRoaXMuc2l0ZUlELFxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFN0cmF0ZWdpY0JvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSwgYWxsb2NhdGVkUmVxdWVzdCk7XG4gICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucG9zdEJTV29QR1N0cmF0ZWdpYyhwb3N0U3RyYXRlZ2ljQm9keSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGxldCByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuYXNzaWduZWRSZWNvcmQuZGNuX3JlZmVyZW5jZSwgJ1BST0NFU1NFRCcpLnN1YnNjcmliZShcbiAgICAgICAgICByZXMxID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSlcbiAgICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RCU1BheW1lbnRzKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIHJlczIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IEpTT04ucGFyc2UocmVzMiksXG4gICAgICAgICAgICAgICAgICByZXFCb2R5ID0gbmV3IFVuaWRlbnRpZmllZFBheW1lbnRzUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlMlsnZGF0YSddLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCByZXNwb25zZTJbJ2RhdGEnXS5yZWZlcmVuY2UsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMi5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0QlNVbmlkZW50aWZpZWRQYXltZW50cyhyZXFCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIHJlczMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMyA9IEpTT04ucGFyc2UocmVzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuYXNzaWduZWRSZWNvcmQuZGNuX3JlZmVyZW5jZSwgJ0NPTVBMRVRFJykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gIH1cbiAgY2FuY2VsTWFya1VuaWRlbnRpZmllZFBheW1lbnRzKHR5cGU/OnN0cmluZyl7XG4gICAgaWYodHlwZSAmJiB0eXBlID09PSAnY2FuY2VsJykge1xuICAgICAgICBpZih0aGlzLm1hcmtQYXltZW50VW5pZGVudGlmaWVkRm9ybS5nZXQoJ2ludmVzdGljYXRpb25EZXRhaWwnKS52YWx1ZSE9PVwiXCIpe1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICd1bmlkZW50aWZpZWRDYW5jZWxDb25maXJtJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbkZvcm0nO1xuICAgIH1cbiAgfVxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgfVxuICBnZXRFcnJvck1lc3NhZ2UoaXNFcnJvckV4aXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBcIlRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzZXJ2aWNlXCIsXG4gICAgICBib2R5OiBcIlRyeSBhZ2FpbiBsYXRlclwiLFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG59XG4iLCJcbmV4cG9ydCBjbGFzcyBVbnNvbGljaXRlZFBheW1lbnRzUmVxdWVzdCB7XG4gIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IGFueTtcbiAgcGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudF9yZWZlcmVuY2U6IHN0cmluZztcbiAgcmVjZWl2aW5nX29mZmljZTogc3RyaW5nO1xuICByZWNlaXZpbmdfZW1haWxfYWRkcmVzczogc3RyaW5nO1xuICBzZW5kaW5nX2VtYWlsX2FkZHJlc3M6IHN0cmluZztcbiAgdW5pZGVudGlmaWVkX3JlYXNvbjogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50X3JlZmVyZW5jZSA6IHN0cmluZywgcmVhc29uOiBzdHJpbmcscmVzcG9uc2libGVfb2ZmaWNlOiBzdHJpbmcsIHJlc3BvbnNpYmxlX3BlcnNvbjpzdHJpbmcsZW1haWxfaWQ6IHN0cmluZykge1xuICAgIHRoaXMucGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1cyA9IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgbmFtZTogXCJUcmFuc2ZlcnJlZFwiXG4gICAgfTtcbiAgICB0aGlzLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID0gcGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50X3JlZmVyZW5jZT0gcGF5bWVudF9yZWZlcmVuY2U7XG4gICAgdGhpcy51bmlkZW50aWZpZWRfcmVhc29uPSByZWFzb247XG4gICAgdGhpcy5yZWNlaXZpbmdfb2ZmaWNlPSByZXNwb25zaWJsZV9vZmZpY2U7XG4gICAgdGhpcy5yZWNlaXZpbmdfZW1haWxfYWRkcmVzcz0gZW1haWxfaWQ7XG4gICAgdGhpcy5zZW5kaW5nX2VtYWlsX2FkZHJlc3M9IHJlc3BvbnNpYmxlX3BlcnNvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBJQlNQYXltZW50cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUJTUGF5bWVudHMnO1xuaW1wb3J0IHsgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Vuc29saWNpdGVkUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BbGxvY2F0ZVBheW1lbnRSZXF1ZXN0JztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaGFyZWQvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFyay11bnNvbGljaXRlZC1wYXltZW50JyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibWtwYXktdW5pZGVudGlmaWVkXCI+XG4gIDxkaXYgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbkZvcm0nXCI+XG4gIDxjY3BheS1lcnJvci1iYW5uZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2Uuc2hvd0Vycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIj48L2NjcGF5LWVycm9yLWJhbm5lcj5cbiAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPk1hcmsgcGF5bWVudCBhcyB0cmFuc2ZlcnJlZDwvaDE+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgIDxociBjbGFzcz1cImdvdnVrLXNlY3Rpb24tYnJlYWsgZ292dWstc2VjdGlvbi1icmVhay0tdmlzaWJsZVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IGFzc2V0IG51bWJlciAoRENOKTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5CYW5rZWQgZGF0ZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7dW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmRhdGVfYmFua2VkIHwgZGF0ZTonZGQgTU1NIHl5eXknfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbFwiPiB7e3RyaW1VbmRlcnNjb3JlKHVuYXNzaWduZWRSZWNvcmQucGF5bWVudF9tZXRob2QpIHwgbG93ZXJjYXNlfX0gIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuICBcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJtYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybVwiIG5vdmFsaWRhdGU+XG4gICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdNQVJLVFJBTlNGRVJSRUQnPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBjdXN0b20tZ292dWstbGFiZWwgY3VzdG9tLWdvdnVrLWxhYmVsXCIgZm9yPVwicmVhc29uXCI+XG4gICAgICAgIFJlYXNvbiBmb3IgcGF5bWVudCBiZWluZyBtYXJrZWQgYXMgdHJhbnNmZXJyZWQgICBcbiAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00XCIgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItY2xhc3MnOiByZWFzb25IYXNFcnJvciB8fCByZWFzb25NaW5IYXNFcnJvciB8fCByZWFzb25NYXhIYXNFcnJvcn1cIiBuYW1lPVwicmVhc29uXCIgaWQ9XCJyZWFzb25cIiByb3dzPVwiNVwiIGZvcm1Db250cm9sTmFtZT1cInJlYXNvblwiPlxuICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1JlYXNvbkVtcHR5IHx8IHJlYXNvbkhhc0Vycm9yIHx8IHJlYXNvbk1pbkhhc0Vycm9yIHx8IHJlYXNvbk1heEhhc0Vycm9yXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1JlYXNvbkVtcHR5XCI+RW50ZXIgYSByZWFzb24gZm9yIG1hcmtpbmcgdGhpcyBwYXltZW50IGFzIHRyYW5zZmVycmVkLjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlYXNvbkhhc0Vycm9yXCI+RW50ZXIgYSB2YWxpZCByZWFzb248L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZWFzb25NaW5IYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlYXNvbk1heEhhc0Vycm9yXCI+UmVhc29uIHNob3VsZCBiZSAyNTUgY2hhcmFjdGVycyBvciB1bmRlci48L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgY3VzdG9tLWdvdnVrLWxhYmVsXCIgZm9yPVwicmVzcG9uc2libGVPZmZpY2VcIj5cbiAgICAgICAgUmVjZWl2aW5nIFNpdGUgSUQgKFJlY2VpdmluZyBjb3VydC9CdWxrIGNlbnRyZSBzaXRlIElEKSAgICBcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNob3J0LWlucHV0XCIgaWQ9XCJyZXNwb25zaWJsZU9mZmljZVwiIGZvcm1Db250cm9sTmFtZT1cInJlc3BvbnNpYmxlT2ZmaWNlXCIgKGNoYW5nZSk9XCJzZWxlY3RjaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJz5QbGVhc2Ugc2VsZWN0PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gICpuZ0Zvcj1cImxldCBzaXRlSUQgb2Ygc2l0ZUlETGlzdDtcIiB2YWx1ZT1cInt7c2l0ZUlELnNpdGVJZH19XCI+e3tzaXRlSUQuc2l0ZU5hbWV9fSAoe3tzaXRlSUQuc2l0ZUlkfX0pPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzUmVzcG9uc2libGVPZmZpY2VFbXB0eSB8fCByZXNwb25zaWJsZU9mZmljZUhhc0Vycm9yXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZXNwb25zaWJsZU9mZmljZUVtcHR5XCI+UGxlYXNlIHNlbGVjdCBSZWNlaXZpbmcgU2l0ZSBJRDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNwb25zaWJsZU9mZmljZUhhc0Vycm9yXCI+UGxlYXNlIHNlbGVjdCBhIHZhbGlkIFJlY2VpdmluZyBTaXRlIElEPC9zcGFuPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi0tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWRcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlQW5kQ29udGludWUoKVwiPlxuICAgICAgICBDb25maXJtXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbE1hcmtVbnNvbGljaXRlZFBheW1lbnRzKCdjYW5jZWwnKVwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG4gIFxuPC9kaXY+XG4gICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICd1bnNvbGljaXRlZENvbnRpbnVlQ29uZmlybSdcIj5cbiAgICAgICAgICA8Y2NwYXktZXJyb3ItYmFubmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlLnNob3dFcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCI+PC9jY3BheS1lcnJvci1iYW5uZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbWFyayB0aGlzIHBheW1lbnQgYXMgdHJhbnNmZXJyZWQ/IDwvaDE+XG4gICAgICAgIDwvc3Ryb25nPlxuICAgICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1RSQU5TRkVSUkVEQ09ORklSTUFUSU9OJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gICAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlYXNvbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlY2VpdmluZyBzaXRlIElEPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tyZWFzb259fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7c2VsZWN0ZWRTaXRlTmFtZX19PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzQ29uZmlybUJ1dHRvbmRpc2FibGVkXCIgKGNsaWNrKT1cImNvbmZpcm1QYXltZW50cygpXCI+XG4gICAgICAgICAgQ29uZmlybVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHMoKVwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICd1bnNvbGljaXRlZENhbmNlbENvbmZpcm0nXCI+XG4gICAgICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FOQ0VMVFJBTlNGRVJSRUQnPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2Fzc2lzdGl2ZVwiPldhcm5pbmc8L3NwYW4+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbD9cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKVwiPlxuICAgICAgICAgIFllc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHMoKVwiPlxuICAgICAgICAgIE5vXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5gLFxuICBzdHlsZXM6IFtgLm1rcGF5LXVuaWRlbnRpZmllZHttYXJnaW46MTBweCAwIDIwcHh9Lm1rcGF5LXVuaWRlbnRpZmllZCAuZ292dWstYnV0dG9uLS1zZWNvbmRhcnl7bWFyZ2luLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOiNiM2I4YmRmMn0ubWtwYXktdW5pZGVudGlmaWVkIC5pbmxpbmUtZXJyb3ItY2xhc3N7b3V0bGluZTojYTcxNDE0IHNvbGlkIDNweDtvdXRsaW5lLW9mZnNldDowfS5ta3BheS11bmlkZW50aWZpZWQgLmlubGluZS1lcnJvci1tZXNzYWdle2NvbG9yOiNhNzE0MTQ7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6MTBweH0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0uY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfS5jdXN0b20tZ292dWstbGFiZWwsLmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dHtmb250LXNpemU6MTlweH0jcmVzcG9uc2libGVPZmZpY2V7Y29sb3I6IzAwMDt3aWR0aDo3NSU7Zm9udC13ZWlnaHQ6I2ZmZn1zZWxlY3Qgb3B0aW9ue2JhY2tncm91bmQ6I2ZmZn1gXVxufSlcbmV4cG9ydCBjbGFzcyBNYXJrVW5zb2xpY2l0ZWRQYXltZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm06IEZvcm1Hcm91cDtcbiAgdmlld1N0YXR1czogc3RyaW5nO1xuICByZWFzb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlYXNvbk1pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlYXNvbk1heEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlc3BvbnNpYmxlT2ZmaWNlSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZXNwb25zaWJsZU9mZmljZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBic3BheW1lbnRkY246IHN0cmluZztcbiAgdW5hc3NpZ25lZFJlY29yZDogSUJTUGF5bWVudHM7XG4gIHNpdGVJRDogc3RyaW5nID0gbnVsbDtcbiAgcmVhc29uOiBzdHJpbmc7XG4gIHJlc3BvbnNpYmxlUGVyc29uOiBzdHJpbmc7XG4gIHJlc3BvbnNpYmxlT2ZmaWNlOiBzdHJpbmc7XG4gIGVtYWlsSWQ6IHN0cmluZztcbiAgaXNDb25maXJtQnV0dG9uZGlzYWJsZWQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkOiBCb29sZWFuID0gZmFsc2U7XG4gIGNjZFJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgZXhjZXB0aW9uUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBzZWxlY3RlZFNpdGVJZDogc3RyaW5nO1xuICBzZWxlY3RlZFNpdGVOYW1lOiBzdHJpbmc7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2l0ZUlETGlzdDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbkZvcm0nO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5ic3BheW1lbnRkY24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICB0aGlzLmdldFVuYXNzaWduZWRQYXltZW50KCk7XG5cbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRTaXRlSUQoKS5zdWJzY3JpYmUoXG4gICAgICBzaXRlaWRzID0+IHtcbiAgICAgICAgdGhpcy5pc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2l0ZUlETGlzdCA9IEpTT04ucGFyc2Uoc2l0ZWlkcyk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICB0aGlzLmlzQ29udGludWVCdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBcbiAgICB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZWFzb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHMsXFxcXC5dKikkJylcbiAgICAgIF0pKSxcbiAgICAgIHJlc3BvbnNpYmxlT2ZmaWNlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHNcXFxcbixcXFxcLi06XSopJCcpXG4gICAgICBdKSksXG4gICAgICByZXNwb25zaWJsZVBlcnNvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVtYWlsSWQ6IG5ldyBGb3JtQ29udHJvbCgnJylcbiAgICB9KTtcbiAgfVxuICB0cmltVW5kZXJzY29yZShtZXRob2Q6IHN0cmluZyl7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5yZW1vdmVVbndhbnRlZFN0cmluZyhtZXRob2QsJyAnKTtcbiAgfVxuICBjb25maXJtUGF5bWVudHMoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzO1xuICAgIGlmKCF0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlKSB7XG4gICAgICBsZXQgYWxsb2NhdGVkUmVxdWVzdCA9IHtcbiAgICAgICAgYWxsb2NhdGlvbl9zdGF0dXM6J1RyYW5zZmVycmVkJyxcbiAgICAgICAgcGF5bWVudF9hbGxvY2F0aW9uX3N0YXR1czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBuYW1lOiAnVHJhbnNmZXJyZWQnXG4gICAgICAgIH0sXG4gICAgICAgIHVuaWRlbnRpZmllZF9yZWFzb246IGNvbnRyb2xzLnJlYXNvbi52YWx1ZSxcbiAgICAgICAgcmVjZWl2aW5nX29mZmljZTogdGhpcy5zZWxlY3RlZFNpdGVJZCxcbiAgICAgICAgdXNlcl9pZDogdGhpcy5zaXRlSUQsXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0U3RyYXRlZ2ljQm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5hc3NpZ25lZFJlY29yZCwgdGhpcy5zaXRlSUQsIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlLCBhbGxvY2F0ZWRSZXF1ZXN0KTtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNXb1BHU3RyYXRlZ2ljKHBvc3RTdHJhdGVnaWNCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAvLyBjb250cm9scy5yZXNwb25zaWJsZU9mZmljZS5zZXRWYWx1ZSgnUDIxOScpO1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBjb25zdCByZXNwb25zZTEgPSBKU09OLnBhcnNlKHJlczEpLFxuICAgICAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuYXNzaWduZWRSZWNvcmQsIHRoaXMuc2l0ZUlELCB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSlcbiAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTUGF5bWVudHMocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKSxcbiAgICAgICAgICAgIHJlcUJvZHkgPSBuZXcgVW5zb2xpY2l0ZWRQYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgIChyZXNwb25zZTJbJ2RhdGEnXS5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgcmVzcG9uc2UyWydkYXRhJ10ucmVmZXJlbmNlLCBjb250cm9scy5yZWFzb24udmFsdWUsIHRoaXMuc2VsZWN0ZWRTaXRlSWQsIGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlLCBjb250cm9scy5lbWFpbElkLnZhbHVlKTtcbiAgICAgICAgICAgICBpZiAocmVzcG9uc2UyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTVW5zb2xpY2l0ZWRQYXltZW50cyhyZXFCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMyA9IEpTT04ucGFyc2UocmVzMyk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG4gc2F2ZUFuZENvbnRpbnVlKCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcbiAgICAgICAgY29uc3QgZm9ybWVycm9yID0gdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS5jb250cm9scy5yZWFzb24uZXJyb3JzO1xuICAgICAgICBjb25zdCByZWFzb25GaWVsZCA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVhc29uO1xuICAgICAgICAvL2NvbnN0IG9mZmljZUlkRmllbGQgPSB0aGlzLnNlbGVjdGVkU2l0ZUlkO1xuICAgICAgICBjb25zdCBvZmZpY2VJZEZpZWxkICA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uY29udHJvbHMucmVzcG9uc2libGVPZmZpY2U7XG4gICAgaWYgKHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0uZGlydHkgJiYgdGhpcy5tYXJrUGF5bWVudFVuc29saWNpdGVkRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgY29udHJvbHMgPSB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzO1xuICAgICAgdGhpcy5lbWFpbElkID0gY29udHJvbHMuZW1haWxJZC52YWx1ZTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2UgPSBvZmZpY2VJZEZpZWxkLnZhbHVlO1xuICAgICAgdGhpcy5yZXNwb25zaWJsZVBlcnNvbiA9IGNvbnRyb2xzLnJlc3BvbnNpYmxlUGVyc29uLnZhbHVlO1xuICAgICAgdGhpcy5yZWFzb24gPSBjb250cm9scy5yZWFzb24udmFsdWU7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDb250aW51ZUNvbmZpcm0nO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKCByZWFzb25GaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihyZWFzb25GaWVsZC52YWx1ZSAhPSAnJyAmJiB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlYXNvbi5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKGZvcm1lcnJvciAmJiBmb3JtZXJyb3IubWlubGVuZ3RoICYmIGZvcm1lcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihmb3JtZXJyb3IgJiYgZm9ybWVycm9yLm1heGxlbmd0aCAmJiBmb3JtZXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2VdLCAncmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlXSwgJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgICBpZihvZmZpY2VJZEZpZWxkLnZhbHVlICE9ICcnICYmIG9mZmljZUlkRmllbGQuaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZV0sJ3Jlc3BvbnNpYmxlT2ZmaWNlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybSh2YWwsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlYXNvbkhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5yZWFzb25NaW5IYXNFcnJvciA9IHZhbFsyXTtcbiAgICAgIHRoaXMucmVhc29uTWF4SGFzRXJyb3IgPSB2YWxbM107XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3Jlc3BvbnNpYmxlT2ZmaWNlJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVzcG9uc2libGVPZmZpY2VFbXB0eSA9IHZhbFs0XTtcbiAgICAgIHRoaXMucmVzcG9uc2libGVPZmZpY2VIYXNFcnJvciA9IHZhbFs1XTtcbiAgICB9XG4gIH1cblxuY2FuY2VsTWFya1Vuc29saWNpdGVkUGF5bWVudHModHlwZT86c3RyaW5nKXtcbiAgICBpZih0eXBlICYmIHR5cGUgPT09ICdjYW5jZWwnKSB7XG4gICAgICBpZih0aGlzLmNoZWNraW5nRm9ybVZhbHVlKCkpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAndW5zb2xpY2l0ZWRDYW5jZWxDb25maXJtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtQYXltZW50VW5zb2xpY2l0ZWRGb3JtLmNvbnRyb2xzLnJlc3BvbnNpYmxlT2ZmaWNlLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgfVxuICB9XG4gIGNoZWNraW5nRm9ybVZhbHVlKCl7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMubWFya1BheW1lbnRVbnNvbGljaXRlZEZvcm0udmFsdWU7XG4gICAgbGV0IHZhbHVlRXhpc3RzID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBmaWVsZCBpbiBmb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkgJiYgZm9ybUZpZWxkc1tmaWVsZF0gIT09XCJcIikge1xuICAgICAgICB2YWx1ZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVFeGlzdHM7XG4gIH1cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG4gICBnZXRVbmFzc2lnbmVkUGF5bWVudCgpIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMuYnNwYXltZW50ZGNuKS5zdWJzY3JpYmUoXG4gICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICBcbiAgICAgIHRoaXMudW5hc3NpZ25lZFJlY29yZCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzLmZpbHRlcihwYXltZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgfSlbMF07XG4gICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgICBiZUV4Y2VwdGlvbk51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLFxuICAgICAgICAgZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA9PT0gdGhpcy5jY2RDYXNlTnVtYmVyID8gbnVsbCA6IHRoaXMuY2NkQ2FzZU51bWJlciA6IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgICAgICAgdGhpcy5jY2RSZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyIDogbnVsbDtcbiAgICAgICAgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UgPSBiZUV4Y2VwdGlvbk51bWJlciA/IGJlRXhjZXB0aW9uTnVtYmVyIDogZXhjZXB0aW9uUmVmZXJlbmNlO1xuICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoaXNFcnJvckV4aXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwiLFxuICAgICAgYm9keTogXCJQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpeyBcbiAgICB0aGlzLnNlbGVjdGVkU2l0ZUlkID0gYXJncy50YXJnZXQudmFsdWU7IFxuICAgIHRoaXMuc2VsZWN0ZWRTaXRlTmFtZSA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQuc2VsZWN0ZWRJbmRleF0udGV4dDsgXG4gIH0gXG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsSW5wdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQlNQYXltZW50cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUJTUGF5bWVudHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInVucHJvY2Vzc2VkLXBheW1lbnRzIGdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLWJvdHRvbS0zXCI+XG4gIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nQ0FTRVRSQU5TQUNUSU9OJz5cbiAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIiAqbmdJZj1cIiFJU19CVVRUT05fRU5BQkxFXCI+VW5wcm9jZXNzZWQgcGF5bWVudHM8L2gzPlxuICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiICpuZ0lmPVwiSVNfQlVUVE9OX0VOQUJMRVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC9oMz5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmICFpc1R1cm5PZmZcIj5TZWxlY3Q8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgKm5nSWY9XCJJU19CVVRUT05fRU5BQkxFICYmIGlzVHVybk9mZlwiPjxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cInVucHJvY2Vzc2VkUGF5bWVudFVuU2VsZWN0RXZlbnQoJGV2ZW50KVwiPlVuc2VsZWN0PC9hPjwvdGQ+XG5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgYXNzZXQgbnVtYmVyIChEQ04pPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkJhbmtlZCBkYXRlPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHVuYXNzaWduZWRSZWNvcmQgb2YgdW5hc3NpZ25lZFJlY29yZExpc3Q7IGxldCBpIG9mIGluZGV4O1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpcGxlLWNob2ljZSB1bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiJ3VucGFpZWRGZWUnK2krJydcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ1bmFzc2lnbmVkUmVjb3JkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidW5hc3NpZ25lZFJlY29yZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZElkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQodW5hc3NpZ25lZFJlY29yZC5kY25fcmVmZXJlbmNlKVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7e3VuYXNzaWduZWRSZWNvcmQuZGNuX3JlZmVyZW5jZX19XCIgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmFkaW8taW5saW5lLTFcIj48L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj5cbiAgICAgICAgICAgICAge3t1bmFzc2lnbmVkUmVjb3JkLmRjbl9yZWZlcmVuY2V9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e3VuYXNzaWduZWRSZWNvcmQuZGF0ZV9iYW5rZWQgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3t1bmFzc2lnbmVkUmVjb3JkLmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2FwaXRhbGl6ZSBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3sgdHJpbVVuZGVyc2NvcmUodW5hc3NpZ25lZFJlY29yZC5wYXltZW50X21ldGhvZCkgfCBsb3dlcmNhc2V9fSAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJ1cFBheW1lbnRFcnJvck1lc3NhZ2UgIT09IG51bGxcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHVuYWxsb2NhdGVkIHBheW1lbnRzIHJlY29yZCBhdmFpbGFibGU8L3RkPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgIWlzVHVybk9mZlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiIWlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID8gJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnIDogJ2J1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xJ1wiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGEgbmV3IGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzQWxsb2NhdGVUb0V4aXN0aW5nRmVlYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2UoKVwiPlxuICAgICAgICBBbGxvY2F0ZSB0byBhbiBleGlzdGluZyBmZWVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc01hcmtBc1VuaWRlbnRpZmllZGJ0bkVuYWJsZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bmlkZW50aWZpZWRQYWdlJylcIj5cbiAgICAgICAgTWFyayBhcyB1bmlkZW50aWZpZWRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZFwiXG4gICAgICBbbmdDbGFzc109JyFpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPyAgXCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInIChjbGljayk9XCJsb2FkVW5zb2xpY2l0ZWRQYWdlKCd1bnNvbGljaXRlZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHRyYW5zZmVycmVkXG4gICAgICA8L2J1dHRvbj4gIFxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncmJcIiAqbmdJZj1cIklTX0JVVFRPTl9FTkFCTEUgJiYgaXNUdXJuT2ZmXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZFwiXG4gICAgICBbbmdDbGFzc109XCIhaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPyAnYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMScgOiAnYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTEnXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIj5cbiAgICAgICAgQWxsb2NhdGUgdG8gYSBuZXcgZmVlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSchaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID8gIFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJyAoY2xpY2spPVwiZ29Ub0FsbG9jYXRlUGFnZSgpXCI+XG4gICAgICAgIEFsbG9jYXRlIHRvIGFuIGV4aXN0aW5nIGZlZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzTWFya0FzVW5pZGVudGlmaWVkYnRuRW5hYmxlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3VuaWRlbnRpZmllZFBhZ2UnKVwiPlxuICAgICAgICBNYXJrIGFzIHVuaWRlbnRpZmllZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0nIWlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA/ICBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIicgKGNsaWNrKT1cImxvYWRVbnNvbGljaXRlZFBhZ2UoJ3Vuc29saWNpdGVkUGFnZScpXCI+XG4gICAgICAgIE1hcmsgYXMgdHJhbnNmZXJyZWRcbiAgICAgIDwvYnV0dG9uPiBcbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLnVucHJvY2Vzc2VkLXBheW1lbnRzIC51bnByb2Nlc3NlZC1wYXltZW50cy0tcmFkaW8tYnV0dG9ue2JvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6LjUyNjMxNWVtIC43ODk0NzNlbSAuMjYzMTU3ZW07Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgyM2I7cG9pbnRlci1ldmVudHM6bm9uZTtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuMjU7b3V0bGluZTp0cmFuc3BhcmVudCBzb2xpZCAxcHg7b3V0bGluZS1vZmZzZXQ6LTFweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93OjAgMnB4IDAgIzAwMzYxOH0uYnV0dG9uLmRpc2FibGVkLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdLC5idXR0b25bZGlzYWJsZWRde3pvb206MTtvcGFjaXR5Oi41fS5idXR0b24uZGlzYWJsZWQ6YWN0aXZlLC5idXR0b25bZGlzYWJsZWQ9ZGlzYWJsZWRdOmFjdGl2ZSwuYnV0dG9uW2Rpc2FibGVkXTphY3RpdmV7dG9wOjA7Ym94LXNoYWRvdzowIDJweCAwICMwMDM2MTh9LmJ1dHRvbltkaXNhYmxlZD1kaXNhYmxlZF17YmFja2dyb3VuZDojMDA4MjNifS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jYXBpdGFsaXplOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS53aGl0ZXNwYWNlLWluaGVyaXR7d2hpdGUtc3BhY2U6aW5oZXJpdCFpbXBvcnRhbnR9YF1cbn0pXG5leHBvcnQgY2xhc3MgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCdGRUVfUkVDT1JEU19FWElTVFMnKSBGRUVfUkVDT1JEU19FWElTVFM6IGJvb2xlYW47XG4gIEBJbnB1dCgnUEFZTUVOVFJFRicpIFBBWU1FTlRSRUY6IHN0cmluZztcbiAgQElucHV0KCdJU1RVUk5PRkYnKSBJU1RVUk5PRkY6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfQlVUVE9OX0VOQUJMRScpIElTX0JVVFRPTl9FTkFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNfT1NfQU1UX0FWQUlMQUJMRScpIElTX09TX0FNVF9BVkFJTEFCTEU6IGJvb2xlYW47XG4gIEBJbnB1dCgnSVNTRkVOQUJMRScpIElTU0ZFTkFCTEU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBnZXRVbnByb2Nlc3NlZEZlZUNvdW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICB1bmFzc2lnbmVkUmVjb3JkTGlzdDogSUJTUGF5bWVudHM7XG4gIHVwUGF5bWVudEVycm9yTWVzc2FnZTogc3RyaW5nID0gbnVsbDtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICByZWNvcmRJZDogc3RyaW5nID0gbnVsbDtcbiAgaXNSZWNvcmRFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBkY25OdW1iZXI6IHN0cmluZyA9IG51bGw7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRXhjZXB0aW9uQ2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZXJ2aWNlSWQ6IHN0cmluZyA9IG51bGw7XG4gIGlzQnVsa1NjYW5FbmFibGU7XG4gIGlzVHVybk9mZjogYm9vbGVhbiA9IHRydWU7XG4gIGlzU3RGaXhFbmFibGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBUb2RvIC4uLlxuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT04udG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzU3RGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcblxuICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCk7XG4gICAgIH1cblxuICBnZXRVbmFzc2lnbmVkUGF5bWVudGxpc3QoKSB7XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uID09PSAnZGNuJykge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMuZGNuTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgICAgaWYodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10gJiYgdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHVuYXNzaWduZWRQYXltZW50c1sncGF5bWVudHMnXSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXNGb3JVbmFzc2lnbmVkUmVjb3JkKHVuYXNzaWduZWRQYXltZW50cyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KCcwJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5nZXRVbnByb2Nlc3NlZEZlZUNvdW50LmVtaXQoJzAnKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5Q0NEKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICB1bmFzc2lnbmVkUGF5bWVudHMgPT4ge1xuICAgICAgICAgIGlmKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddICYmIHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlc0ZvclVuYXNzaWduZWRSZWNvcmQodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZih1bmFzc2lnbmVkUGF5bWVudHNbJ3BheW1lbnRzJ10pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmdldFVucHJvY2Vzc2VkRmVlQ291bnQuZW1pdCgnMCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KCcwJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cbiAgc2V0VmFsdWVzRm9yVW5hc3NpZ25lZFJlY29yZCh1bmFzc2lnbmVkUGF5bWVudHMpIHtcbiAgICB0aGlzLnVuYXNzaWduZWRSZWNvcmRMaXN0ID0gdW5hc3NpZ25lZFBheW1lbnRzLnBheW1lbnRzO1xuICAgIHRoaXMuc2VydmljZUlkID0gdW5hc3NpZ25lZFBheW1lbnRzLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgaWYgKHVuYXNzaWduZWRQYXltZW50c1snY2NkX3JlZmVyZW5jZSddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25DYXNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1JlY29yZEV4aXN0ID0gIHRoaXMudW5hc3NpZ25lZFJlY29yZExpc3QubGVuZ3RoID09PSAwO1xuICAgIHRoaXMuZ2V0VW5wcm9jZXNzZWRGZWVDb3VudC5lbWl0KDxhbnk+dGhpcy51bmFzc2lnbmVkUmVjb3JkTGlzdC5sZW5ndGgpO1xuICB9XG4gIGZvcm1hdFVuYXNzaWduZWRSZWNvcmRJZChJRDogTnVtYmVyKSB7XG4gICAgcmV0dXJuIGB1bmFzc2lnbnJlY29yZC0ke0lEfWA7XG4gIH1cbiAgdHJpbVVuZGVyc2NvcmUobWV0aG9kOiBzdHJpbmcpe1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucmVtb3ZlVW53YW50ZWRTdHJpbmcobWV0aG9kLCcgJyk7XG4gIH1cbiAgcmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHVybCA9IHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgICB1cmwgKz0gdGhpcy5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgICB1cmwgKz0gdGhpcy5pc1N0Rml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvZmVlLXNlYXJjaD9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9JmRjbj0ke3RoaXMucmVjb3JkSWR9JHt1cmx9YCk7XG4gIH1cbiAgbG9hZFVuc29saWNpdGVkUGFnZSh2aWV3TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gdmlld05hbWU7XG4gIH1cbiAgdW5wcm9jZXNzZWRQYXltZW50U2VsZWN0RXZlbnQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2U6IGFueSkge1xuICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgdGhpcy52YWxpZGF0ZUJ1dHRvbnMoKTtcbiAgIHRoaXMuc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50LmVtaXQoc2VsZWN0ZWRSZWNvcmRSZWZlcmVuY2UpO1xuICB9XG4gIGdvVG9BbGxvY2F0ZVBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IHRoaXMucmVjb3JkSWQ7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnVuUHJvY2Vzc2VkUGF5bWVudFNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUlkXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuSVNUVVJOT0ZGO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID0gdGhpcy5pc1N0Rml4RW5hYmxlO1xuXG4gICAgaWYoIXRoaXMuSVNUVVJOT0ZGKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5QQVlNRU5UUkVGO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gbnVsbDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdhbGxvY2F0ZS1wYXltZW50cyc7XG4gICAgfVxuXG4gIH1cblxuICB2YWxpZGF0ZUJ1dHRvbnMoKSB7XG4gIGlmICggdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgICYmIHRoaXMuaXNFeGNlcHRpb25DYXNlKSB7XG4gICAgICAgIHRoaXMuaXNNYXJrQXNVbmlkZW50aWZpZWRidG5FbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCAgJiYgIXRoaXMuaXNFeGNlcHRpb25DYXNlICYmICF0aGlzLkZFRV9SRUNPUkRTX0VYSVNUUykge1xuICAgICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiggdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgJiYgIXRoaXMuaXNFeGNlcHRpb25DYXNlICYmIHRoaXMuRkVFX1JFQ09SRFNfRVhJU1RTICkge1xuICAgICAgaWYoIXRoaXMuSVNUVVJOT0ZGKSB7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZVRvRXhpc3RpbmdGZWVidG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FsbG9jYXRlZFRvTmV3RmVlYnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSB0aGlzLklTX09TX0FNVF9BVkFJTEFCTEU7XG4gICAgICAgIHRoaXMuaXNBbGxvY2F0ZWRUb05ld0ZlZWJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1bnByb2Nlc3NlZFBheW1lbnRVblNlbGVjdEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0FsbG9jYXRlVG9FeGlzdGluZ0ZlZWJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQWxsb2NhdGVkVG9OZXdGZWVidG5FbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc01hcmtBc1VuaWRlbnRpZmllZGJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAvL3RoaXMudmFsaWRhdGVCdXR0b25zKCk7XG4gICAgdGhpcy5zZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQuZW1pdCgnJyk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtJUGF5bWVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYXBwLXByb2Nlc3NlZC1wYXltZW50cycsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInByb2Nlc3NlZC1wYXltZW50cyBnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlByb2Nlc3NlZCBwYXltZW50czwvaDM+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+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiICpuZ0lmPVwiaXNSZW1haW5pbmdBbW91bnRHdFplcm8gfHwgaXNSZW1haW5pbmdBbW91bnRMdFplcm9cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstZm9udF9fY3VzdG9tXCIgZm9yPVwidXNlck5hbWVcIj5cbiAgICAgICAgICBFbnRlciB5b3VyIG5hbWVcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstaW5wdXRcIiBpZD1cInVzZXJOYW1lXCIgbmFtZT1cInVzZXJOYW1lXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNVc2VyTmFtZUVtcHR5IHx8IGlzVXNlck5hbWVJbnZhbGlkfVwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJOYW1lXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzVXNlck5hbWVFbXB0eSB8fCBpc1VzZXJOYW1lSW52YWxpZFwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNVc2VyTmFtZUVtcHR5XCI+RW50ZXIgeW91ciBuYW1lLjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzVXNlck5hbWVJbnZhbGlkXCI+RW50ZXIgYSB2YWxpZCBuYW1lPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJpc0NvbmZpcm1CdXR0b25kaXNhYmxlZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPyAnYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQnIDogJ2J1dHRvbidcIlxuICAgICAgICAgIChjbGljayk9XCJjb25maXJtQWxsb2NhdGVQYXllbWVudCgpXCI+XG4gICAgICAgICAgQ29uZmlybVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsQWxsb2NhdGVQYXltZW50KCRldmVudClcIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+YCxcbiAgc3R5bGVzOiBbYC5hbGxvY2F0ZS1wYXltZW50c3ttYXJnaW46MjBweCAwfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDEsLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sM3t3aWR0aDoxMCV9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY2VsbC0tY29sMiwuYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2w2e3dpZHRoOjI1JX0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXRhYmxlX19jZWxsLS1jb2w0LC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2NlbGwtLWNvbDV7d2lkdGg6MTUlfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstYnV0dG9uLWdyb3VwLWFsbG9jYXRle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e21hcmdpbi1sZWZ0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojYjNiOGJkZjJ9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1jdXN0b20td2FybmluZ19fbWVzc2FnZXtmb250LXNpemU6MzBweDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MTJweDtmb250LXdlaWdodDo3MDB9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay13YXJuaW5nLXRleHQtY3VzdG9te21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnQ7cGFkZGluZzoxMHB4IDAgNXB4fS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstdGFibGVfX2N1c3RvbS0tY29sMXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjIwcHg7cGFkZGluZy1sZWZ0OjE1cHh9LmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay10YWJsZV9fY3VzdG9tLS1jb2w2e3RleHQtYWxpZ246Y2VudGVyfS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstbGlzdF9fY3VzdG9te3BhZGRpbmctbGVmdDoyMHB4fS5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstZm9udF9fY3VzdG9tLC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstaGVhZGluZy1tLS1jdXN0b20sLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1oaW50LC5hbGxvY2F0ZS1wYXltZW50cyAuZ292dWstbGFiZWwtLW0sLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1saXN0X19jdXN0b20sLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay1yYWRpb3NfX2l0ZW0sLmFsbG9jYXRlLXBheW1lbnRzIC5nb3Z1ay13YXJuaW5nLXRleHRfX2N1c3RvbXtmb250LXNpemU6MTlweH0uYWxsb2NhdGUtcGF5bWVudHMgLmdvdnVrLXJhZGlvc19fY29uZGl0aW9uYWwtLWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsbG9jYXRlLXBheW1lbnRzIC5mb3JtLWdyb3VwLWVycm9ye2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjYjEwZTFlO3BhZGRpbmctbGVmdDoxNXB4fS5hbGxvY2F0ZS1wYXltZW50cyAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0uYWxsb2NhdGUtcGF5bWVudHMgLmlubGluZS1lcnJvci1tZXNzYWdle2NvbG9yOiNhNzE0MTQ7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6MTBweH0uYWxsb2NhdGUtcGF5bWVudHMgLmlubGluZS1lcnJvci1ib3JkZXJ7Ym9yZGVyLWNvbG9yOiNhNzE0MTR9YF1cbn0pXG5leHBvcnQgY2xhc3MgQWxsb2NhdGVQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgb3ZlclVuZGVyUGF5bWVudEZvcm06IEZvcm1Hcm91cDtcbiAgdmlld1N0YXR1czogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGJzcGF5bWVudGRjbjogc3RyaW5nO1xuICBmZWVkYmFja1VybExhYmVsOnN0cmluZztcbiAgdW5BbGxvY2F0ZWRQYXltZW50OiBJQlNQYXltZW50cyA9IHtcbiAgICBhbW91bnQ6IDBcbiAgfTtcbiAgc2l0ZUlEOiBzdHJpbmcgPSBudWxsO1xuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcdFxuICByZW1haW5pbmdBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1haW5pbmdBbW91bnRHdFplcm86IGJvb2xlYW47XG4gIGlzTW9yZURldGFpbHNCb3hIaWRlOiBib29sZWFuICA9IHRydWU7XG4gIGlzUmVtYWluaW5nQW1vdW50THRaZXJvOiBib29sZWFuO1xuICBhZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmc6IG51bWJlcjtcbiAgYW1vdW50Rm9yQWxsb2NhdGlvbjogbnVtYmVyO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBvdGhlclBheW1lbnRFeHBsYW5hdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlO1x0XG5cbiAgcGF5bWVudFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudERldGFpbHNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREZXRhaWxzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RGV0YWlsc01pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVc2VyTmFtZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzVXNlck5hbWVJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIGNjZFJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgZXhjZXB0aW9uUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50UmVhc29uOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50RXhwbGFuYXRpb246IHN0cmluZyA9IG51bGw7XG4gIHVzZXJOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50U2VjdGlvbkxhYmVsOiBhbnk7XG4gIHBheW1lbnRSZWY6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICByZWFzb25MaXN0OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfT0ge1xuICAgIG92ZXJQYXltZW50OiB7XG4gICAgICBod2ZSZXdhcmQ6ICdIZWxwIHdpdGggRmVlcyAoSFdGKSBhd2FyZGVkLiAgUGxlYXNlIGluY2x1ZGUgdGhlIEhXRiByZWZlcmVuY2UgbnVtYmVyIGluIHRoZSBleHBsYW5hdG9yeSBub3RlJyxcbiAgICAgIHdyb25nRmVlOiAnSW5jb3JyZWN0IHBheW1lbnQgcmVjZWl2ZWQnLFxuICAgICAgbm90SXNzdWVDYXNlOiAnVW5hYmxlIHRvIGlzc3VlIGNhc2UnLFxuICAgICAgb3RoZXJEZWR1Y3Rpb246ICdPdGhlcidcbiAgICB9LFxuICAgIHNob3J0RmFsbDoge1xuICAgICAgaGVscFdpdGhGZWU6ICdIZWxwIHdpdGggRmVlcyAoSFdGKSBhcHBsaWNhdGlvbiBkZWNsaW5lZCcsXG4gICAgICB3cm9uZ0ZlZTogJ0luY29ycmVjdCBwYXltZW50IHJlY2VpdmVkJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG4gIGV4cGxhbmF0aW9uTGlzdCA9IHtcbiAgICBvdmVyUGF5bWVudDoge1xuICAgICAgcmVmZXJSZWZ1bmQ6ICdEZXRhaWxzIGluIGNhc2Ugbm90ZXMuICBSZWZ1bmQgZHVlJyxcbiAgICAgIG5vUmVmdW5kOiAnRGV0YWlscyBpbiBjYXNlIG5vdGVzLiBObyByZWZ1bmQgZHVlJyxcbiAgICAgIG5vQ2FzZTogJ05vIGNhc2UgY3JlYXRlZC4gIFJlZnVuZCBkdWUnLFxuICAgICAgb3RoZXI6ICdPdGhlcidcbiAgICB9LFxuICAgIHNob3J0RmFsbDoge1xuICAgICAgaG9sZENhc2U6ICdJIGhhdmUgcHV0IGEgc3RvcCBvbiB0aGUgY2FzZSBhbmQgY29udGFjdGVkIHRoZSBhcHBsaWNhbnQgcmVxdWVzdGluZyB0aGUgYmFsYW5jZSBvZiBwYXltZW50JyxcbiAgICAgIGhlbGRDYXNlOiAnSSBoYXZlIHB1dCBhIHN0b3Agb24gdGhlIGNhc2UuICBUaGUgYXBwbGljYW50IG5lZWRzIHRvIGJlIGNvbnRhY3RlZCB0byByZXF1ZXN0IHRoZSBiYWxhbmNlIG9mIHBheW1lbnQnLFxuICAgICAgb3RoZXI6ICdPdGhlcidcbiAgICB9XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICBwcml2YXRlIGVycm9ySGFuZGxlclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gIHByaXZhdGUgY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2U6IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLFxuICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmJzcGF5bWVudGRjbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5wYXltZW50UmVmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmO1xuICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIG1vcmVEZXRhaWxzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpXG4gICAgICBdKSksXG4gICAgICB1c2VyTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzXSopJCcpXG4gICAgICBdKSksXG4gICAgfSk7XG4gICAgdGhpcy5nZXRVbmFzc2lnbmVkUGF5bWVudCgpO1xuICB9XG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICBnZXRQYXltZW50R3JvdXBEZXRhaWxzKCl7XG5cbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRSZWYpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwICA9IHBheW1lbnRHcm91cDtcbiAgICAgICAgICB0aGlzLnNhdmVBbmRDb250aW51ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ10uZmlsdGVyKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGlmKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmc3RDb24gPSB0aGlzLmdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQoPElQYXltZW50R3JvdXA+cGF5bWVudEdyb3VwKSxcbiAgICAgICAgICAgIHNjbmRDbiA9IGZzdENvbiA+IDAgfHwgKGZzdENvbiA9PSAwICYmIHRoaXMuaXNGZWVBbW91bnRaZXJvKSAmJiBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPT09IHRoaXMucGF5bWVudFJlZjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBheW1lbnRSZWYgPyAgc2NuZENuIDogZnN0Q29uID4gMCB8fCAoZnN0Q29uID09IDAgJiYgdGhpcy5pc0ZlZUFtb3VudFplcm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBzZWxlY3RlZFBheW1lbnRHcm91cChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApIHtcdFxuICAgIHRoaXMuaXNDb250aW51ZUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XHRcbiAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcdFxuICB9XHRcblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG5cbiAgZ290b1N1bW1hcnlQYWdlKGV2ZW50OiBhbnkpIHsgXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgfVxuXG4gIGNhbmNlbEFsbG9jYXRlUGF5bWVudChldmVudDogYW55KXtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYoIXRoaXMuaXNUdXJuT2ZmKXtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbkZvcm0nO1x0XG4gICAgfVxuICB9XG4gIGNvbmZpcm1BbGxvY2F0ZVBheWVtZW50KCl7XG4gICAgY29uc3QgcGF5bWVudERldGFpbHNGaWVsZCA9IHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uY29udHJvbHMubW9yZURldGFpbHMsXG4gICAgICBwYXltZW50Rm9ybUVycm9yID0gdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5jb250cm9scy5tb3JlRGV0YWlscy5lcnJvcnMsXG4gICAgICB1c2VyTmFtZUZpZWxkID0gdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5jb250cm9scy51c2VyTmFtZSxcbiAgICAgIGlzRW1wdHlDb25kdGlvbiA9IHRoaXMucGF5bWVudFJlYXNvbiAmJiB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbixcbiAgICAgIGlzT3RoZXJPcHRpb25TZWxlY3RlZCA9IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID09PSAnT3RoZXInO1xuXG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbGwnKTtcbiAgICBpZiAoICghdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyAmJiAhdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybykgfHwgaXNFbXB0eUNvbmR0aW9uICYmICghaXNPdGhlck9wdGlvblNlbGVjdGVkICYmIHVzZXJOYW1lRmllbGQudmFsaWQgfHwgaXNPdGhlck9wdGlvblNlbGVjdGVkICYmIHVzZXJOYW1lRmllbGQudmFsaWQgJiYgcGF5bWVudERldGFpbHNGaWVsZC52YWxpZCkpIHtcbiAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vdGhlclBheW1lbnRFeHBsYW5hdGlvbiA9IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID09PSAnT3RoZXInID8gcGF5bWVudERldGFpbHNGaWVsZC52YWx1ZSA6IHRoaXMucGF5bWVudEV4cGxhbmF0aW9uO1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lRmllbGQudmFsdWU7XG4gICAgICB0aGlzLmZpbmFsU2VydmljZUNhbGwoKTtcbiAgICB9ZWxzZSB7XG4gICAgICBpZighdGhpcy5wYXltZW50UmVhc29uKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKCF0aGlzLnBheW1lbnRFeHBsYW5hdGlvbikge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnZXhwbGFuYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMucGF5bWVudEV4cGxhbmF0aW9uICYmIGlzT3RoZXJPcHRpb25TZWxlY3RlZCkge1xuICAgICAgICBpZihwYXltZW50RGV0YWlsc0ZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnREZXRhaWxzRmllbGQudmFsdWUgIT0gJycgJiYgcGF5bWVudERldGFpbHNGaWVsZC5pbnZhbGlkICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnRGb3JtRXJyb3IgJiYgcGF5bWVudEZvcm1FcnJvci5taW5sZW5ndGggJiYgcGF5bWVudEZvcm1FcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwYXltZW50Rm9ybUVycm9yICYmIHBheW1lbnRGb3JtRXJyb3IubWF4bGVuZ3RoICYmIHBheW1lbnRGb3JtRXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnb3RoZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodXNlck5hbWVGaWVsZC52YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAndXNlcm5hbWUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHVzZXJOYW1lRmllbGQudmFsdWUgIT09IFwiXCIgJiYgIHVzZXJOYW1lRmllbGQuaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAndXNlcm5hbWUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzZXRGb3JtKHZhbHMsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb25IYXNFcnJvciA9IHZhbHNbMF07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2V4cGxhbmF0aW9uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yID0gdmFsc1sxXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nb3RoZXInIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0VtcHR5ID0gdmFsc1syXTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSB2YWxzWzNdO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01pbkhhc0Vycm9yID0gdmFsc1s0XTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNYXhIYXNFcnJvciA9IHZhbHNbNV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3VzZXJuYW1lJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzVXNlck5hbWVFbXB0eSA9IHZhbHNbNl07XG4gICAgICB0aGlzLmlzVXNlck5hbWVJbnZhbGlkID0gdmFsc1s3XTtcbiAgICB9XG4gIH1cbiAgZmluYWxTZXJ2aWNlQ2FsbCgpIHtcbiAgICBpZighdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSkge1xuICAgICAgbGV0IGFsbG9jYXRlZFJlcXVlc3QgPSB7XG4gICAgICAgIHJlYXNvbjogdGhpcy5wYXltZW50UmVhc29uLFxuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonQWxsb2NhdGVkJyxcbiAgICAgICAgZXhwbGFuYXRpb246IHRoaXMub3RoZXJQYXltZW50RXhwbGFuYXRpb24sXG4gICAgICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgbmFtZTogJ0FsbG9jYXRlZCdcbiAgICAgICAgfSxcbiAgICAgICAgcGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLFxuICAgICAgICB1c2VyX2lkOiB0aGlzLnNpdGVJRCxcbiAgICAgICAgdXNlcl9uYW1lOiB0aGlzLnVzZXJOYW1lXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0U3RyYXRlZ2ljQm9keSA9IG5ldyBBbGxvY2F0ZVBheW1lbnRSZXF1ZXN0XG4gICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UsIGFsbG9jYXRlZFJlcXVlc3QpO1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU1BheW1lbnRTdHJhdGVnaWMocG9zdFN0cmF0ZWdpY0JvZHkgLCB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2UsICdQUk9DRVNTRUQnKS5zdWJzY3JpYmUoXG4gICAgICByZXMxID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlMSA9IEpTT04ucGFyc2UocmVzMSk7XG4gICAgICAgIGlmIChyZXNwb25zZTEuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UpO1xuICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNBbGxvY2F0ZVBheW1lbnQocmVxdWVzdEJvZHksIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlMiA9IEpTT04ucGFyc2UocmVzMik7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcUJvZHkgPSBuZXcgSUFsbG9jYXRpb25QYXltZW50c1JlcXVlc3RcbiAgICAgICAgICAgICAgKHJlc3BvbnNlMlsnZGF0YSddLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCByZXNwb25zZTJbJ2RhdGEnXS5yZWZlcmVuY2UsIHRoaXMucGF5bWVudFJlYXNvbiwgdGhpcy5vdGhlclBheW1lbnRFeHBsYW5hdGlvbiwgdGhpcy51c2VyTmFtZSk7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZTIuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RCU0FsbG9jYXRpb25QYXltZW50cyhyZXFCb2R5KS5zdWJzY3JpYmUoXG4gIFxuICAgICAgICAgICAgICAgIHJlczMgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZTMgPSBKU09OLnBhcnNlKHJlczMpO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBhdGNoQlNDaGFuZ2VTdGF0dXModGhpcy51bkFsbG9jYXRlZFBheW1lbnQuZGNuX3JlZmVyZW5jZSwgJ0NPTVBMRVRFJykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTsgIFxuICB9XG4gIH1cblxuICBzYXZlQW5kQ29udGludWUoKXtcbiAgICBpZih0aGlzLnBheW1lbnRHcm91cCkge1xuICAgICAgdGhpcy5pc01vcmVEZXRhaWxzQm94SGlkZSA9IHRydWU7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgnbW9yZURldGFpbHMnKS5yZXNldCgpO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ21vcmVEZXRhaWxzJykuc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ3VzZXJOYW1lJykucmVzZXQoKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCd1c2VyTmFtZScpLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMucGF5bWVudFJlYXNvbiA9ICcnO1xuICAgICAgdGhpcy5wYXltZW50RXhwbGFuYXRpb24gPSAnJztcbiAgICAgIGxldCBHcm91cE91dHN0YW5kaW5nQW1vdW50ID0gdGhpcy5nZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHRoaXMucGF5bWVudEdyb3VwKTtcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCA9IHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmFtb3VudCAtIEdyb3VwT3V0c3RhbmRpbmdBbW91bnQ7XG4gICAgICB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID0gcmVtYWluaW5nVG9CZUFzc2lnbmVkID4gMDtcbiAgICAgIHRoaXMuaXNSZW1haW5pbmdBbW91bnRMdFplcm8gPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPCAwO1xuICAgICAgdGhpcy5wYXltZW50U2VjdGlvbkxhYmVsID0gdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyA/IHsgXG4gICAgICAgICAgdGl0bGU6ICdUaGVyZSBpcyBhIHN1cnBsdXMgb2YnLFxuICAgICAgICAgIHJlYXNvbjogJ1Byb3ZpZGUgYSByZWFzb24uIFRoaXMgd2lsbCBiZSB1c2VkIGluIHRoZSBSZWZ1bmQgcHJvY2Vzcy4nLFxuICAgICAgICB9OiB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID8geyBcbiAgICAgICAgICB0aXRsZTogJ1RoZXJlIGlzIGEgc2hvcnRmYWxsIG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uJyxcbiAgICAgICAgfTogeyBcbiAgICAgICAgICB0aXRsZTonQW1vdW50IGxlZnQgdG8gYmUgYWxsb2NhdGVkJyxcbiAgICAgICAgICByZWFzb246JycsXG4gICAgICAgIH07XG4gICAgICB0aGlzLmZlZWRiYWNrVXJsTGFiZWwgPSB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8gJ0NPTkZJUk1BTExPQ0FUSU9OX1NVUlBMVVMnIDogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/ICdDT05GSVJNQUxMT0NBVElPTl9TSE9SVEZBTEwnIDogJ0NPTkZJUk1BTExPQ0FUSU9OJztcbiAgICAgIHRoaXMucmVtYWluaW5nQW1vdW50ID0gIHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyByZW1haW5pbmdUb0JlQXNzaWduZWQgOiB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID8gcmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEgOiAwO1xuICAgICAgdGhpcy5hZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmcgPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPj0gMCA/IDAgOiAocmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEpO1xuICAgICAgdGhpcy5hbW91bnRGb3JBbGxvY2F0aW9uID0gR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA+PSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgPyB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgOiBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWxsb2NhdGVQYXltZW50Q29uZmlybWF0aW9uJztcdFxuICAgICAgfVxuICAgIH1cbiAgfVxuICAgZ2V0VW5hc3NpZ25lZFBheW1lbnQoKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLmJzcGF5bWVudGRjbikuc3Vic2NyaWJlKFxuICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy51bkFsbG9jYXRlZFBheW1lbnQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5wYXltZW50cy5maWx0ZXIocGF5bWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBheW1lbnQgJiYgcGF5bWVudC5kY25fcmVmZXJlbmNlID09IHRoaXMuYnNwYXltZW50ZGNuO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdGhpcy5zaXRlSUQgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICBjb25zdCBiZUNjZE51bWJlciA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLmNjZF9yZWZlcmVuY2UsXG4gICAgICAgIGJlRXhjZXB0aW9uTnVtYmVyID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UsXG4gICAgICAgIGV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgPT09IHRoaXMuY2NkQ2FzZU51bWJlciA/IG51bGwgOiB0aGlzLmNjZENhc2VOdW1iZXIgOiB0aGlzLmNjZENhc2VOdW1iZXI7XG4gICAgICAgdGhpcy5jY2RSZWZlcmVuY2UgPSBiZUNjZE51bWJlciA/IGJlQ2NkTnVtYmVyIDogbnVsbDtcbiAgICAgICB0aGlzLmV4Y2VwdGlvblJlZmVyZW5jZSA9IGJlRXhjZXB0aW9uTnVtYmVyID8gYmVFeGNlcHRpb25OdW1iZXIgOiBleGNlcHRpb25SZWZlcmVuY2U7XG4gICAgICAgdGhpcy5nZXRQYXltZW50R3JvdXBEZXRhaWxzKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB0eXBlKSB7XG4gICAgdGhpcy5pc01vcmVEZXRhaWxzQm94SGlkZSA9IHRydWU7XG4gICAgaWYoIHR5cGUgPT09ICdleHBsYW5hdGlvbicgJiYga2V5ID09PSAnb3RoZXInICl7XG4gICAgICB0aGlzLmlzUGF5bWVudERldGFpbHNFbXB0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01pbkhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi9JRmVlJztcblxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvblJlcXVlc3Qge1xuICBiZW5lZmljaWFyeV9uYW1lOiBzdHJpbmc7XG4gIGNjZF9jYXNlX251bWJlcjogc3RyaW5nO1xuICBmZWU6IElGZWU7XG4gIGh3Zl9hbW91bnQ6IG51bWJlcjtcbiAgaHdmX3JlZmVyZW5jZTogc3RyaW5nO1xuICBwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogc3RyaW5nO1xuICBzaXRlX2lkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY2NkX2Nhc2VfbnVtYmVyOiBzdHJpbmcsIGZlZTogSUZlZSwgaHdmX2Ftb3VudDogbnVtYmVyLCBod2ZfcmVmZXJlbmNlOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZykge1xuICAgIHRoaXMuY2NkX2Nhc2VfbnVtYmVyID0gY2NkX2Nhc2VfbnVtYmVyO1xuICAgIHRoaXMuZmVlID0gZmVlO1xuICAgIHRoaXMuaHdmX2Ftb3VudCA9IGh3Zl9hbW91bnQ7XG4gICAgdGhpcy5od2ZfcmVmZXJlbmNlID0gaHdmX3JlZmVyZW5jZTtcbiAgICB0aGlzLnNpdGVfaWQgPSBzZXJ2aWNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImFkZC1yZW1pc3Npb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+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+XG5cbjwvZGl2PlxuXG5gLFxuICBzdHlsZXM6IFtgLmFkZC1yZW1pc3Npb24gLmJ1dHRvbnttYXJnaW46MjBweCAycHh9LmFkZC1yZW1pc3Npb24gdGQuZ292dWstdGFibGVfX2NlbGx7d2lkdGg6NTAlfS5hZGQtcmVtaXNzaW9uIC5nb3Z1ay1idXR0b24tLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNkZWUwZTI7Ym94LXNoYWRvdzowIDJweCAwICM4NTg2ODg7Y29sb3I6IzBiMGMwYzttYXJnaW4tcmlnaHQ6LjVlbX0uYWRkLXJlbWlzc2lvbiAuZ292dWstbGFiZWwtLXMsLmFkZC1yZW1pc3Npb24gLmdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dCwuYWRkLXJlbWlzc2lvbiAuaG1jdHMtY3VycmVuY3ktaW5wdXRfX3N5bWJvbHtmb250LXNpemU6MTlweH0uYWRkLXJlbWlzc2lvbiAuaW5saW5lLWVycm9yLWNsYXNze291dGxpbmU6I2E3MTQxNCBzb2xpZCAzcHg7b3V0bGluZS1vZmZzZXQ6MH0uYWRkLXJlbWlzc2lvbiAuaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZlZTogSUZlZTtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZXJ2aWNlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBheW1lbnRHcm91cFJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2FuY2VsUmVtaXNzaW9uOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xuICBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgb3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuXG4gIGlzUmVtaXNzaW9uQ29kZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbkNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCcpXG4gICAgICBdKSksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKCkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29uZmlybWF0aW9uJztcbiAgICB9ZWxzZSB7XG5cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCl7XG4gICAgaWYoZmllbGQ9PT0ncmVtaXNzaW9uQ29kZScgfHwgZmllbGQ9PT0nQWxsJykge1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0nYW1vdW50JyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLnNlcnZpY2UpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgTERVcmwgPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJ1xuICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1mZWUtc3VtbWFyeSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSZwYXltZW50R3JvdXBSZWY9JHt0aGlzLnBheW1lbnRHcm91cFJlZn0mZGNuPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbn0ke0xEVXJsfWApO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgZmVhdHVyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICBsZXQgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9dHJ1ZSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQFBpcGUoe1xuICBuYW1lOiAnY2NkSHlwaGVucydcbn0pXG5leHBvcnQgY2xhc3MgQ2NkSHlwaGVuc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgYXJncz86IGFueSk6IGFueSB7XG4gICAgY29uc3QgcGF0dGVybiA9IC9eKFswLTldezR9KSsoWzAtOV17NH0pKyhbMC05XXs0fSkrKFswLTldezR9KSQvO1xuICAgIGlmICggdmFsdWUubWF0Y2gocGF0dGVybikpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sJyQxLSQyLSQzLSQ0JykgIFxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBQaXBlKHtcbiAgbmFtZTogJ2tleVZhbHVlJ1xufSlcbmV4cG9ydCBjbGFzcyBrZXlWYWx1ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICB0cmFuc2Zvcm0oaW5wdXQ6IGFueSk6IGFueSB7XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBmb3IgKGxldCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGtleXMucHVzaCh7IGtleToga2V5LCB2YWx1ZTogaW5wdXRba2V5XX0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AUGlwZSh7IG5hbWU6ICdzYW5pdGl6ZUh0bWwnIH0pXG5leHBvcnQgY2xhc3MgU2FuaXRpemVIdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgWExTWFN0eWxlIGZyb20gJ3hsc3gtc3R5bGUnO1xuXG5cbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgWGxGaWxlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCB3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0OyBcbiAgICBsZXQgd29ya2Jvb2s6IFhMU1guV29ya0Jvb2s7IFxuXG4gICAgaWYoZXhjZWxGaWxlTmFtZS5tYXRjaCgnRGF0YV9Mb3NzJykhPT0gbnVsbCl7XG4gICAgIHdvcmtzaGVldCA9ICBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbix7aGVhZGVyOlsnbG9zc19yZXNwJywncGF5bWVudF9hc3NldF9kY24nLCdlbnZfcmVmJywnZW52X2l0ZW0nLCdyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ2RhdGVfYmFua2VkJywnYmdjX2JhdGNoJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXREYXRhTG9zc1JlcG9ydEhlYWRlcnMod29ya3NoZWV0KTtcbiAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgIH0gZWxzZSBpZihleGNlbEZpbGVOYW1lLm1hdGNoKCdVbnByb2Nlc3NlZCcpIT09IG51bGwpe1xuICAgICB3b3Jrc2hlZXQgPSAgWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGpzb24se2hlYWRlcjpbJ3Jlc3Bfc2VydmljZV9pZCcsJ3Jlc3Bfc2VydmljZV9uYW1lJywnZXhjZXB0aW9uX3JlZicsJ2NjZF9yZWYnLCdkYXRlX2JhbmtlZCcsJ2JnY19iYXRjaCcsJ3BheW1lbnRfYXNzZXRfZGNuJywnZW52X3JlZicsJ2Vudl9pdGVtJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICB3b3Jrc2hlZXQgPSAgdGhpcy5zZXRVbnByb2Nlc3NlZFJlcG9ydEhlYWRlcnMod29ya3NoZWV0KTtcbiAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgfSBlbHNlIGlmKGV4Y2VsRmlsZU5hbWUubWF0Y2goJ1Byb2Nlc3NlZF9VbmFsbG9jYXRlZCcpIT09IG51bGwpe1xuICAgICAgd29ya3NoZWV0ID0gIFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uLHtoZWFkZXI6WydyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ2FsbG9jYXRpb25fc3RhdHVzJywncmVjZWl2aW5nX29mZmljZScsJ2FsbG9jYXRpb25fcmVhc29uJywnY2NkX2V4Y2VwdGlvbl9yZWZlcmVuY2UnLCdjY2RfY2FzZV9yZWZlcmVuY2UnLCdwYXltZW50X2Fzc2V0X2RjbicsJ2Vudl9yZWYnLCdlbnZfaXRlbScsJ2RhdGVfYmFua2VkJywnYmdjX2JhdGNoJywncGF5bWVudF9tZXRob2QnLCdhbW91bnQnXX0pO1xuICAgICAgd29ya3NoZWV0ID0gIHRoaXMuc2V0UHJvY2Vzc2VkVW5hbGxvY2F0ZWRSZXBvcnRIZWFkZXJzKHdvcmtzaGVldCk7XG4gICAgICB3b3Jrc2hlZXQgPSB0aGlzLmF1dG9GaXRDb2x1bW5zKHdvcmtzaGVldCxqc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd29ya3NoZWV0ID0gIFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uLHtoZWFkZXI6WydyZXNwX3NlcnZpY2VfaWQnLCdyZXNwX3NlcnZpY2VfbmFtZScsJ3N1cnBsdXNfc2hvcnRmYWxsJywnYmFsYW5jZScsJ3BheW1lbnRfYW1vdW50JywnY2NkX2Nhc2VfcmVmZXJlbmNlJywgJ2NjZF9leGNlcHRpb25fcmVmZXJlbmNlJywgJ3Byb2Nlc3NlZF9kYXRlJywgJ3JlYXNvbicsICdleHBsYW5hdGlvbicsICd1c2VyX25hbWUnXX0pO1xuICAgICAgd29ya3NoZWV0ID0gIHRoaXMuc2V0U2hvcnRGYWxsUmVwb3J0SGVhZGVycyh3b3Jrc2hlZXQpO1xuICAgICAgd29ya3NoZWV0ID0gdGhpcy5hdXRvRml0Q29sdW1ucyh3b3Jrc2hlZXQsanNvbik7XG4gICAgfVxuICAgIHdvcmtib29rID0geyBTaGVldHM6IHsgJ2RhdGEnOiB3b3Jrc2hlZXQgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcbiAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0gWExTWC53cml0ZSh3b3JrYm9vaywgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYXJyYXknIH0pO1xuICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCBleGNlbEZpbGVOYW1lKTtcbiAgfVxuXG5cbnByaXZhdGUgYXV0b0ZpdENvbHVtbnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQsanNvbjphbnkpIDogWExTWC5Xb3JrU2hlZXQge1xuICBsZXQgb2JqZWN0TWF4TGVuZ3RoID0gW107IFxuICBsZXQgQ29sV2lkdGggPSBbXTtcbiAgbGV0IG9iaiA9IDxhbnk+T2JqZWN0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwganNvbi5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHZhbHVlID0gb2JqLnZhbHVlcyhqc29uW2ldKTtcbiAgICAgIGxldCBrZXkgPSBvYmoua2V5cyhqc29uW2ldKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYodmFsdWVbal0gPT09IG51bGwpe1xuICAgICAgICAgIHZhbHVlW2pdID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0TWF4TGVuZ3RoW2pdID1cbiAgICAgICAgICBrZXlbal0ubGVuZ3RoID49IHZhbHVlW2pdLmxlbmd0aFxuICAgICAgICAgICAgPyBrZXlbal0ubGVuZ3RoKzJcbiAgICAgICAgICAgIDogdmFsdWVbal0ubGVuZ3RoKzE7XG4gICAgICAgICAgICBpZiggdmFsdWVbal0ubGVuZ3RoID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICBvYmplY3RNYXhMZW5ndGhbal0gPSAga2V5W2pdLmxlbmd0aCsyO1xuICAgICAgICAgICAgfVxuICAgICAgQ29sV2lkdGgucHVzaCh7J3dpZHRoJzogK29iamVjdE1heExlbmd0aFtqXX0pO1xuICAgICAgfVxuICAgIH1cbiAgICB3b3Jrc2hlZXRbJyFjb2xzJ10gPSBDb2xXaWR0aDtcbiAgICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5cbnByaXZhdGUgc2V0RGF0YUxvc3NSZXBvcnRIZWFkZXJzICh3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0KTogWExTWC5Xb3JrU2hlZXQge1xuICB3b3Jrc2hlZXQuQTEudiA9IFwiTG9zc19SZXNwXCI7XG4gIHdvcmtzaGVldC5CMS52ID0gXCJQYXltZW50X0Fzc2V0X0RDTlwiO1xuICB3b3Jrc2hlZXQuQzEudiA9IFwiRW52ZWxvcGVfUmVmXCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJFbnZlbG9wZV9JdGVtXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJSZXNwX1NlcnZpY2UgSURcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIlJlc3BfU2VydmljZSBOYW1lXCI7XG4gIHdvcmtzaGVldC5HMS52ID0gXCJEYXRlX0JhbmtlZFwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiQkdDX0JhdGNoXCI7XG4gIHdvcmtzaGVldC5JMS52ID0gXCJQYXltZW50X01ldGhvZFwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiQW1vdW50XCI7XG4gIHJldHVybiB3b3Jrc2hlZXQ7XG59XG5cbnByaXZhdGUgc2V0VW5wcm9jZXNzZWRSZXBvcnRIZWFkZXJzICh3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0KTogWExTWC5Xb3JrU2hlZXQge1xuICB3b3Jrc2hlZXQuQTEudiA9IFwiUmVzcF9TZXJ2aWNlIElEXCI7XG4gIHdvcmtzaGVldC5CMS52ID0gXCJSZXNwX1NlcnZpY2UgTmFtZVwiO1xuICB3b3Jrc2hlZXQuQzEudiA9IFwiRXhjZXB0aW9uX1JlZlwiO1xuICB3b3Jrc2hlZXQuRDEudiA9IFwiQ0NEX1JlZlwiO1xuICB3b3Jrc2hlZXQuRTEudiA9IFwiRGF0ZV9CYW5rZWRcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIkJHQ19CYXRjaFwiO1xuICB3b3Jrc2hlZXQuRzEudiA9IFwiUGF5bWVudF9Bc3NldF9EQ05cIjtcbiAgd29ya3NoZWV0LkgxLnYgPSBcIkVudmVsb3BlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSTEudiA9IFwiRW52ZWxvcGVfSXRlbVwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiUGF5bWVudF9NZXRob2RcIjtcbiAgd29ya3NoZWV0LksxLnYgPSBcIkFtb3VudFwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNldFByb2Nlc3NlZFVuYWxsb2NhdGVkUmVwb3J0SGVhZGVycyAod29ya3NoZWV0OiBYTFNYLldvcmtTaGVldCk6IFhMU1guV29ya1NoZWV0IHtcbiAgd29ya3NoZWV0LkExLnYgPSBcIlJlc3BfU2VydmljZSBJRFwiO1xuICB3b3Jrc2hlZXQuQjEudiA9IFwiUmVzcF9TZXJ2aWNlIE5hbWVcIjtcbiAgd29ya3NoZWV0LkMxLnYgPSBcIkFsbG9jYXRpb25fU3RhdHVzXCI7XG4gIHdvcmtzaGVldC5EMS52ID0gXCJSZWNlaXZpbmdfT2ZmaWNlXCI7XG4gIHdvcmtzaGVldC5FMS52ID0gXCJBbGxvY2F0aW9uX1JlYXNvblwiO1xuICB3b3Jrc2hlZXQuRjEudiA9IFwiQ0NEX0V4Y2VwdGlvbl9SZWZcIjtcbiAgd29ya3NoZWV0LkcxLnYgPSBcIkNDRF9DYXNlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiUGF5bWVudF9Bc3NldF9EQ05cIjtcbiAgd29ya3NoZWV0LkkxLnYgPSBcIkVudmVsb3BlX1JlZlwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiRW52ZWxvcGVfSXRlbVwiO1xuICB3b3Jrc2hlZXQuSzEudiA9IFwiRGF0ZV9CYW5rZWRcIjtcbiAgd29ya3NoZWV0LkwxLnYgPSBcIkJHQ19CYXRjaFwiO1xuICB3b3Jrc2hlZXQuTTEudiA9IFwiUGF5bWVudF9NZXRob2RcIjtcbiAgd29ya3NoZWV0Lk4xLnYgPSBcIkFtb3VudFwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNldFNob3J0RmFsbFJlcG9ydEhlYWRlcnMgKHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQpOiBYTFNYLldvcmtTaGVldCB7XG4gIHdvcmtzaGVldC5BMS52ID0gXCJSZXNwX1NlcnZpY2UgSURcIjtcbiAgd29ya3NoZWV0LkIxLnYgPSBcIlJlc3BfU2VydmljZSBOYW1lXCI7XG4gIHdvcmtzaGVldC5DMS52ID0gXCJTdXJwbHVzX1Nob3J0ZmFsbFwiO1xuICB3b3Jrc2hlZXQuRDEudiA9IFwiQmFsYW5jZVwiO1xuICB3b3Jrc2hlZXQuRTEudiA9IFwiUGF5bWVudF9BbW91bnRcIjtcbiAgd29ya3NoZWV0LkYxLnYgPSBcIkNDRF9DYXNlX1JlZlwiO1xuICB3b3Jrc2hlZXQuRzEudiA9IFwiRXhjZXB0aW9uX1JlZlwiO1xuICB3b3Jrc2hlZXQuSDEudiA9IFwiUHJvY2Vzc2VkX0RhdGVcIjtcbiAgd29ya3NoZWV0LkkxLnYgPSBcIlJlYXNvblwiO1xuICB3b3Jrc2hlZXQuSjEudiA9IFwiRXhwbGFuYXRpb25cIjtcbiAgd29ya3NoZWV0LksxLnYgPSBcIlVwZGF0ZWQgTmFtZVwiO1xuICByZXR1cm4gd29ya3NoZWV0O1xufVxuXG5wcml2YXRlIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7WGxGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1yZXBvcnRzJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1JFUE9SVFMnPlxuICAgICAgPGNjcGF5LWVycm9yLWJhbm5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiPjwvY2NwYXktZXJyb3ItYmFubmVyPlxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLXhsXCI+XG4gICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPiBDaG9vc2UgdGhlIHJlcG9ydCB0eXBlIGFuZCBkYXRlIHJhbmdlPC9oMT5cbiAgICAgIDwvbGVnZW5kPlxuPC9kaXY+XG48Zm9ybSBbZm9ybUdyb3VwXT1cInJlcG9ydHNGb3JtXCI+XG4gICAgIDxkaXYgIGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiPlxuICAgICAgICAgIDxkaXYgIGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgaWQ9XCJEYXRhTG9zc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlRGF0ZXMoJ0RBVEFfTE9TUycpXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJEQVRBX0xPU1NcIiBcbiAgICAgICAgICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cIkRhdGFMb3NzXCIvPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWxhYmVsLS1tXCIgZm9yPVwiRGF0YUxvc3NcIj5EYXRhIGxvc3M8L2xhYmVsPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPk1pc3NpbmcgdHJhbnNhY3Rpb25zIHdoZXJlIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSBvbmx5IGVpdGhlciBvZiBFeGVsYSBvciBCdWxrIHNjYW48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICBpZD1cIlVucHJvY2Vzc2VkVHJhbnNhY3Rpb25zXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVEYXRlcygnVU5QUk9DRVNTRUQnKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIHZhbHVlPVwiVU5QUk9DRVNTRURcIiBcbiAgICAgICAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiVW5wcm9jZXNzZWRUcmFuc2FjdGlvbnNcIi8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJVbnByb2Nlc3NlZFRyYW5zYWN0aW9uc1wiPlVucHJvY2Vzc2VkIHRyYW5zYWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+VHJhbnNhY3Rpb24gcmVjb3JkcyB0aGF0IGFyZSBzdGlsbCB1bnByb2Nlc3NlZCBieSBzdGFmZi48L3NwYW4+XG4gICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgaWQ9XCJQcm9jZXNzZWRVbmFsbG9jYXRlZFwiXG4gICAgICAgICAgICBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRyZXBvcnRcIlxuICAgICAgICAgICAgbmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZURhdGVzKCdQUk9DRVNTRURfVU5BTExPQ0FURUQnKVwiXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgdmFsdWU9XCJQUk9DRVNTRURfVU5BTExPQ0FURURcIiBcbiAgICAgICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cIlByb2Nlc3NlZFVuYWxsb2NhdGVkXCIvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1sYWJlbC0tbVwiIGZvcj1cIlByb2Nlc3NlZFVuYWxsb2NhdGVkXCI+UHJvY2Vzc2VkIHVuYWxsb2NhdGVkPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+UGF5bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIMOiwoDCmFVuaWRlbnRpZmllZMOiwoDCmSBvciDDosKAwphUcmFuc2ZlcnJlZMOiwoDCmSAoVW5zb2xpY2l0ZWQgcmVxdWVzdHMpPC9zcGFuPlxuICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgIGlkPVwiU2hvcnRmYWxsc2FuZFN1cnBsdXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkcmVwb3J0XCJcbiAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZHJlcG9ydFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVEYXRlcygnU1VSUExVU19BTkRfU0hPUlRGQUxMJylcIlxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIHZhbHVlPVwiU1VSUExVU19BTkRfU0hPUlRGQUxMXCIgXG4gICAgICAgICAgICBkYXRhLWFyaWEtY29udHJvbHM9XCJTaG9ydGZhbGxzYW5kU3VycGx1c1wiLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJTaG9ydGZhbGxzYW5kU3VycGx1c1wiPlNob3J0ZmFsbHMgYW5kIHN1cnBsdXM8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5SZXF1ZXN0cyB3aGVyZSBiYWxhbmNlcyBhcmUgbWFya2VkIGFzIHNob3J0ZmFsbC9zdXJwbHVzIGZ1cnRoZXIgY2FzZSBtYW5hZ2VtZW50LlxuICAgICAgICAgICAgICAgRS5nOiBSZWZ1bmQgYXBwcm92YWwsIEN1c3RvbWVyIGNvbnRhY3Q8L3NwYW4+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICA8L2Rpdj5cbiAgICAgPC9kaXY+XG4gICAgIDxkaXYgIGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVmcm9tXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWxhYmVsLS1tXCIgZm9yPVwiZGF0ZS1mcm9tXCI+RGF0ZSBmcm9tPC9sYWJlbD5cbiAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImdldFNlbGVjdGVkRnJvbURhdGUoKVwiIFttYXhdPVwiZ2V0VG9kYXkoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJkYXRlLWZyb21cIiBuYW1lPVwiZGF0ZS1mcm9tXCIgdHlwZT1cImRhdGVcIiAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlXCIgcmVxdWlyZWQvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldG9cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWwgZ292dWstbGFiZWwtLW1cIiBmb3I9XCJkYXRlLXRvXCI+RGF0ZSB0bzwvbGFiZWw+XG4gICAgICA8aW5wdXQgKGNoYW5nZSk9XCJnZXRTZWxlY3RlZEZyb21EYXRlKClcIiBbbWF4XT1cImdldFRvZGF5KClcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZGF0ZS10b1wiIG5hbWU9XCJzZWFyY2hcIiB0eXBlPVwiZGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImVuZERhdGVcIiByZXF1aXJlZC8+XG4gICAgICA8L2Rpdj5cbiAgICAgPC9kaXY+XG4gICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlIHx8IGlzRGF0ZVJhbmdlQmV0bldlZWtcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZVwiPlBsZWFzZSBzZWxlY3QgJ0RhdGUgRnJvbScgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICdEYXRlIFRvJzwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXNEYXRlUmFuZ2VCZXRuV2Vla1wiPiBQbGVhc2Ugc2VsZWN0IHRoZSBkYXRlIHJhbmdlIGJldHdlZW4gNyBkYXlzPC9zcGFuPlxuICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJidG5zdWJtaXRcIj5cbiAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImRvd25sb2FkUmVwb3J0KClcIiBjbGFzcz1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhcmVwb3J0c0Zvcm0udmFsaWQgfHwgaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkIHx8IGlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgfHwgaXNEYXRlUmFuZ2VCZXRuV2Vla1wiPkRvd25sb2FkIHJlcG9ydDwvYnV0dG9uPlxuICAgPC9kaXY+XG4gPC9mb3JtPlxuICAgIGAsXG4gIHN0eWxlczogW2AuZ292dWstcmFkaW9zX19pbnB1dDpmb2N1cysuZ292dWstcmFkaW9zX19sYWJlbDo6YmVmb3Jle2JvcmRlci13aWR0aDo0cHg7Ym94LXNoYWRvdzowIDAgMCA0cHggI2ZmYWYwMH0uZGF0ZWZyb217d2lkdGg6NTAlO2Zsb2F0OmxlZnR9LmRhdGV0b3t3aWR0aDo1MCU7ZmxvYXQ6cmlnaHR9LmdvdnVrLWxhYmVsLS1te2ZvbnQtc2l6ZTpsYXJnZX0uZm9ybS1oaW50e3BhZGRpbmctbGVmdDouN2VtfS5oZWFkZXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTVweH0uYnRuc3VibWl0e21hcmdpbi1ib3R0b206MzBweH0uaW5saW5lLWVycm9yLW1lc3NhZ2V7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDoxMHB4fWBdXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZXBvcnRzRm9ybTogRm9ybUdyb3VwO1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgZW5kRGF0ZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGlzRG93bkxvYWRCdXR0b25kaXNhYmxlZDpCb29sZWFuID0gZmFsc2U7XG4gIGlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGU6IEJvb2xlYW4gPSBmYWxzZTtcbiAgaXNEYXRlUmFuZ2VCZXRuV2VlazogQm9vbGVhbiA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgcGF5bWVudEdyb3VwczogSVBheW1lbnRHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB4bEZpbGVTZXJ2aWNlOiBYbEZpbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSkgeyB9XG4gICBcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZyb21WYWxpZGF0aW9uKCk7XG5cbiAgIH1cblxuICBnZXRUb2RheSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiB9XG5cbiBnZXRTZWxlY3RlZEZyb21EYXRlKCk6IHZvaWQge1xuIHRoaXMudmFsaWRhdGVEYXRlcyh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSk7XG4gfVxuXG4gdmFsaWRhdGVEYXRlcyhyZXBvcnROYW1lKXtcbiAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykudmFsdWUpLFxuICAgIHNlbGVjdGVkRW5kRGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdlbmREYXRlJykudmFsdWUpO1xuICBjb25zdCBpc0RhdGVSYW5nZU1vcmVUaGFuV2VlayA9ICg8YW55Pm5ldyBEYXRlKHNlbGVjdGVkU3RhcnREYXRlKSAtIDxhbnk+bmV3IERhdGUoc2VsZWN0ZWRFbmREYXRlKSkvKDEwMDAgKiAzNjAwICogLTI0KSA+IDc7XG4gIGlmKG5ldyBEYXRlKHNlbGVjdGVkU3RhcnREYXRlKSA+IG5ldyBEYXRlKHNlbGVjdGVkRW5kRGF0ZSkgJiYgc2VsZWN0ZWRFbmREYXRlICE9PSAnJyl7XG4gICAgdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlQmV0bldlZWsgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYocmVwb3J0TmFtZSAmJiByZXBvcnROYW1lID09PSdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICYmIGlzRGF0ZVJhbmdlTW9yZVRoYW5XZWVrICkge1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IHRydWU7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUJldG5XZWVrID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH1cblxuIH1cblxuICBmcm9tVmFsaWRhdGlvbigpIHtcbiAgICB0aGlzLnJlcG9ydHNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RlZHJlcG9ydDogbmV3IEZvcm1Db250cm9sKCcnKSAsXG4gICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2woJycpIFxuICAgIH0pO1xufVxuXG5kb3dubG9hZFJlcG9ydCgpe1xuICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gIGNvbnN0IGRhdGFMb3NzUnB0RGVmYXVsdCA9IFt7bG9zc19yZXNwOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGRhdGVfYmFua2VkOicnLGJnY19iYXRjaDonJyxwYXltZW50X21ldGhvZDonJyxhbW91bnQ6Jyd9XSxcbiAgICB1blByb2Nlc3NlZFJwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxleGNlcHRpb25fcmVmOicnLGNjZF9yZWY6JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscGF5bWVudF9tZXRob2Q6JycsYW1vdW50OicnfV0sXG4gICAgcHJvY2Vzc2VkVW5hbGxvY2F0ZWQgPVt7cmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGFsbG9jYXRpb25fc3RhdHVzOicnLHJlY2VpdmluZ19vZmZpY2U6JycsYWxsb2NhdGlvbl9yZWFzb246JycsY2NkX2V4Y2VwdGlvbl9yZWY6JycsY2NkX2Nhc2VfcmVmOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfbWV0aG9kOicnLGFtb3VudDonJyx1cGRhdGVkX2J5OicnfV0sXG4gICAgc2hvcnRGYWxsc1JwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxzdXJwbHVzX3Nob3J0ZmFsbDonJyxiYWxhbmNlOicnLHBheW1lbnRfYW1vdW50OicnLGNjZF9jYXNlX3JlZmVyZW5jZTonJyxjY2RfZXhjZXB0aW9uX3JlZmVyZW5jZTonJyxwcm9jZXNzZWRfZGF0ZTonJywgcmVhc29uOicnLCBleHBsYW5hdGlvbjonJywgdXNlcl9uYW1lOicnfV0sXG4gICAgc2VsZWN0ZWRSZXBvcnROYW1lID0gdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsXG4gICAgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykudmFsdWUpLFxuICAgIHNlbGVjdGVkRW5kRGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdlbmREYXRlJykudmFsdWUpO1xuXG4gICAgaWYoc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJyB8fCBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICl7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgIGxldCByZXM9IHtkYXRhOiB0aGlzLmFwcGx5RGF0ZUZvcm1hdChyZXN1bHQpfTtcbiAgICAgICAgICBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJyApe1xuICAgICAgICAgICAgcmVzLmRhdGE9IHByb2Nlc3NlZFVuYWxsb2NhdGVkO1xuICAgICAgICAgIH0gZWxzZSBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnU1VSUExVU19BTkRfU0hPUlRGQUxMJyApIHtcbiAgICAgICAgICAgIHJlcy5kYXRhPSBzaG9ydEZhbGxzUnB0RGVmYXVsdDtcbiAgICAgICAgICB9IFxuICAgICAgICAgIGlmKHJlc3VsdFsnZGF0YSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaTwgcmVzWydkYXRhJ10ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9yZWYnXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDAsMTMpO1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfaXRlbSddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMTMsMjEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcImJhbGFuY2VcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydiYWxhbmNlJ10gPSB0aGlzLmNvbnZlcnRUb0Zsb2F0VmFsdWUocmVzWydkYXRhJ11baV1bXCJiYWxhbmNlXCJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsncGF5bWVudF9hbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsncGF5bWVudF9hbW91bnQnXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IFxuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy54bEZpbGVTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHJlc1snZGF0YSddLCB0aGlzLmdldEZpbGVOYW1lKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlLCBzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgIGxldCByZXMgPSB7ZGF0YTogdGhpcy5hcHBseURhdGVGb3JtYXQocmVzdWx0KX07XG4gICAgICAgICAgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ0RBVEFfTE9TUycgKXtcbiAgICAgICAgICAgIHJlcy5kYXRhPSBkYXRhTG9zc1JwdERlZmF1bHQ7XG4gICAgICAgICAgfSBlbHNlIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdVTlBST0NFU1NFRCcpe1xuICAgICAgICAgICAgcmVzLmRhdGEgPSB1blByb2Nlc3NlZFJwdERlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3VsdFsnZGF0YSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IoIHZhciBpPTA7IGk8IHJlc1snZGF0YSddLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcImFtb3VudFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydhbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X3JlZiddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMCwxMyk7XG4gICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X2l0ZW0nXSA9IHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hc3NldF9kY25cIl0uc3Vic3RyKDEzLDIxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy54bEZpbGVTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHJlc1snZGF0YSddLCB0aGlzLmdldEZpbGVOYW1lKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlLCBzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlICkpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUpO1xuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldEZpbGVOYW1lKHNlbGVjdGVkT3B0aW9uOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcgKSB7XG4gICAgY29uc3QgbG9jID0gJ2VuLVVTJyxcbiAgICAgIHN0RHQgPSBmb3JtYXREYXRlKHN0YXJ0RGF0ZSwgJ2RkTU15eScsIGxvYyksXG4gICAgICBlbkR0ID0gZm9ybWF0RGF0ZShlbmREYXRlLCAnZGRNTXl5JywgbG9jKSxcbiAgICAgIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICBjdXJyZW50RGF0ZSA9IGZvcm1hdERhdGUobm93LCAnZGRNTXl5JywgbG9jKSxcbiAgICAgIHRpbWVzdGFtcCA9IGAke2N1cnJlbnREYXRlfV8ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldEhvdXJzKCkpfSR7dGhpcy5nZXRUd29kaWdpdChub3cuZ2V0TWludXRlcygpKX0ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldFNlY29uZHMoKSl9YCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uVHh0ID0gdGhpcy5nZXRDYW1lbENhc2VTdHJpbmcoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgXG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25UeHQrJ18nK3N0RHQrJ19Ub18nK2VuRHQrJ19SdW5fJysgdGltZXN0YW1wO1xuICB9IFxuICB0cmFuZm9ybURhdGUoc3RyRGF0ZTogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGlmIChzdHJEYXRlKSB7XG4gICAgICBsZXQgcGFydHMgPSBzdHJEYXRlLnNwbGl0KCctJyk7XG4gICAgICByZXN1bHQgPSBgJHtwYXJ0c1sxXX0vJHtwYXJ0c1syXX0vJHtwYXJ0c1swXX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldFR3b2RpZ2l0KGlucHV0OiBudW1iZXIpe1xuICAgIHJldHVybiAoXCIwXCIgKyBpbnB1dCkuc2xpY2UoLTIpO1xuICB9XG4gIGdldENhbWVsQ2FzZVN0cmluZyhzZWxlY3RlZE9wdGlvbikge1xuICAgIGxldCByZXN1bHQ7XG4gICAgc3dpdGNoKHNlbGVjdGVkT3B0aW9uKSB7IFxuICAgICAgY2FzZSAnVU5QUk9DRVNTRUQnOiB7IFxuICAgICAgICByZXN1bHQgPSAnVW5wcm9jZXNzZWQnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnREFUQV9MT1NTJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ0RhdGFfTG9zcyc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBjYXNlICdQUk9DRVNTRURfVU5BTExPQ0FURUQnOiB7IFxuICAgICAgICByZXN1bHQgPSAnUHJvY2Vzc2VkX1VuYWxsb2NhdGVkJztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGNhc2UgJ1NVUlBMVVNfQU5EX1NIT1JURkFMTCc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdTdXJwbHVzX1Nob3J0ZmFsbCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBkZWZhdWx0OiB7IFxuICAgICAgICByZXN1bHQgPSBzZWxlY3RlZE9wdGlvbjtcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgIH0gXG4gICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGFwcGx5RGF0ZUZvcm1hdChyZXMpIHtcbiAgICBjb25zdCBmbXQgPSAnZGQvTU0veXl5eScsXG4gICAgbG9jID0gJ2VuLVVTJztcbiAgICByZXR1cm4gcmVzWydkYXRhJ10ubWFwKHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZVsnZGF0ZV9iYW5rZWQnXSkge1xuICAgICAgICB2YWx1ZVsnZGF0ZV9iYW5rZWQnXSA9IGZvcm1hdERhdGUodmFsdWVbJ2RhdGVfYmFua2VkJ10sIGZtdCwgbG9jKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuICBcbiAgY29udmVydFRvRmxvYXRWYWx1ZShhbXQpIHtcbiAgICByZXR1cm4gYW10ID8gTnVtYmVyLnBhcnNlRmxvYXQoYW10KS50b0ZpeGVkKDIpOiAnMC4wMCc7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7UGF5bWVudExpc3RDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wYXltZW50LWxpc3QvcGF5bWVudC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1BheW1lbnRWaWV3Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtDYXJkRGV0YWlsc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2NhcmQtZGV0YWlscy9jYXJkLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7UGFnZU5vdEZvdW5kQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZS1ub3QtZm91bmQuY29tcG9uZW50JztcbmltcG9ydCB7UGF5bWVudExpYkNvbXBvbmVudH0gZnJvbSAnLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RhdHVzSGlzdG9yeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGJhRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wYmEtZGV0YWlscy9wYmEtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zb2xlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2hhcmVkL2xvZ2dlci9jb25zb2xlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkNvbXBvbmVudEh0dHBDbGllbnQgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZC9odHRwY2xpZW50L3dlYmNvbXBvbmVudC5odHRwLmNsaWVudCc7XG5pbXBvcnQgeyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGZWVTdW1tYXJ5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZlZS1zdW1tYXJ5L2ZlZS1zdW1tYXJ5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvckJhbm5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lcnJvci1iYW5uZXIvZXJyb3ItYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXJrVW5pZGVudGlmaWVkUGF5bWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50L21hcmstdW5pZGVudGlmaWVkLXBheW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE1hcmtVbnNvbGljaXRlZFBheW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWFyay11bnNvbGljaXRlZC1wYXltZW50L21hcmstdW5zb2xpY2l0ZWQtcGF5bWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVW5wcm9jZXNzZWRQYXltZW50c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91bnByb2Nlc3NlZC1wYXltZW50cy91bnByb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc2VkUGF5bWVudHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvY2Vzc2VkLXBheW1lbnRzL3Byb2Nlc3NlZC1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxsb2NhdGVQYXltZW50c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkUmVtaXNzaW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDY2RIeXBoZW5zUGlwZSB9IGZyb20gJy4vcGlwZXMvY2NkLWh5cGhlbnMucGlwZSc7XG5pbXBvcnQgeyBrZXlWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2tleS12YWx1ZS5waXBlJztcbmltcG9ydCB7IFNhbml0aXplSHRtbFBpcGUgfSBmcm9tICcuL3BpcGVzL3Nhbml0aXplLWh0bWwucGlwZSc7XG5pbXBvcnQgeyBSZXBvcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlcG9ydHMvcmVwb3J0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgWGxGaWxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgUGF5bWVudExpc3RDb21wb25lbnQsXG4gICAgUGF5bWVudFZpZXdDb21wb25lbnQsXG4gICAgQ2FyZERldGFpbHNDb21wb25lbnQsXG4gICAgUGFnZU5vdEZvdW5kQ29tcG9uZW50LFxuICAgIFN0YXR1c0hpc3RvcnlDb21wb25lbnQsXG4gICAgTWFya1VuaWRlbnRpZmllZFBheW1lbnRDb21wb25lbnQsXG4gICAgTWFya1Vuc29saWNpdGVkUGF5bWVudENvbXBvbmVudCxcbiAgICBVbnByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50LFxuICAgIFByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50LFxuICAgIEFsbG9jYXRlUGF5bWVudHNDb21wb25lbnQsXG4gICAgUGJhRGV0YWlsc0NvbXBvbmVudCxcbiAgICBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50LFxuICAgIEZlZVN1bW1hcnlDb21wb25lbnQsXG4gICAgQWRkUmVtaXNzaW9uQ29tcG9uZW50LFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIGtleVZhbHVlUGlwZSxcbiAgICBTYW5pdGl6ZUh0bWxQaXBlLFxuICAgIFJlcG9ydHNDb21wb25lbnQsXG4gICAgRXJyb3JCYW5uZXJDb21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogWyBQYXltZW50TGliQ29tcG9uZW50IF0sXG4gIHByb3ZpZGVyczogWyBcbiAgICB7IHByb3ZpZGU6IExvZ2dlclNlcnZpY2UsIHVzZUNsYXNzOiBDb25zb2xlTG9nZ2VyU2VydmljZSB9LFxuICAgIFhsRmlsZVNlcnZpY2UsXG4gICAgV2ViQ29tcG9uZW50SHR0cENsaWVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudExpYk1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJJbmplY3RhYmxlIiwiQ29tcG9uZW50IiwiSW5wdXQiLCJfdGhyb3ciLCJjYXRjaEVycm9yIiwiSHR0cENsaWVudCIsIkh0dHBIZWFkZXJzIiwiTWV0YSIsIm5vb3AiLCJyb3V0ZXIiLCJSb3V0ZXIiLCJCU19FTkFCTEVfRkxBRyIsInRzbGliXzEuX192YWx1ZXMiLCJMb2NhdGlvbiIsIkZvcm1Db250cm9sIiwiVmFsaWRhdG9ycyIsIkZvcm1CdWlsZGVyIiwiRXZlbnRFbWl0dGVyIiwiT3V0cHV0IiwiUGlwZSIsIkRvbVNhbml0aXplciIsIlhMU1gudXRpbHMiLCJYTFNYLndyaXRlIiwiRmlsZVNhdmVyLnNhdmVBcyIsImZvcm1hdERhdGUiLCJOZ01vZHVsZSIsIkNvbW1vbk1vZHVsZSIsIkh0dHBDbGllbnRNb2R1bGUiLCJGb3Jtc01vZHVsZSIsIlJlYWN0aXZlRm9ybXNNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtRQVVFO1NBQWlCOzs7OztRQUVqQix5Q0FBYTs7OztZQUFiLFVBQWMsT0FBZTtnQkFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7YUFDekI7Ozs7UUFFRCx5Q0FBYTs7O1lBQWI7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3RCOzs7OztRQUVELGlEQUFxQjs7OztZQUFyQixVQUFzQixlQUF1QjtnQkFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGVBQWUsQ0FBQzthQUMxQzs7OztRQUVELGlEQUFxQjs7O1lBQXJCO2dCQUNFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQy9COztvQkF4QkZBLGFBQVUsU0FBQzt3QkFDVixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7Ozs7O2dDQUpEOzs7Ozs7O0FDQUE7UUE4Q0UsNkJBQW9CLGlCQUFvQztZQUFwQyxzQkFBaUIsR0FB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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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