@hmcts/ccpay-web-component 6.0.16-beta01 → 6.0.17-beta01
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +5 -16
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +4 -4
- package/esm2022/lib/components/card-details/card-details.component.mjs +4 -4
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +9 -6
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +4 -4
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +4 -4
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +4 -4
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +4 -4
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +5 -5
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +4 -4
- package/esm2022/lib/components/page-not-found.component.mjs +4 -4
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +4 -4
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +5 -5
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +4 -4
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +15 -7
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +4 -4
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +4 -4
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +4 -4
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +5 -5
- package/esm2022/lib/components/reports/reports.component.mjs +4 -4
- package/esm2022/lib/components/service-request/service-request.component.mjs +8 -5
- package/esm2022/lib/components/status-history/status-history.component.mjs +4 -4
- package/esm2022/lib/components/table/table.component.mjs +4 -4
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +4 -4
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +3 -3
- package/esm2022/lib/payment-lib.component.mjs +7 -7
- package/esm2022/lib/payment-lib.module.mjs +15 -14
- package/esm2022/lib/payment-lib.service.mjs +4 -4
- package/esm2022/lib/pipes/capitalize.pipe.mjs +4 -4
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +4 -4
- package/esm2022/lib/pipes/key-value.pipe.mjs +4 -4
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +4 -4
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +4 -4
- package/esm2022/lib/services/card-details/card-details.service.mjs +4 -4
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +4 -4
- package/esm2022/lib/services/notification/notification.service.mjs +4 -4
- package/esm2022/lib/services/orderslist.service.mjs +4 -4
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +4 -4
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +4 -4
- package/esm2022/lib/services/refunds/refunds.service.mjs +4 -4
- package/esm2022/lib/services/shared/error-handler.service.mjs +4 -4
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +4 -4
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +4 -4
- package/esm2022/lib/services/shared/logger/logger.service.mjs +4 -4
- package/esm2022/lib/services/status-history/status-history.service.mjs +4 -4
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +4 -4
- package/fesm2022/hmcts-ccpay-web-component.mjs +220 -222
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +0 -1
- package/lib/components/pba-payment/pba-payment.component.d.ts +3 -1
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +1 -1
- package/lib/payment-lib.module.d.ts +36 -35
- package/package.json +1 -1
|
@@ -373,10 +373,10 @@ export class PaymentViewComponent {
|
|
|
373
373
|
hideNotificationPreview() {
|
|
374
374
|
this.notificationPreview = false;
|
|
375
375
|
}
|
|
376
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
377
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PaymentViewComponent, isStandalone: true, selector: "ccpay-payment-view", inputs: { isTurnOff: "isTurnOff", isTakePayment: "isTakePayment", caseType: "caseType", orderRef: "orderRef", orderStatus: "orderStatus", orderTotalPayments: "orderTotalPayments", payment: "payment", LOGGEDINUSERROLES: "LOGGEDINUSERROLES", ISPAYMENTSTATUSENABLED: "ISPAYMENTSTATUSENABLED", orderParty: "orderParty", orderCreated: "orderCreated", orderCCDEvent: "orderCCDEvent", orderFeesTotal: "orderFeesTotal", orderRemissionTotal: "orderRemissionTotal", orderDetail: "orderDetail", isServiceRequest: "isServiceRequest" }, providers: [{ provide: 'PAYMENT_VIEW', useExisting: forwardRef(() => PaymentViewComponent) }], ngImport: i0, template: "<div class=\"payment-view-section\">\n<ng-container *ngIf=\"viewStatus === 'paymentview' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\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 details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.over_payment > 0\">\n <td class=\"bold tb-col-w\">Over payment</td>\n <td class=\"tb-col-w\">\u00A3{{ getOverPaymentValue() | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIsIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n<div *ngIf=\"ISPAYMENTSTATUSENABLED\">\n <div class=\"column\">\n <h2 class=\"heading-medium\">Disputed payment history</h2>\n </div>\n \n <div>\n <table>\n <thead>\n <tr>\n <th>Status</th>\n <th>Amount</th>\n <th>Date</th>\n <th>Payment reference</th>\n <th>Event</th>\n <th></th>\n </tr>\n </thead> \n <tbody *ngIf=\"!errorMsg && allPaymentsFailure.length > 0\">\n <tr *ngFor=\"let payment of allPaymentsFailure\">\n <td>{{ payment.status | capitalize }}</td>\n <td>\u00A3{{ payment.disputed_amount | number:'.2' }}</td>\n <td>{{(payment.representment_date ? payment.representment_date : payment.failure_event_date_time) | date:'dd MMM yyyy'}}</td>\n <td>{{ payment.payment_reference }}</td>\n <td >{{ payment.failure_type }}</td>\n <td>\n \n <a href=\"javascript:void(0)\" (click)=\"goToPaymentFailuePage(payment)\">Show detail</a>\n\n </td>\n </tr>\n </tbody>\n <tbody *ngIf=\"errorMsg || allPaymentsFailure.length === 0\">\n <tr>\n <td colspan=\"6\"> No disputed payment history available. </td>\n </tr>\n </tbody>\n </table>\n </div>\n <br/>\n <br/>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n\n </div>\n </div>\n\n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkIsAddRemissionBtnEnable(fee)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </div>\n\n <!-- remissions -->\n <div class=\"order-class\">\n <div class=\"column\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.remission_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 <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!canItBeRefunded(remission)\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n </tr>\n </tbody>\n\n\n </table>\n </div></div>\n\n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n\n </div>\n </div>\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[fee]=\"feeId\"\n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n\n<ccpay-add-remission\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"false\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\"\n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [fees] =\"paymentFees\"\n [isFullyRefund] = \"isFullyRefund\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n \n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"isServiceRequest\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n>\n</ccpay-service-request>\n\n</ng-container>\n</div>\n<div class=\"over-payment\">\n<ng-container *ngIf=\"viewCompStatus === 'overpayment'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTPAGE'> \n <h1 class=\"heading-large\">Issue refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"form-hint\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-medium\">Select payment to refund</h1>\n </legend>\n <div class=\"govuk-radios\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"over-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('op')\" value=\"op\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live\">\n Over payment \u00A3{{getOverPaymentValue() | number:'.2'}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"full-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('fp')\" value=\"fp\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live-2\">\n Full payment \u00A3{{paymentGroup?.payments[0]?.amount | number:'.2'}}\n </label>\n </div>\n </div>\n <button class=\"govuk-button govuk-button--secondary over-payment-alignment govuk-font19px\"\n (click)=\"goToPaymentViewComponent()\"> Previous</button>\n <button \n (click)=\"continuePayment(paymentGroup)\"\n [disabled]=\"isContinueBtnDisabled\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n class=\"govuk-button\"> Continue</button>\n </fieldset>\n</div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overPaymentAddressCapture'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTADDRESSCAPTUREPAGE'> \n <h1 class=\"govuk-heading-l\">Issue refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event)\"\n(redirectToIssueRefund)=\"gotoPaymentSelectPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\"> {{paymentGroup.payments[0].reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup.payments[0].amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup?.fees[0]?.net_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{getOverPaymentValue() | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reason</td>\n <td class=\"govuk-table__cell\">Over payment</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email?.trim()}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line?.trim()}} {{contactDetailsObj?.city?.trim()}} {{contactDetailsObj?.county?.trim()}} {{contactDetailsObj?.country?.trim()}} {{contactDetailsObj?.postal_code?.trim()}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" \n [payment]=\"paymentGroup.payments[0]\" \n [contactDetails]=\"contactDetailsObj\"\n [refundReason]=\"'RR037'\"\n [refundAmount]=\"getOverPaymentValue()\"></app-notification-preview>\n\n <button type=\"submit\" class=\"button govuk-button--secondary over-payment-alignment govuk-font19px\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link govuk-font19px\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row pagesize\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_view_title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n</ng-container>\n</div>\n\n<ng-container *ngIf=\"viewStatus === 'payment-failure'\">\n <div class=\"payment-failure-alignment\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goBackToPaymentView($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Failure event details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold\">Failure reference</td>\n <td>\t{{selectedPaymentsStatus.failure_reference}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure reason</td>\n <td>\t{{selectedPaymentsStatus.failure_reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment reference</td>\n <td>{{ selectedPaymentsStatus.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment amount</td>\n <td> \u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Disputed amount</td>\n <td>\t\u00A3{{selectedPaymentsStatus.disputed_amount | number:'.2'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Additional information</td>\n <td>\t{{selectedPaymentsStatus.additional_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure type</td>\n <td>\t{{ selectedPaymentsStatus.failure_type }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure event date and time</td>\n <td> {{ selectedPaymentsStatus.failure_event_date_time | date:'dd MMM yyyy HH:mm:ss' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.has_amount_debited\">\n <td class=\"bold\">Has disputed amount debited</td>\n <td>\t{{selectedPaymentsStatus.has_amount_debited}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_status\">\n <td class=\"bold\">Status following representation of payment</td>\n <td>\t{{(selectedPaymentsStatus.representment_status === 'Yes' || selectedPaymentsStatus.representment_status === 'yes') ? 'Success' : 'Failure'}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_date\">\n <td class=\"bold\">Date payment represented</td>\n <td>\t{{selectedPaymentsStatus.representment_date | date:'dd MMM yyyy HH:mm:ss'}}</td>\n </tr>\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n</ng-container>\n", styles: [".payment-view-section .tb-col-w{width:330px}.payment-view-section .tr-border{border-bottom:2px solid}.payment-view-section .payment-view-alignment{margin-left:30px}.payment-view-section .govuk-button{font-size:19px;float:left;margin-top:2em}.payment-view-section .remission{margin-bottom:7em}.payment-view-section .govuk-error-summary__title{font-size:24px!important}.payment-view-section .govuk-table__cell,.payment-view-section .govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.payment-view-section .govuk-table__row{line-height:1.3}.payment-view-section .govuk-table__cell:last-child{text-align:right}.payment-view-section .text-transform:first-letter{text-transform:capitalize}.payment-view-section .govuk-link{cursor:pointer}.payment-view-section .mar-17{font-size:19px!important}.over-payment .pagesize{margin:2em;width:97%}.over-payment .contactDetails-width{width:70%}.over-payment .margin-top10px{margin-top:20px}.over-payment .govuk-font19px{font-size:19px!important}.over-payment .margin-top--size{margin-top:-30px}.over-payment .over-payment-alignment{margin-right:10px}.over-payment .govuk-button{font-size:19px;float:left;margin-top:2em}.over-payment td.govuk-table__cell{width:50%}.over-payment .govuk-warning-text__text,.over-payment .govuk-label--s,.over-payment .label_payment__symbol{font-size:19px;font-weight:400}.over-payment .inline-error-class{outline:3px solid #a71414;outline-offset:0;border-color:#a71414}.over-payment .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.over-payment .govuk-button-group{padding-top:2em}.over-payment .heading-medium{margin-top:.875em}.over-payment .heading-large{margin-top:.25em}.over-payment .govuk-panel--confirmation{color:#fff;background:#00703C}.over-payment .govuk-panel__title{font-size:5rem}.over-payment .govuk-body-m,.over-payment .govuk-body{font-size:2.1875rem}.over-payment .govuk-link{cursor:pointer}.over-payment .govuk-radios__conditional{padding-top:12px!important}.over-payment .right{float:right;cursor:pointer}.over-payment .radio{float:right}.over-payment .white{color:#fff}.whitespace-inherit{white-space:inherit!important}.govuk-panel_view_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700}.white{color:#fff}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i0.forwardRef(function () { return i4.DecimalPipe; }), name: "number" }, { kind: "pipe", type: i0.forwardRef(function () { return i4.CurrencyPipe; }), name: "currency" }, { kind: "pipe", type: i0.forwardRef(function () { return i4.DatePipe; }), name: "date" }, { kind: "component", type: i0.forwardRef(function () { return AddRemissionComponent; }), selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "component", type: i0.forwardRef(function () { return StatusHistoryComponent; }), selector: "ccpay-payment-statuses", inputs: ["isTakePayment"] }, { kind: "component", type: i0.forwardRef(function () { return ServiceRequestComponent; }), selector: "ccpay-service-request", inputs: ["LOGGEDINUSERROLES", "viewStatus", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal", "paymentGroupList", "takePayment", "ccdCaseNumber", "isServiceRequest"], outputs: ["goToServiceRquestComponent"] }, { kind: "component", type: i0.forwardRef(function () { return ContactDetailsComponent; }), selector: "ccpay-contact-details", inputs: ["isEditOperation", "isEditOperationInRefundList", "addressObj"], outputs: ["assignContactDetails", "assignContactDetailsInFefundsList", "redirectToIssueRefund"] }, { kind: "component", type: i0.forwardRef(function () { return NotificationPreviewComponent; }), selector: "app-notification-preview", inputs: ["payment", "contactDetails", "refundReason", "refundAmount", "paymentReference", "refundReference", "previewJourney", "notificationSent"], outputs: ["notificationPreviewEvent"] }, { kind: "pipe", type: i0.forwardRef(function () { return CcdHyphensPipe; }), name: "ccdHyphens" }, { kind: "pipe", type: i0.forwardRef(function () { return CapitalizePipe; }), name: "capitalize" }] });
|
|
376
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PaymentViewComponent, deps: [{ token: i1.PaymentViewService }, { token: i2.NotificationService }, { token: 'PAYMENT_LIB' }, { token: i0.ChangeDetectorRef }, { token: i3.OrderslistService }], target: i0.ɵɵFactoryTarget.Component });
|
|
377
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PaymentViewComponent, isStandalone: true, selector: "ccpay-payment-view", inputs: { isTurnOff: "isTurnOff", isTakePayment: "isTakePayment", caseType: "caseType", orderRef: "orderRef", orderStatus: "orderStatus", orderTotalPayments: "orderTotalPayments", payment: "payment", LOGGEDINUSERROLES: "LOGGEDINUSERROLES", ISPAYMENTSTATUSENABLED: "ISPAYMENTSTATUSENABLED", orderParty: "orderParty", orderCreated: "orderCreated", orderCCDEvent: "orderCCDEvent", orderFeesTotal: "orderFeesTotal", orderRemissionTotal: "orderRemissionTotal", orderDetail: "orderDetail", isServiceRequest: "isServiceRequest" }, providers: [{ provide: 'PAYMENT_VIEW', useExisting: forwardRef(() => PaymentViewComponent) }], ngImport: i0, template: "<div class=\"payment-view-section\">\n<ng-container *ngIf=\"viewStatus === 'paymentview' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\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 details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.over_payment > 0\">\n <td class=\"bold tb-col-w\">Over payment</td>\n <td class=\"tb-col-w\">\u00A3{{ getOverPaymentValue() | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIsIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n<div *ngIf=\"ISPAYMENTSTATUSENABLED\">\n <div class=\"column\">\n <h2 class=\"heading-medium\">Disputed payment history</h2>\n </div>\n \n <div>\n <table>\n <thead>\n <tr>\n <th>Status</th>\n <th>Amount</th>\n <th>Date</th>\n <th>Payment reference</th>\n <th>Event</th>\n <th></th>\n </tr>\n </thead> \n <tbody *ngIf=\"!errorMsg && allPaymentsFailure.length > 0\">\n <tr *ngFor=\"let payment of allPaymentsFailure\">\n <td>{{ payment.status | capitalize }}</td>\n <td>\u00A3{{ payment.disputed_amount | number:'.2' }}</td>\n <td>{{(payment.representment_date ? payment.representment_date : payment.failure_event_date_time) | date:'dd MMM yyyy'}}</td>\n <td>{{ payment.payment_reference }}</td>\n <td >{{ payment.failure_type }}</td>\n <td>\n \n <a href=\"javascript:void(0)\" (click)=\"goToPaymentFailuePage(payment)\">Show detail</a>\n\n </td>\n </tr>\n </tbody>\n <tbody *ngIf=\"errorMsg || allPaymentsFailure.length === 0\">\n <tr>\n <td colspan=\"6\"> No disputed payment history available. </td>\n </tr>\n </tbody>\n </table>\n </div>\n <br/>\n <br/>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n\n </div>\n </div>\n\n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkIsAddRemissionBtnEnable(fee)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </div>\n\n <!-- remissions -->\n <div class=\"order-class\">\n <div class=\"column\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.remission_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 <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!canItBeRefunded(remission)\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n </tr>\n </tbody>\n\n\n </table>\n </div></div>\n\n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n\n </div>\n </div>\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[fee]=\"feeId\"\n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n\n<ccpay-add-remission\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"false\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\"\n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [fees] =\"paymentFees\"\n [isFullyRefund] = \"isFullyRefund\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n \n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"isServiceRequest\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n>\n</ccpay-service-request>\n\n</ng-container>\n</div>\n<div class=\"over-payment\">\n<ng-container *ngIf=\"viewCompStatus === 'overpayment'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTPAGE'> \n <h1 class=\"heading-large\">Issue refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"form-hint\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-medium\">Select payment to refund</h1>\n </legend>\n <div class=\"govuk-radios\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"over-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('op')\" value=\"op\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live\">\n Over payment \u00A3{{getOverPaymentValue() | number:'.2'}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"full-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('fp')\" value=\"fp\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live-2\">\n Full payment \u00A3{{paymentGroup?.payments[0]?.amount | number:'.2'}}\n </label>\n </div>\n </div>\n <button class=\"govuk-button govuk-button--secondary over-payment-alignment govuk-font19px\"\n (click)=\"goToPaymentViewComponent()\"> Previous</button>\n <button \n (click)=\"continuePayment(paymentGroup)\"\n [disabled]=\"isContinueBtnDisabled\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n class=\"govuk-button\"> Continue</button>\n </fieldset>\n</div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overPaymentAddressCapture'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTADDRESSCAPTUREPAGE'> \n <h1 class=\"govuk-heading-l\">Issue refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event)\"\n(redirectToIssueRefund)=\"gotoPaymentSelectPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\"> {{paymentGroup.payments[0].reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup.payments[0].amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup?.fees[0]?.net_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{getOverPaymentValue() | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reason</td>\n <td class=\"govuk-table__cell\">Over payment</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email?.trim()}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line?.trim()}} {{contactDetailsObj?.city?.trim()}} {{contactDetailsObj?.county?.trim()}} {{contactDetailsObj?.country?.trim()}} {{contactDetailsObj?.postal_code?.trim()}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" \n [payment]=\"paymentGroup.payments[0]\" \n [contactDetails]=\"contactDetailsObj\"\n [refundReason]=\"'RR037'\"\n [refundAmount]=\"getOverPaymentValue()\"></app-notification-preview>\n\n <button type=\"submit\" class=\"button govuk-button--secondary over-payment-alignment govuk-font19px\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link govuk-font19px\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row pagesize\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_view_title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n</ng-container>\n</div>\n\n<ng-container *ngIf=\"viewStatus === 'payment-failure'\">\n <div class=\"payment-failure-alignment\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goBackToPaymentView($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Failure event details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold\">Failure reference</td>\n <td>\t{{selectedPaymentsStatus.failure_reference}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure reason</td>\n <td>\t{{selectedPaymentsStatus.failure_reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment reference</td>\n <td>{{ selectedPaymentsStatus.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment amount</td>\n <td> \u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Disputed amount</td>\n <td>\t\u00A3{{selectedPaymentsStatus.disputed_amount | number:'.2'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Additional information</td>\n <td>\t{{selectedPaymentsStatus.additional_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure type</td>\n <td>\t{{ selectedPaymentsStatus.failure_type }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure event date and time</td>\n <td> {{ selectedPaymentsStatus.failure_event_date_time | date:'dd MMM yyyy HH:mm:ss' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.has_amount_debited\">\n <td class=\"bold\">Has disputed amount debited</td>\n <td>\t{{selectedPaymentsStatus.has_amount_debited}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_status\">\n <td class=\"bold\">Status following representation of payment</td>\n <td>\t{{(selectedPaymentsStatus.representment_status === 'Yes' || selectedPaymentsStatus.representment_status === 'yes') ? 'Success' : 'Failure'}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_date\">\n <td class=\"bold\">Date payment represented</td>\n <td>\t{{selectedPaymentsStatus.representment_date | date:'dd MMM yyyy HH:mm:ss'}}</td>\n </tr>\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n</ng-container>\n", styles: [".payment-view-section .tb-col-w{width:330px}.payment-view-section .tr-border{border-bottom:2px solid}.payment-view-section .payment-view-alignment{margin-left:30px}.payment-view-section .govuk-button{font-size:19px;float:left;margin-top:2em}.payment-view-section .remission{margin-bottom:7em}.payment-view-section .govuk-error-summary__title{font-size:24px!important}.payment-view-section .govuk-table__cell,.payment-view-section .govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.payment-view-section .govuk-table__row{line-height:1.3}.payment-view-section .govuk-table__cell:last-child{text-align:right}.payment-view-section .text-transform:first-letter{text-transform:capitalize}.payment-view-section .govuk-link{cursor:pointer}.payment-view-section .mar-17{font-size:19px!important}.over-payment .pagesize{margin:2em;width:97%}.over-payment .contactDetails-width{width:70%}.over-payment .margin-top10px{margin-top:20px}.over-payment .govuk-font19px{font-size:19px!important}.over-payment .margin-top--size{margin-top:-30px}.over-payment .over-payment-alignment{margin-right:10px}.over-payment .govuk-button{font-size:19px;float:left;margin-top:2em}.over-payment td.govuk-table__cell{width:50%}.over-payment .govuk-warning-text__text,.over-payment .govuk-label--s,.over-payment .label_payment__symbol{font-size:19px;font-weight:400}.over-payment .inline-error-class{outline:3px solid #a71414;outline-offset:0;border-color:#a71414}.over-payment .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.over-payment .govuk-button-group{padding-top:2em}.over-payment .heading-medium{margin-top:.875em}.over-payment .heading-large{margin-top:.25em}.over-payment .govuk-panel--confirmation{color:#fff;background:#00703c}.over-payment .govuk-panel__title{font-size:5rem}.over-payment .govuk-body-m,.over-payment .govuk-body{font-size:2.1875rem}.over-payment .govuk-link{cursor:pointer}.over-payment .govuk-radios__conditional{padding-top:12px!important}.over-payment .right{float:right;cursor:pointer}.over-payment .radio{float:right}.over-payment .white{color:#fff}.whitespace-inherit{white-space:inherit!important}.govuk-panel_view_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700}.white{color:#fff}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i0.forwardRef(function () { return i4.DecimalPipe; }), name: "number" }, { kind: "pipe", type: i0.forwardRef(function () { return i4.CurrencyPipe; }), name: "currency" }, { kind: "pipe", type: i0.forwardRef(function () { return i4.DatePipe; }), name: "date" }, { kind: "component", type: i0.forwardRef(function () { return AddRemissionComponent; }), selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "component", type: i0.forwardRef(function () { return StatusHistoryComponent; }), selector: "ccpay-payment-statuses", inputs: ["isTakePayment"] }, { kind: "component", type: i0.forwardRef(function () { return ServiceRequestComponent; }), selector: "ccpay-service-request", inputs: ["LOGGEDINUSERROLES", "viewStatus", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal", "paymentGroupList", "takePayment", "ccdCaseNumber", "isServiceRequest"], outputs: ["goToServiceRquestComponent"] }, { kind: "component", type: i0.forwardRef(function () { return ContactDetailsComponent; }), selector: "ccpay-contact-details", inputs: ["isEditOperation", "isEditOperationInRefundList", "addressObj"], outputs: ["assignContactDetails", "assignContactDetailsInFefundsList", "redirectToIssueRefund"] }, { kind: "component", type: i0.forwardRef(function () { return NotificationPreviewComponent; }), selector: "app-notification-preview", inputs: ["payment", "contactDetails", "refundReason", "refundAmount", "paymentReference", "refundReference", "previewJourney", "notificationSent"], outputs: ["notificationPreviewEvent"] }, { kind: "pipe", type: i0.forwardRef(function () { return CcdHyphensPipe; }), name: "ccdHyphens" }, { kind: "pipe", type: i0.forwardRef(function () { return CapitalizePipe; }), name: "capitalize" }] });
|
|
378
378
|
}
|
|
379
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PaymentViewComponent, decorators: [{
|
|
380
380
|
type: Component,
|
|
381
381
|
args: [{ selector: 'ccpay-payment-view', providers: [{ provide: 'PAYMENT_VIEW', useExisting: forwardRef(() => PaymentViewComponent) }], imports: [
|
|
382
382
|
CommonModule, forwardRef(() => AddRemissionComponent),
|
|
@@ -385,7 +385,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
385
385
|
NotificationPreviewComponent,
|
|
386
386
|
CcdHyphensPipe,
|
|
387
387
|
CapitalizePipe
|
|
388
|
-
], standalone: true, template: "<div class=\"payment-view-section\">\n<ng-container *ngIf=\"viewStatus === 'paymentview' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\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 details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.over_payment > 0\">\n <td class=\"bold tb-col-w\">Over payment</td>\n <td class=\"tb-col-w\">\u00A3{{ getOverPaymentValue() | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIsIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n<div *ngIf=\"ISPAYMENTSTATUSENABLED\">\n <div class=\"column\">\n <h2 class=\"heading-medium\">Disputed payment history</h2>\n </div>\n \n <div>\n <table>\n <thead>\n <tr>\n <th>Status</th>\n <th>Amount</th>\n <th>Date</th>\n <th>Payment reference</th>\n <th>Event</th>\n <th></th>\n </tr>\n </thead> \n <tbody *ngIf=\"!errorMsg && allPaymentsFailure.length > 0\">\n <tr *ngFor=\"let payment of allPaymentsFailure\">\n <td>{{ payment.status | capitalize }}</td>\n <td>\u00A3{{ payment.disputed_amount | number:'.2' }}</td>\n <td>{{(payment.representment_date ? payment.representment_date : payment.failure_event_date_time) | date:'dd MMM yyyy'}}</td>\n <td>{{ payment.payment_reference }}</td>\n <td >{{ payment.failure_type }}</td>\n <td>\n \n <a href=\"javascript:void(0)\" (click)=\"goToPaymentFailuePage(payment)\">Show detail</a>\n\n </td>\n </tr>\n </tbody>\n <tbody *ngIf=\"errorMsg || allPaymentsFailure.length === 0\">\n <tr>\n <td colspan=\"6\"> No disputed payment history available. </td>\n </tr>\n </tbody>\n </table>\n </div>\n <br/>\n <br/>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n\n </div>\n </div>\n\n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkIsAddRemissionBtnEnable(fee)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </div>\n\n <!-- remissions -->\n <div class=\"order-class\">\n <div class=\"column\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.remission_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 <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!canItBeRefunded(remission)\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n </tr>\n </tbody>\n\n\n </table>\n </div></div>\n\n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n\n </div>\n </div>\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[fee]=\"feeId\"\n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n\n<ccpay-add-remission\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"false\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\"\n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [fees] =\"paymentFees\"\n [isFullyRefund] = \"isFullyRefund\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n \n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"isServiceRequest\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n>\n</ccpay-service-request>\n\n</ng-container>\n</div>\n<div class=\"over-payment\">\n<ng-container *ngIf=\"viewCompStatus === 'overpayment'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTPAGE'> \n <h1 class=\"heading-large\">Issue refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"form-hint\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-medium\">Select payment to refund</h1>\n </legend>\n <div class=\"govuk-radios\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"over-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('op')\" value=\"op\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live\">\n Over payment \u00A3{{getOverPaymentValue() | number:'.2'}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"full-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('fp')\" value=\"fp\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live-2\">\n Full payment \u00A3{{paymentGroup?.payments[0]?.amount | number:'.2'}}\n </label>\n </div>\n </div>\n <button class=\"govuk-button govuk-button--secondary over-payment-alignment govuk-font19px\"\n (click)=\"goToPaymentViewComponent()\"> Previous</button>\n <button \n (click)=\"continuePayment(paymentGroup)\"\n [disabled]=\"isContinueBtnDisabled\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n class=\"govuk-button\"> Continue</button>\n </fieldset>\n</div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overPaymentAddressCapture'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTADDRESSCAPTUREPAGE'> \n <h1 class=\"govuk-heading-l\">Issue refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event)\"\n(redirectToIssueRefund)=\"gotoPaymentSelectPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\"> {{paymentGroup.payments[0].reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup.payments[0].amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup?.fees[0]?.net_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{getOverPaymentValue() | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reason</td>\n <td class=\"govuk-table__cell\">Over payment</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email?.trim()}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line?.trim()}} {{contactDetailsObj?.city?.trim()}} {{contactDetailsObj?.county?.trim()}} {{contactDetailsObj?.country?.trim()}} {{contactDetailsObj?.postal_code?.trim()}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" \n [payment]=\"paymentGroup.payments[0]\" \n [contactDetails]=\"contactDetailsObj\"\n [refundReason]=\"'RR037'\"\n [refundAmount]=\"getOverPaymentValue()\"></app-notification-preview>\n\n <button type=\"submit\" class=\"button govuk-button--secondary over-payment-alignment govuk-font19px\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link govuk-font19px\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row pagesize\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_view_title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n</ng-container>\n</div>\n\n<ng-container *ngIf=\"viewStatus === 'payment-failure'\">\n <div class=\"payment-failure-alignment\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goBackToPaymentView($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Failure event details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold\">Failure reference</td>\n <td>\t{{selectedPaymentsStatus.failure_reference}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure reason</td>\n <td>\t{{selectedPaymentsStatus.failure_reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment reference</td>\n <td>{{ selectedPaymentsStatus.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment amount</td>\n <td> \u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Disputed amount</td>\n <td>\t\u00A3{{selectedPaymentsStatus.disputed_amount | number:'.2'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Additional information</td>\n <td>\t{{selectedPaymentsStatus.additional_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure type</td>\n <td>\t{{ selectedPaymentsStatus.failure_type }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure event date and time</td>\n <td> {{ selectedPaymentsStatus.failure_event_date_time | date:'dd MMM yyyy HH:mm:ss' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.has_amount_debited\">\n <td class=\"bold\">Has disputed amount debited</td>\n <td>\t{{selectedPaymentsStatus.has_amount_debited}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_status\">\n <td class=\"bold\">Status following representation of payment</td>\n <td>\t{{(selectedPaymentsStatus.representment_status === 'Yes' || selectedPaymentsStatus.representment_status === 'yes') ? 'Success' : 'Failure'}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_date\">\n <td class=\"bold\">Date payment represented</td>\n <td>\t{{selectedPaymentsStatus.representment_date | date:'dd MMM yyyy HH:mm:ss'}}</td>\n </tr>\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n</ng-container>\n", styles: [".payment-view-section .tb-col-w{width:330px}.payment-view-section .tr-border{border-bottom:2px solid}.payment-view-section .payment-view-alignment{margin-left:30px}.payment-view-section .govuk-button{font-size:19px;float:left;margin-top:2em}.payment-view-section .remission{margin-bottom:7em}.payment-view-section .govuk-error-summary__title{font-size:24px!important}.payment-view-section .govuk-table__cell,.payment-view-section .govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.payment-view-section .govuk-table__row{line-height:1.3}.payment-view-section .govuk-table__cell:last-child{text-align:right}.payment-view-section .text-transform:first-letter{text-transform:capitalize}.payment-view-section .govuk-link{cursor:pointer}.payment-view-section .mar-17{font-size:19px!important}.over-payment .pagesize{margin:2em;width:97%}.over-payment .contactDetails-width{width:70%}.over-payment .margin-top10px{margin-top:20px}.over-payment .govuk-font19px{font-size:19px!important}.over-payment .margin-top--size{margin-top:-30px}.over-payment .over-payment-alignment{margin-right:10px}.over-payment .govuk-button{font-size:19px;float:left;margin-top:2em}.over-payment td.govuk-table__cell{width:50%}.over-payment .govuk-warning-text__text,.over-payment .govuk-label--s,.over-payment .label_payment__symbol{font-size:19px;font-weight:400}.over-payment .inline-error-class{outline:3px solid #a71414;outline-offset:0;border-color:#a71414}.over-payment .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.over-payment .govuk-button-group{padding-top:2em}.over-payment .heading-medium{margin-top:.875em}.over-payment .heading-large{margin-top:.25em}.over-payment .govuk-panel--confirmation{color:#fff;background:#00703C}.over-payment .govuk-panel__title{font-size:5rem}.over-payment .govuk-body-m,.over-payment .govuk-body{font-size:2.1875rem}.over-payment .govuk-link{cursor:pointer}.over-payment .govuk-radios__conditional{padding-top:12px!important}.over-payment .right{float:right;cursor:pointer}.over-payment .radio{float:right}.over-payment .white{color:#fff}.whitespace-inherit{white-space:inherit!important}.govuk-panel_view_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700}.white{color:#fff}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}\n"] }]
|
|
388
|
+
], standalone: true, template: "<div class=\"payment-view-section\">\n<ng-container *ngIf=\"viewStatus === 'paymentview' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\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 details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.over_payment > 0\">\n <td class=\"bold tb-col-w\">Over payment</td>\n <td class=\"tb-col-w\">\u00A3{{ getOverPaymentValue() | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIsIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n<div *ngIf=\"ISPAYMENTSTATUSENABLED\">\n <div class=\"column\">\n <h2 class=\"heading-medium\">Disputed payment history</h2>\n </div>\n \n <div>\n <table>\n <thead>\n <tr>\n <th>Status</th>\n <th>Amount</th>\n <th>Date</th>\n <th>Payment reference</th>\n <th>Event</th>\n <th></th>\n </tr>\n </thead> \n <tbody *ngIf=\"!errorMsg && allPaymentsFailure.length > 0\">\n <tr *ngFor=\"let payment of allPaymentsFailure\">\n <td>{{ payment.status | capitalize }}</td>\n <td>\u00A3{{ payment.disputed_amount | number:'.2' }}</td>\n <td>{{(payment.representment_date ? payment.representment_date : payment.failure_event_date_time) | date:'dd MMM yyyy'}}</td>\n <td>{{ payment.payment_reference }}</td>\n <td >{{ payment.failure_type }}</td>\n <td>\n \n <a href=\"javascript:void(0)\" (click)=\"goToPaymentFailuePage(payment)\">Show detail</a>\n\n </td>\n </tr>\n </tbody>\n <tbody *ngIf=\"errorMsg || allPaymentsFailure.length === 0\">\n <tr>\n <td colspan=\"6\"> No disputed payment history available. </td>\n </tr>\n </tbody>\n </table>\n </div>\n <br/>\n <br/>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n\n </div>\n </div>\n\n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkIsAddRemissionBtnEnable(fee)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </div>\n\n <!-- remissions -->\n <div class=\"order-class\">\n <div class=\"column\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission?.remission_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 <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!canItBeRefunded(remission)\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n </tr>\n </tbody>\n\n\n </table>\n </div></div>\n\n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n\n </div>\n </div>\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[fee]=\"feeId\"\n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n\n<ccpay-add-remission\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"false\"\n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\"\n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [fees] =\"paymentFees\"\n [isFullyRefund] = \"isFullyRefund\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n \n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"isServiceRequest\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n>\n</ccpay-service-request>\n\n</ng-container>\n</div>\n<div class=\"over-payment\">\n<ng-container *ngIf=\"viewCompStatus === 'overpayment'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTPAGE'> \n <h1 class=\"heading-large\">Issue refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"form-hint\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-medium\">Select payment to refund</h1>\n </legend>\n <div class=\"govuk-radios\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"over-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('op')\" value=\"op\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live\">\n Over payment \u00A3{{getOverPaymentValue() | number:'.2'}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"full-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('fp')\" value=\"fp\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live-2\">\n Full payment \u00A3{{paymentGroup?.payments[0]?.amount | number:'.2'}}\n </label>\n </div>\n </div>\n <button class=\"govuk-button govuk-button--secondary over-payment-alignment govuk-font19px\"\n (click)=\"goToPaymentViewComponent()\"> Previous</button>\n <button \n (click)=\"continuePayment(paymentGroup)\"\n [disabled]=\"isContinueBtnDisabled\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n class=\"govuk-button\"> Continue</button>\n </fieldset>\n</div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overPaymentAddressCapture'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTADDRESSCAPTUREPAGE'> \n <h1 class=\"govuk-heading-l\">Issue refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event)\"\n(redirectToIssueRefund)=\"gotoPaymentSelectPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\"> {{paymentGroup.payments[0].reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup.payments[0].amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup?.fees[0]?.net_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{getOverPaymentValue() | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reason</td>\n <td class=\"govuk-table__cell\">Over payment</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email?.trim()}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line?.trim()}} {{contactDetailsObj?.city?.trim()}} {{contactDetailsObj?.county?.trim()}} {{contactDetailsObj?.country?.trim()}} {{contactDetailsObj?.postal_code?.trim()}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" \n [payment]=\"paymentGroup.payments[0]\" \n [contactDetails]=\"contactDetailsObj\"\n [refundReason]=\"'RR037'\"\n [refundAmount]=\"getOverPaymentValue()\"></app-notification-preview>\n\n <button type=\"submit\" class=\"button govuk-button--secondary over-payment-alignment govuk-font19px\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link govuk-font19px\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row pagesize\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_view_title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n</ng-container>\n</div>\n\n<ng-container *ngIf=\"viewStatus === 'payment-failure'\">\n <div class=\"payment-failure-alignment\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goBackToPaymentView($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Failure event details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold\">Failure reference</td>\n <td>\t{{selectedPaymentsStatus.failure_reference}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure reason</td>\n <td>\t{{selectedPaymentsStatus.failure_reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment reference</td>\n <td>{{ selectedPaymentsStatus.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Payment amount</td>\n <td> \u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Disputed amount</td>\n <td>\t\u00A3{{selectedPaymentsStatus.disputed_amount | number:'.2'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Additional information</td>\n <td>\t{{selectedPaymentsStatus.additional_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure type</td>\n <td>\t{{ selectedPaymentsStatus.failure_type }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold\">Failure event date and time</td>\n <td> {{ selectedPaymentsStatus.failure_event_date_time | date:'dd MMM yyyy HH:mm:ss' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.has_amount_debited\">\n <td class=\"bold\">Has disputed amount debited</td>\n <td>\t{{selectedPaymentsStatus.has_amount_debited}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_status\">\n <td class=\"bold\">Status following representation of payment</td>\n <td>\t{{(selectedPaymentsStatus.representment_status === 'Yes' || selectedPaymentsStatus.representment_status === 'yes') ? 'Success' : 'Failure'}}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"selectedPaymentsStatus.representment_date\">\n <td class=\"bold\">Date payment represented</td>\n <td>\t{{selectedPaymentsStatus.representment_date | date:'dd MMM yyyy HH:mm:ss'}}</td>\n </tr>\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n</ng-container>\n", styles: [".payment-view-section .tb-col-w{width:330px}.payment-view-section .tr-border{border-bottom:2px solid}.payment-view-section .payment-view-alignment{margin-left:30px}.payment-view-section .govuk-button{font-size:19px;float:left;margin-top:2em}.payment-view-section .remission{margin-bottom:7em}.payment-view-section .govuk-error-summary__title{font-size:24px!important}.payment-view-section .govuk-table__cell,.payment-view-section .govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.payment-view-section .govuk-table__row{line-height:1.3}.payment-view-section .govuk-table__cell:last-child{text-align:right}.payment-view-section .text-transform:first-letter{text-transform:capitalize}.payment-view-section .govuk-link{cursor:pointer}.payment-view-section .mar-17{font-size:19px!important}.over-payment .pagesize{margin:2em;width:97%}.over-payment .contactDetails-width{width:70%}.over-payment .margin-top10px{margin-top:20px}.over-payment .govuk-font19px{font-size:19px!important}.over-payment .margin-top--size{margin-top:-30px}.over-payment .over-payment-alignment{margin-right:10px}.over-payment .govuk-button{font-size:19px;float:left;margin-top:2em}.over-payment td.govuk-table__cell{width:50%}.over-payment .govuk-warning-text__text,.over-payment .govuk-label--s,.over-payment .label_payment__symbol{font-size:19px;font-weight:400}.over-payment .inline-error-class{outline:3px solid #a71414;outline-offset:0;border-color:#a71414}.over-payment .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.over-payment .govuk-button-group{padding-top:2em}.over-payment .heading-medium{margin-top:.875em}.over-payment .heading-large{margin-top:.25em}.over-payment .govuk-panel--confirmation{color:#fff;background:#00703c}.over-payment .govuk-panel__title{font-size:5rem}.over-payment .govuk-body-m,.over-payment .govuk-body{font-size:2.1875rem}.over-payment .govuk-link{cursor:pointer}.over-payment .govuk-radios__conditional{padding-top:12px!important}.over-payment .right{float:right;cursor:pointer}.over-payment .radio{float:right}.over-payment .white{color:#fff}.whitespace-inherit{white-space:inherit!important}.govuk-panel_view_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700}.white{color:#fff}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}\n"] }]
|
|
389
389
|
}], ctorParameters: function () { return [{ type: i1.PaymentViewService }, { type: i2.NotificationService }, { type: undefined, decorators: [{
|
|
390
390
|
type: Inject,
|
|
391
391
|
args: ['PAYMENT_LIB']
|
|
@@ -423,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
423
423
|
type: Input,
|
|
424
424
|
args: ["isServiceRequest"]
|
|
425
425
|
}] } });
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFLckYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFbkYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1B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b25lbnQsIGZvcndhcmRSZWYsIEluamVjdCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BheW1lbnRWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7SUZlZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtJUmVtaXNzaW9ufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHtQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb259IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7SVBheW1lbnRGYWlsdXJlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50RmFpbHVyZSc7XG5pbXBvcnQge09yZGVyc2xpc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtJUmVmdW5kQ29udGFjdERldGFpbHN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZENvbnRhY3REZXRhaWxzJztcbmltcG9ydCB7QWRkUmVtaXNzaW9uQ29tcG9uZW50fSBmcm9tICcuLi9hZGQtcmVtaXNzaW9uL2FkZC1yZW1pc3Npb24uY29tcG9uZW50JztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtTdGF0dXNIaXN0b3J5Q29tcG9uZW50fSBmcm9tICcuLi9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHtTZXJ2aWNlUmVxdWVzdENvbXBvbmVudH0gZnJvbSAnLi4vc2VydmljZS1yZXF1ZXN0L3NlcnZpY2UtcmVxdWVzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtDb250YWN0RGV0YWlsc0NvbXBvbmVudH0gZnJvbSAnLi4vY29udGFjdC1kZXRhaWxzL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtOb3RpZmljYXRpb25QcmV2aWV3Q29tcG9uZW50fSBmcm9tICcuLi9ub3RpZmljYXRpb24tcHJldmlldy9ub3RpZmljYXRpb24tcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtDY2RIeXBoZW5zUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMvY2NkLWh5cGhlbnMucGlwZSc7XG5pbXBvcnQge0NhcGl0YWxpemVQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9jYXBpdGFsaXplLnBpcGUnO1xuaW1wb3J0IHR5cGUgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BheW1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BheW1lbnQtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdQQVlNRU5UX1ZJRVcnLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQYXltZW50Vmlld0NvbXBvbmVudCkgfV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQWRkUmVtaXNzaW9uQ29tcG9uZW50KSxcbiAgICBTdGF0dXNIaXN0b3J5Q29tcG9uZW50LCBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VSZXF1ZXN0Q29tcG9uZW50KSxcbiAgICBDb250YWN0RGV0YWlsc0NvbXBvbmVudCxcbiAgICBOb3RpZmljYXRpb25QcmV2aWV3Q29tcG9uZW50LFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIENhcGl0YWxpemVQaXBlXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNUYWtlUGF5bWVudDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FzZVR5cGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG9yZGVyUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCkgTE9HR0VESU5VU0VSUk9MRVM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBJU1BBWU1FTlRTVEFUVVNFTkFCTEVEOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyUGFydHk6IHN0cmluZztcbiAgQElucHV0KCkgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBASW5wdXQoKSBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyRmVlc1RvdGFsOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9yZGVyUmVtaXNzaW9uVG90YWw6IG51bWJlcjtcbiAgQElucHV0KCkgb3JkZXJEZXRhaWw6IGFueVtdO1xuICBmZWVzOiBhbnk7XG4gIGlzRnVsbHlSZWZ1bmQ6IGJvb2xlYW47XG4gIEBJbnB1dChcImlzU2VydmljZVJlcXVlc3RcIikgaXNTZXJ2aWNlUmVxdWVzdDogc3RyaW5nO1xuICBlcnJvck1zZzogc3RyaW5nO1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIGZlZUlkOiBJRmVlO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCddO1xuICByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10gPSBbXTtcbiAgYWxsUGF5bWVudHNGYWlsdXJlOiBJUGF5bWVudEZhaWx1cmVbXSA9IFtdO1xuICBzZWxlY3RlZFBheW1lbnRzU3RhdHVzOiBJUGF5bWVudEZhaWx1cmU7XG4gIHJlbWlzc2lvbkZlZUFtdDogbnVtYmVyO1xuICBpc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZTogYm9vbGVhbjtcbiAgc2VydmljZVJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIGlzRnJvbVBheW1lbnREZXRhaWxQYWdlOiBib29sZWFuO1xuICBwYXltZW50RmVlczogSUZlZVtdO1xuICBwYXltZW50VHlwZTogc3RyaW5nO1xuICBpc0NvbnRpbnVlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBjb250YWN0RGV0YWlsc09iajogSVJlZnVuZENvbnRhY3REZXRhaWxzXG4gIG5vdGlmaWNhdGlvbjogYW55O1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlOiBzdHJpbmc7XG4gIG5vdGlmaWNhdGlvblByZXZpZXc6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIEBJbmplY3QoJ1BBWU1FTlRfTElCJykgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuZGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVI7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuc2VydmljZVJlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3BheW1lbnR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgbGV0IGZlZXMgPSBbXTtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcblxuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXNcbiAgICAgICAgdGhpcy5wYXltZW50RmVlcyA9IGZlZXM7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnRGYWlsdXJlKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICBKU09OLnBhcnNlKHJlcykucGF5bWVudF9mYWlsdXJlX2xpc3QucmV2ZXJzZSgpLmZvckVhY2gocGF5bWVudHMgPT4ge1xuXG4gICAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUucHVzaChwYXltZW50cy5wYXltZW50X2ZhaWx1cmVfaW5pdGlhdGVkKTtcbiAgICAgICAgICBpZiAocGF5bWVudHMucGF5bWVudF9mYWlsdXJlX2Nsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUucHVzaChwYXltZW50cy5wYXltZW50X2ZhaWx1cmVfY2xvc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsbFBheW1lbnRzRmFpbHVyZSA9IHRoaXMuYWxsUGF5bWVudHNGYWlsdXJlLnJldmVyc2UoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IFwiU2VydmVyIGVycm9yXCJcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0IGlzQ2FyZFBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm1ldGhvZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IGlzVGVsZXBob255UGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0uY2hhbm5lbCA9PT0gJ3RlbGVwaG9ueSc7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1BheW1lbnRMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LWxpc3QnO1xuICB9XG4gIGdldE92ZXJQYXltZW50VmFsdWUoKSB7XG4gICAgbGV0IGZlZXNPdmVyUGF5bWVudCA9IDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICBmZWVzT3ZlclBheW1lbnQgKz0gZmVlLm92ZXJfcGF5bWVudDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVlc092ZXJQYXltZW50ID4gMCA/IGZlZXNPdmVyUGF5bWVudCA6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm92ZXJfcGF5bWVudDtcblxuICB9XG4gIGdvVG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPSAndHJ1ZSc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG4gIGdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNldE9yZGVyRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUmVmcygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlclJlZiA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckNDREV2ZW50cygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlckNDREV2ZW50ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyQ3JlYXRlZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJDcmVhdGVkID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyRGV0YWlsKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyRGV0YWlsID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUGFydHlzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUGFydHkgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJSZW1pc3Npb25Ub3RhbHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckZlZXNUb3RhbHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJGZWVzVG90YWwgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b29yZGVyVG90YWxQYXltZW50c3MoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gZGF0YSk7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgICB9XG5cbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZiAodGhpcy5jaGtJc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZShmZWUpKSB7XG4gICAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgaWYgKHBheW1lbnRHcm91cCAhPT0gbnVsbCAmJiBwYXltZW50R3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzICE9PSBudWxsICYmIHBheW1lbnRHcm91cC5mZWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb2Nlc3NSZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMucGF5bWVudEdyb3VwLmZlZXNbMF07XG4gICAgdGhpcy5mZWVzID0gW3tcbiAgICAgIGlkOiBvYmouaWQsXG4gICAgICBjb2RlOiBvYmouY29kZSxcbiAgICAgIHZlcnNpb246IG9iai52ZXJzaW9uLFxuICAgICAgYXBwb3J0aW9uX2Ftb3VudDogb2JqLmFwcG9ydGlvbl9hbW91bnQsXG4gICAgICBjYWxjdWxhdGVkX2Ftb3VudDogb2JqLmNhbGN1bGF0ZWRfYW1vdW50LFxuICAgICAgdXBkYXRlZF92b2x1bWU6IG9iai51cGRhdGVkX3ZvbHVtZSA/IG9iai51cGRhdGVkX3ZvbHVtZSA6IG9iai52b2x1bWUsXG4gICAgICB2b2x1bWU6IG9iai52b2x1bWUsXG4gICAgICByZWZ1bmRfYW1vdW50OiB0aGlzLmdldE92ZXJQYXltZW50VmFsdWUoKVxuICAgIH1dO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLmNvbnRhY3REZXRhaWxzT2JqLCB0aGlzLmZlZXMsIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZSwgJ1JSMDM3JyxcbiAgICAgIHRoaXMuZ2V0T3ZlclBheW1lbnRWYWx1ZSgpLCAnb3AnKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG4gIGdvdG9BZGRyZXNzUGFnZShub3RlPzogSVJlZnVuZENvbnRhY3REZXRhaWxzKSB7XG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uID0geyBjb250YWN0X2RldGFpbHM6IG5vdGUsIG5vdGlmaWNhdGlvbl90eXBlOiBub3RlLm5vdGlmaWNhdGlvbl90eXBlIH07XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdvdmVyUGF5bWVudEFkZHJlc3NDYXB0dXJlJztcbiAgfVxuICBhZGRSZWZ1bmRGb3JSZW1pc3Npb24ocGF5bWVudDogSVBheW1lbnQsIHJlbWlzc2lvbjogSVJlbWlzc2lvbltdLCBmZWVzOiBhbnkpIHtcbiAgICAvL2lmKCF0aGlzLmNoa0lzSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudCkpIHtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyhwYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXMocGF5bWVudC5yZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhID0+IGRhdGEuY29kZSA9PT0gdGhpcy5yZW1pc3Npb25zWydmZWVfY29kZSddKVswXS5uZXRfYW1vdW50O1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgIC8vfVxuICB9XG5cbiAgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KCkge1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICB9XG4gIGlzc3VlUmVmdW5kKHBheW1lbnRncnA6IElQYXltZW50R3JvdXApIHtcbiAgICBpZiAocGF5bWVudGdycCAhPT0gbnVsbCAmJiBwYXltZW50Z3JwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmNoa0lzSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudGdycC5wYXltZW50c1swXSkpIHtcbiAgICAgICAgaWYgKHBheW1lbnRncnAucGF5bWVudHNbMF0ub3Zlcl9wYXltZW50ID4gMCkge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlcnBheW1lbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudGdycDtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlQ29kZTogc3RyaW5nLCByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10pOiBJUmVtaXNzaW9uIHtcbiAgICBpZiAocmVtaXNzaW9ucyAmJiByZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHJlbWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgIHJldHVybiByZW1pc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGtJc0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcGF5bWVudC5pc3N1ZV9yZWZ1bmQgJiYgcGF5bWVudC5yZWZ1bmRfZW5hYmxlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGtJc0FkZFJlZnVuZEJ0bkVuYWJsZShyZW1pc3Npb246IElSZW1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAocmVtaXNzaW9uICE9PSBudWxsICYmIHJlbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVtaXNzaW9uLmFkZF9yZWZ1bmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuXG4gIGNhbkl0QmVSZWZ1bmRlZChyZW1pc3Npb246IElSZW1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAocmVtaXNzaW9uICE9PSBudWxsICYmIHJlbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVtaXNzaW9uLmFkZF9yZWZ1bmQgPT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHJlbWlzc2lvbi5vdmVyYWxsX2JhbGFuY2UgPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGtJc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZShmZWU6IElGZWUpOiBib29sZWFuIHtcbiAgICBpZiAoZmVlICE9PSBudWxsICYmIGZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFkZF9yZW1pc3Npb24gJiYgZmVlLnJlbWlzc2lvbl9lbmFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICBzZWxlY3RQeW1lbnRPcHRpb24ocGF5bWVudFR5cGU6IHN0cmluZykge1xuICAgIHRoaXMucGF5bWVudFR5cGUgPSBwYXltZW50VHlwZTtcbiAgICB0aGlzLmlzQ29udGludWVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICB9XG4gIGNvbnRpbnVlUGF5bWVudChwYXltZW50Z3JwOiBJUGF5bWVudEdyb3VwKSB7XG5cbiAgICBpZiAodGhpcy5wYXltZW50VHlwZSA9PT0gJ29wJykge1xuICAgICAgdGhpcy5pc0Z1bGx5UmVmdW5kID0gZmFsc2VcbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBheW1lbnRUeXBlID09PSAnZnAnKSB7XG4gICAgICB0aGlzLmlzRnVsbHlSZWZ1bmQgPSB0cnVlXG4gICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRncnA7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9IFwiXCI7XG4gICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICB0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTtcbiAgICB9XG4gIH1cbiAgZ290b1BheW1lbnRTZWxlY3RQYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdvdmVycGF5bWVudCc7XG4gIH1cbiAgZ2V0Q29udGFjdERldGFpbHMob2JqOiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICB0aGlzLmNvbnRhY3REZXRhaWxzT2JqID0gb2JqO1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMuZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUodGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0pO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcic7XG5cbiAgfVxuXG4gIHJlc2V0T3JkZXJEYXRhKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWYobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDcmVhdGVkKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJEZXRhaWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJUb3RhbFBheW1lbnRzKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJSZW1pc3Npb25Ub3RhbChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRmVlc1RvdGFsKG51bGwpO1xuICB9XG5cbiAgZ29Ub1BheW1lbnRGYWlsdWVQYWdlKHBheW1lbnQ6IGFueSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdwYXltZW50LWZhaWx1cmUnO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXltZW50c1N0YXR1cyA9IHBheW1lbnQ7XG4gIH1cbiAgZ29CYWNrVG9QYXltZW50VmlldyhldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUocGF5bWVudDogSVBheW1lbnQpOiB2b2lkIHtcblxuICAgIGlmIChwYXltZW50ID09IHVuZGVmaW5lZCB8fCBwYXltZW50ID09IG51bGwpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbnN0cnVjdGlvblR5cGUgPSAnVGVtcGxhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvbkluc3RydWN0aW9uVHlwZShwYXltZW50LmNoYW5uZWwsIHBheW1lbnQubWV0aG9kKTtcbiAgICB9XG5cbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXcgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1zZWN0aW9uXCI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheW1lbnR2aWV3JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbjxkaXYgY2xhc3M9XCJnb3Z1ay13aWR0aC1jb250YWluZXJcIj5cblxuICA8ZGl2ICBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3RcIj5cbiAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGlua1wiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyIGdvdnVrLSEtcGFkZGluZy10b3AtMFwiIGlkPVwibWFpbi1jb250ZW50XCIgcm9sZT1cIm1haW5cIj5cblxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBQYXltZW50IGRldGFpbHMgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1hbGlnbm1lbnRcIiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXVwiPlxuXG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1BBWU1FTlRERVRBSUxTJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZSBnb3Z1ay0hLW1hcmdpbi10b3AtMFwiPlBheW1lbnQgZGV0YWlsczwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cblxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlNlcnZpY2UgcmVxdWVzdCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgc2VydmljZVJlZmVyZW5jZSAgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LnJlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhbW91bnQ8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+wqN7eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm92ZXJfcGF5bWVudCA+IDBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+T3ZlciBwYXltZW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPsKje3sgZ2V0T3ZlclBheW1lbnRWYWx1ZSgpIHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdICYmIHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5leHRlcm5hbF9yZWZlcmVuY2VcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhc3NldCBudW1iZXIoRENOKTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5kb2N1bWVudF9jb250cm9sX251bWJlciB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgJiYgIXBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmV4dGVybmFsX3JlZmVyZW5jZVwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5CYW5rZWQgZGF0ZTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5iYW5rZWRfZGF0ZSB8IGRhdGU6J2RkIE1NTSB5eXl5JyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkdvdlBheSBUcmFuc2FjdGlvbiBJRDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5leHRlcm5hbF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgbWV0aG9kPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13IHRleHQtdHJhbnNmb3JtXCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm1ldGhvZCA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCdcIiA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+VHlwZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICE9PSAnY2FyZCdcIj5DcmVkaXQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm1ldGhvZCA9PT0gJ2NhcmQnXCI+Q2FyZDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13IHRleHQtdHJhbnNmb3JtXCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uY2hhbm5lbCAgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICE9PSAnY2FyZCdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5tZXRob2QgfX08L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kID09PSAnY2FyZCdcIj5DQVJEPC90ZD5cbiAgICAgICAgPC90cj4gLS0+XG4gICAgICAgIDwhLS0gPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uY2hhbm5lbCAhPT0gJ3RlbGVwaG9ueSdcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICA8L3RyPiAtLT5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucGF5bWVudF9hbGxvY2F0aW9uWzBdICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5BbGxvY2F0b24gc3RhdHVzPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucGF5bWVudF9hbGxvY2F0aW9uWzBdPy5hbGxvY2F0aW9uX3N0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0ub3JnYW5pc2F0aW9uX25hbWVcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QQkEgYWNjb3VudCBuYW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ub3JnYW5pc2F0aW9uX25hbWUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdLmFjY291bnRfbnVtYmVyXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIG51bWJlcjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFjY291bnRfbnVtYmVyIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXS5jdXN0b21lcl9yZWZlcmVuY2VcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5DdXN0b21lciBpbnRlcm5hbCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5jdXN0b21lcl9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxkaXY+XG4gICAgICAgICAgICA8IS0tIFN0YXR1cyBoaXN0b3JpZXMgLS0+XG4gICAgICA8Y2NwYXktcGF5bWVudC1zdGF0dXNlcyAqbmdJZj1cImlzU3RhdHVzQWxsb2NhdGVkXCIgW2lzVGFrZVBheW1lbnRdPVwiaXNUYWtlUGF5bWVudFwiPjwvY2NwYXktcGF5bWVudC1zdGF0dXNlcz5cbiAgICAgIDwvZGl2PlxuICAgICA8ZGl2IGNsYXNzPVwicmVtaXNzaW9uXCI+XG4gICAgICAgIDxidXR0b24gIFtkaXNhYmxlZF09XCIhY2hrSXNJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdKVwiICAoY2xpY2spPVwiaXNzdWVSZWZ1bmQocGF5bWVudEdyb3VwKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+SXNzdWUgcmVmdW5kPC9idXR0b24+XG4gICAgIDwvZGl2PlxuPGRpdiAqbmdJZj1cIklTUEFZTUVOVFNUQVRVU0VOQUJMRURcIj5cbiAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5EaXNwdXRlZCBwYXltZW50IGhpc3Rvcnk8L2gyPlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgPHRoPkFtb3VudDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5EYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoPlBheW1lbnQgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgICAgICAgPHRoPkV2ZW50PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+IFxuICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIiFlcnJvck1zZyAmJiBhbGxQYXltZW50c0ZhaWx1cmUubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzRmFpbHVyZVwiPlxuICAgICAgICAgICAgICA8dGQ+e3sgcGF5bWVudC5zdGF0dXMgfCBjYXBpdGFsaXplIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkPsKje3sgcGF5bWVudC5kaXNwdXRlZF9hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyhwYXltZW50LnJlcHJlc2VudG1lbnRfZGF0ZSA/IHBheW1lbnQucmVwcmVzZW50bWVudF9kYXRlIDogcGF5bWVudC5mYWlsdXJlX2V2ZW50X2RhdGVfdGltZSkgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyBwYXltZW50LnBheW1lbnRfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkID57eyBwYXltZW50LmZhaWx1cmVfdHlwZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvVG9QYXltZW50RmFpbHVlUGFnZShwYXltZW50KVwiPlNob3cgZGV0YWlsPC9hPlxuXG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPHRib2R5ICAqbmdJZj1cImVycm9yTXNnIHx8IGFsbFBheW1lbnRzRmFpbHVyZS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+IE5vIGRpc3B1dGVkIHBheW1lbnQgaGlzdG9yeSBhdmFpbGFibGUuIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8YnIvPlxuICAgIDxici8+XG4gIDwvZGl2PlxuICAgICAgXG4gICAgIDxkaXYgICpuZ0lmPVwiY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cClcIj5cbiAgICAgIDxkaXYgICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICA8YnIvPlxuICAgICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5GZWUgYW5kIHJlbWlzc2lvbiBkZXRhaWxzPC9oMj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+QXBwbGljYXRpb24gZm9yIHt7IGZlZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+RmVlIGNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBmZWU/LmNvZGUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9ucyAmJiAhaXNUdXJuT2ZmIH1cIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RyLWJvcmRlcic6ICFmZWUuYXBwb3J0aW9uX2Ftb3VudCAmJiAhZmVlLnJlbWlzc2lvbnMgJiYgIWlzVHVybk9mZn1cIj7Co3t7IGZlZT8uY2FsY3VsYXRlZF9hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5hcHBvcnRpb25fYW1vdW50XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13IHRyLWJvcmRlclwiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPkFsbG9jYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPsKje3sgZmVlPy5hcHBvcnRpb25fYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhY2hrSXNBZGRSZW1pc3Npb25CdG5FbmFibGUoZmVlKVwiIChjbGljayk9XCJhZGRSZW1pc3Npb24oZmVlKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IEFkZCByZW1pc3Npb248L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmRlci1jbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+SGVscCB3aXRoIGZlZXMgb3IgcmVtaXNzaW9uIGNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjcgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5SZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkZlZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCAgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdCByZWZ1bmRCdG5cIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICAqbmdGb3I9XCJsZXQgcmVtaXNzaW9uIG9mIHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uPy5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbj8ucmVtaXNzaW9uX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24/LmZlZV9jb2RlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbj8uaHdmX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgcmVmdW5kQnRuIHdoaXRlc3BhY2UtaW5oZXJpdFwiICA+XG4gICAgICAgICAgICAgICA8YnV0dG9uICBbZGlzYWJsZWRdPVwiIWNhbkl0QmVSZWZ1bmRlZChyZW1pc3Npb24pXCIgKGNsaWNrKT1cImFkZFJlZnVuZEZvclJlbWlzc2lvbihwYXltZW50R3JvdXAucGF5bWVudHNbMF0scmVtaXNzaW9uLHBheW1lbnRHcm91cC5mZWVzKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IEFkZCByZWZ1bmQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG5cblxuICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj48L2Rpdj5cblxuICAgPGRpdiAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWFyLTE3XCIgPk5vIGhlbHAgd2l0aCBmZWVzIG9yIHJlbWlzc2lvbnMuPC9zcGFuPlxuICAgPC9kaXY+XG5cbiAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbWFpbj5cbjwvZGl2PlxuXG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkcmVtaXNzaW9uJyAmJiBmZWVJZCAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbjxjY3BheS1hZGQtcmVtaXNzaW9uIFxuW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuW2lzU3RyYXRlZ2ljRml4RW5hYmxlXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcblt2aWV3Q29tcFN0YXR1c109IFwidmlld1N0YXR1c1wiXG5bZmVlXT1cImZlZUlkXCJcbltwYXltZW50XSA9IFwicGF5bWVudFwiXG5bb3JkZXJTdGF0dXNdID1cInBheW1lbnRHcm91cC5wYXltZW50c1swXS5zdGF0dXNcIlxuW3BhaWRBbW91bnRdPSBcInBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnRcIlxuW2lzUmVmdW5kUmVtaXNzaW9uXT1cImlzUmVmdW5kUmVtaXNzaW9uXCJcbltjYXNlVHlwZV09XCJjYXNlVHlwZVwiXG5bcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVwiXG5baXNGcm9tUGF5bWVudERldGFpbFBhZ2VdID0gXCJ0cnVlXCJcbltjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIlxuW29yZGVyRmVlc1RvdGFsXSA9IFwib3JkZXJGZWVzVG90YWxcIlxuW29yZGVyVG90YWxQYXltZW50c10gPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG5bb3JkZXJSZW1pc3Npb25Ub3RhbF0gPSBcIm9yZGVyUmVtaXNzaW9uVG90YWxcIlxuW29yZGVyUmVmXSA9IFwib3JkZXJSZWZcIlxuW29yZGVyQ3JlYXRlZF0gPSBcIm9yZGVyQ3JlYXRlZFwiXG5bb3JkZXJQYXJ0eV0gPSBcIm9yZGVyUGFydHlcIlxuW29yZGVyQ0NERXZlbnRdID0gXCJvcmRlckNDREV2ZW50XCJcbltvcmRlckRldGFpbF0gPSBcIm9yZGVyRGV0YWlsXCJcbltMT0dHRURJTlVTRVJST0xFU10gPSBcIkxPR0dFRElOVVNFUlJPTEVTXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJyAmJiBwYXltZW50ICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnQnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZScgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuXG48Y2NwYXktYWRkLXJlbWlzc2lvblxuW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuW2lzU3RyYXRlZ2ljRml4RW5hYmxlXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcblt2aWV3Q29tcFN0YXR1c109IFwidmlld1N0YXR1c1wiXG5bcGF5bWVudF09XCJwYXltZW50XCJcbltvcmRlclN0YXR1c10gPVwib3JkZXJTdGF0dXNcIlxuW3BhaWRBbW91bnRdPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG5baXNSZWZ1bmRSZW1pc3Npb25dPVwiaXNSZWZ1bmRSZW1pc3Npb25cIlxuW2Nhc2VUeXBlXT1cImNhc2VUeXBlXCJcbltmZWVhbW91bnRdPVwicmVtaXNzaW9uRmVlQW10XCJcbltyZW1pc3Npb25dID0gXCJyZW1pc3Npb25zXCJcbltpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VdPVwiZmFsc2VcIlxuW3BheW1lbnRHcm91cFJlZl09XCJwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcIlxuW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiXG5bb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG5bb3JkZXJUb3RhbFBheW1lbnRzXSA9IFwib3JkZXJUb3RhbFBheW1lbnRzXCJcbltvcmRlclJlbWlzc2lvblRvdGFsXSA9IFwib3JkZXJSZW1pc3Npb25Ub3RhbFwiXG5bb3JkZXJSZWZdID0gXCJvcmRlclJlZlwiXG5bb3JkZXJDcmVhdGVkXSA9IFwib3JkZXJDcmVhdGVkXCJcbltvcmRlclBhcnR5XSA9IFwib3JkZXJQYXJ0eVwiXG5bb3JkZXJDQ0RFdmVudF0gPSBcIm9yZGVyQ0NERXZlbnRcIlxuW29yZGVyRGV0YWlsXSA9IFwib3JkZXJEZXRhaWxcIlxuW0xPR0dFRElOVVNFUlJPTEVTXSA9IFwiTE9HR0VESU5VU0VSUk9MRVNcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZCcgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudCcgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVyUGF5bWVudEFkZHJlc3NDYXB0dXJlJyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50Y2hlY2thbmRhbnN3ZXInXCI+XG4gICAgPGNjcGF5LWFkZC1yZW1pc3Npb24gXG4gICAgW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuICAgIFtpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gICAgW3BheW1lbnRdID0gJ3BheW1lbnRHcm91cC5wYXltZW50c1swXSdcbiAgICBbdmlld0NvbXBTdGF0dXNdPSBcInZpZXdTdGF0dXNcIlxuICAgIFtvcmRlclN0YXR1c10gPVwicGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnN0YXR1c1wiXG4gICAgW3BhaWRBbW91bnRdPSBcInBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnRcIlxuICAgIFtpc1JlZnVuZFJlbWlzc2lvbl09XCJpc1JlZnVuZFJlbWlzc2lvblwiXG4gICAgW2Nhc2VUeXBlXT1cImNhc2VUeXBlXCJcbiAgICBbaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXT1cImlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZVwiXG4gICAgW2lzRnJvbVBheW1lbnREZXRhaWxQYWdlXSA9IFwiaXNGcm9tUGF5bWVudERldGFpbFBhZ2VcIlxuICAgIFtwYXltZW50R3JvdXBSZWZdPVwicGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXCJcbiAgICBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCJcbiAgICBbb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG4gICAgW29yZGVyVG90YWxQYXltZW50c10gPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG4gICAgW29yZGVyUmVtaXNzaW9uVG90YWxdID0gXCJvcmRlclJlbWlzc2lvblRvdGFsXCJcbiAgICBbb3JkZXJSZWZdID0gXCJvcmRlclJlZlwiXG4gICAgW29yZGVyQ3JlYXRlZF0gPSBcIm9yZGVyQ3JlYXRlZFwiXG4gICAgW29yZGVyUGFydHldID0gXCJvcmRlclBhcnR5XCJcbiAgICBbb3JkZXJDQ0RFdmVudF0gPSBcIm9yZGVyQ0NERXZlbnRcIlxuICAgIFtvcmRlckRldGFpbF0gPSBcIm9yZGVyRGV0YWlsXCJcbiAgICBbZmVlc10gPVwicGF5bWVudEZlZXNcIlxuICAgIFtpc0Z1bGx5UmVmdW5kXSA9IFwiaXNGdWxseVJlZnVuZFwiXG4gICAgW0xPR0dFRElOVVNFUlJPTEVTXSA9IFwiTE9HR0VESU5VU0VSUk9MRVNcIj5cbiAgICBcbiAgPjwvY2NwYXktYWRkLXJlbWlzc2lvbj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdvcmRlci1mdWxsLXZpZXcnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnQnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZScgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuICA8Y2NwYXktc2VydmljZS1yZXF1ZXN0XG4gIFt2aWV3U3RhdHVzXSA9IFwidmlld1N0YXR1c1wiXG4gIFtvcmRlclJlZl0gPSBcIm9yZGVyUmVmXCJcbiAgW29yZGVyU3RhdHVzXSA9IFwib3JkZXJTdGF0dXNcIlxuICBbb3JkZXJDcmVhdGVkXSA9IFwib3JkZXJDcmVhdGVkXCJcbiAgW29yZGVyUGFydHldID0gXCJvcmRlclBhcnR5XCJcbiAgW29yZGVyQ0NERXZlbnRdID0gXCJvcmRlckNDREV2ZW50XCJcbiAgW29yZGVyRGV0YWlsXSA9IFwib3JkZXJEZXRhaWxcIlxuICBbTE9HR0VESU5VU0VSUk9MRVNdID0gXCJMT0dHRURJTlVTRVJST0xFU1wiXG4gIFt0YWtlUGF5bWVudF0gPSBcImlzVGFrZVBheW1lbnRcIlxuICBbY2NkQ2FzZU51bWJlcl0gPSBcImNjZENhc2VOdW1iZXJcIlxuICBbb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG4gIFtvcmRlclRvdGFsUGF5bWVudHNdID0gXCJvcmRlclRvdGFsUGF5bWVudHNcIlxuICBbb3JkZXJSZW1pc3Npb25Ub3RhbF0gPSBcIm9yZGVyUmVtaXNzaW9uVG90YWxcIlxuICBbaXNTZXJ2aWNlUmVxdWVzdF0gPSBcImlzU2VydmljZVJlcXVlc3RcIlxuICAoZ29Ub1NlcnZpY2VScXVlc3RDb21wb25lbnQpID0gXCJnb1RvU2VydmljZVJlcXVlc3RQYWdlKClcIlxuPlxuPC9jY3BheS1zZXJ2aWNlLXJlcXVlc3Q+XG5cbjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwib3Zlci1wYXltZW50XCI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld0NvbXBTdGF0dXMgPT09ICdvdmVycGF5bWVudCdcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdPVkVSUEFZTUVOVFBBR0UnPiBcbiAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPklzc3VlIHJlZnVuZDwvaDE+XG4gIDxoMSBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+Q2FzZSByZWZlcmVuY2U6IHt7Y2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX08L2gxPlxuICA8c3BhbiBpZD1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtaGludCBnb3Z1ay1mb250MTlweFwiIGNsYXNzPVwiZm9ybS1oaW50XCI+XG4gICAgUGF5bWVudCByZWZlcmVuY2U6IHt7cGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucmVmZXJlbmNlfX1cbiAgPC9zcGFuPlxuPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiZ292dWstZmllbGRzZXRcIj5cbiAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1sXCI+XG4gICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlNlbGVjdCBwYXltZW50IHRvIHJlZnVuZDwvaDE+XG4gICAgPC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc1wiIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cIm92ZXItcGF5bWVudFwiIG5hbWU9XCJvdmVyLXBheW1lbnRcIiB0eXBlPVwicmFkaW9cIiAoY2xpY2spPVwic2VsZWN0UHltZW50T3B0aW9uKCdvcCcpXCIgdmFsdWU9XCJvcFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWZvbnQxOXB4XCIgZm9yPVwid2hlcmUtZG8teW91LWxpdmVcIj5cbiAgICAgICAgICBPdmVyIHBheW1lbnQgwqN7e2dldE92ZXJQYXltZW50VmFsdWUoKSB8IG51bWJlcjonLjInfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJmdWxsLXBheW1lbnRcIiBuYW1lPVwib3Zlci1wYXltZW50XCIgdHlwZT1cInJhZGlvXCIgKGNsaWNrKT1cInNlbGVjdFB5bWVudE9wdGlvbignZnAnKVwiIHZhbHVlPVwiZnBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1mb250MTlweFwiIGZvcj1cIndoZXJlLWRvLXlvdS1saXZlLTJcIj5cbiAgICAgICAgICBGdWxsIHBheW1lbnQgwqN7e3BheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFtb3VudCB8IG51bWJlcjonLjInfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBvdmVyLXBheW1lbnQtYWxpZ25tZW50IGdvdnVrLWZvbnQxOXB4XCJcbiAgICAgIChjbGljayk9XCJnb1RvUGF5bWVudFZpZXdDb21wb25lbnQoKVwiPiBQcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBcbiAgICAgIChjbGljayk9XCJjb250aW51ZVBheW1lbnQocGF5bWVudEdyb3VwKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDb250aW51ZUJ0bkRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0naXNDb250aW51ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xIGdvdnVrLWZvbnQxOXB4XCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xIGdvdnVrLWZvbnQxOXB4XCInXG4gICAgICBjbGFzcz1cImdvdnVrLWJ1dHRvblwiPiBDb250aW51ZTwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdDb21wU3RhdHVzID09PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSdcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdPVkVSUEFZTUVOVEFERFJFU1NDQVBUVVJFUEFHRSc+ICAgICAgXG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPklzc3VlIHJlZnVuZDwvaDE+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbSBnb3Z1ay1mb250MTlweFwiPkNhc2UgcmVmZXJlbmNlOiB7e2NjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9oMj5cbiAgPHNwYW4gaWQ9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsLWhpbnRcIiBjbGFzcz1cImdvdnVrLWhpbnQgZ292dWstZm9udDE5cHhcIj5cbiAgICBQYXltZW50IHJlZmVyZW5jZToge3twYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5yZWZlcmVuY2V9fVxuICA8L3NwYW4+XG48Y2NwYXktY29udGFjdC1kZXRhaWxzIFxuW2FkZHJlc3NPYmpdID0gbm90aWZpY2F0aW9uXG4oYXNzaWduQ29udGFjdERldGFpbHMpPVwiZ2V0Q29udGFjdERldGFpbHMoJGV2ZW50KVwiXG4ocmVkaXJlY3RUb0lzc3VlUmVmdW5kKT1cImdvdG9QYXltZW50U2VsZWN0UGFnZSgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuPHA+XG4gICAgPGEgKGNsaWNrKT1cImdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgIENhbmNlbFxuICAgIDwvYT5cbjwvcD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld0NvbXBTdGF0dXMgPT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0FERFJFRlVOREZPUlJFTUlTU0lPTic+IFxuICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICBcbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj4gQ2hlY2sgeW91ciBhbnN3ZXJzPC9oMT5cbiAgPC9kaXY+XG4gIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+IHt7cGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZX19IDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlBheW1lbnQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7cGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmFtb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7cGF5bWVudEdyb3VwPy5mZWVzWzBdPy5uZXRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlJlZnVuZCBhbW91bnQ8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tnZXRPdmVyUGF5bWVudFZhbHVlKCkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVmdW5kIHJlYXNvbjwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5PdmVyIHBheW1lbnQ8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+U2VuZCB0bzwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tvcmRlclBhcnR5fX08L3RkPlxuICAgIDwvdHI+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+U2VuZCB2aWE8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb250YWN0RGV0YWlsc09iaj8ubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCdcIiBjbGFzcz1cImNvbnRhY3REZXRhaWxzLXdpZHRoXCI+XG4gICAgICAgICAgPHN0cm9uZz5FbWFpbDwvc3Ryb25nPlxuICAgICAgICAgIDxici8+XG4gICAgICAgICAge3tjb250YWN0RGV0YWlsc09iaj8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGFjdERldGFpbHNPYmo/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnTEVUVEVSJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGhcIj5cbiAgICAgICAgICA8c3Ryb25nPlBvc3Q8L3N0cm9uZz5cbiAgICAgICAgICA8YnIvPlxuICAgICAgICAgIHt7Y29udGFjdERldGFpbHNPYmo/LmFkZHJlc3NfbGluZT8udHJpbSgpfX0mbmJzcDt7e2NvbnRhY3REZXRhaWxzT2JqPy5jaXR5Py50cmltKCl9fSZuYnNwO3t7Y29udGFjdERldGFpbHNPYmo/LmNvdW50eT8udHJpbSgpfX0mbmJzcDt7e2NvbnRhY3REZXRhaWxzT2JqPy5jb3VudHJ5Py50cmltKCl9fSZuYnNwO3t7Y29udGFjdERldGFpbHNPYmo/LnBvc3RhbF9jb2RlPy50cmltKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGEgKGNsaWNrKT1cImdvdG9BZGRyZXNzUGFnZShjb250YWN0RGV0YWlsc09iailcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiA+Q2hhbmdlPC9hPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuXG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+Tm90aWZpY2F0aW9uPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3t0ZW1wbGF0ZUluc3RydWN0aW9uVHlwZX19XG4gICAgICAgICAgPGEgKm5nSWY9XCIhbm90aWZpY2F0aW9uUHJldmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiAoY2xpY2spPVwic2hvd05vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgUHJldmlld1xuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YSAqbmdJZj1cIm5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cImhpZGVOb3RpZmljYXRpb25QcmV2aWV3KClcIj5cbiAgICAgICAgICAgIEhpZGUgUHJldmlld1xuICAgICAgICAgIDwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90YWJsZT5cblxuICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIFxuICBbcGF5bWVudF09XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF1cIiBcbiAgW2NvbnRhY3REZXRhaWxzXT1cImNvbnRhY3REZXRhaWxzT2JqXCJcbiAgW3JlZnVuZFJlYXNvbl09XCInUlIwMzcnXCJcbiAgW3JlZnVuZEFtb3VudF09XCJnZXRPdmVyUGF5bWVudFZhbHVlKClcIj48L2FwcC1ub3RpZmljYXRpb24tcHJldmlldz5cblxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBvdmVyLXBheW1lbnQtYWxpZ25tZW50IGdvdnVrLWZvbnQxOXB4XCIgKGNsaWNrKT1cImdvdG9BZGRyZXNzUGFnZShjb250YWN0RGV0YWlsc09iailcIj5QcmV2aW91czwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICBbbmdDbGFzc109J2lzQ29udGludWVCdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMSBnb3Z1ay1mb250MTlweFwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMSBnb3Z1ay1mb250MTlweFwiJ1xuICAoY2xpY2spPVwicHJvY2Vzc1JlZnVuZCgpXCI+XG4gICAgU3VibWl0IHJlZnVuZFxuICA8L2J1dHRvbj5cbiAgPHA+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWxpbmsgZ292dWstZm9udDE5cHhcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgPC9hPlxuICA8L3A+XG5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdSRVRST1JFTUlTU0lPTlJFRlVORENPTkZJUk1BVElPTlBBR0UnPiBcbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IHBhZ2VzaXplXCI+XG4gICAgPGRpdiA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF92aWV3X3RpdGxlXCI+XG4gICAgICAgICAgUmVmdW5kIHN1Ym1pdHRlZFxuICAgICAgICA8L2gxPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5IHdoaXRlXCI+PHN0cm9uZyBjbGFzcz1cIndoaXRlXCI+UmVmdW5kIHJlZmVyZW5jZToge3tyZWZ1bmRSZWZlcmVuY2V9fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgPC9kaXY+XG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5XaGF0IGhhcHBlbnMgbmV4dDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgQSByZWZ1bmQgcmVxdWVzdCBmb3Ige3tyZWZ1bmRBbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgd2lsbCBiZSBwYXNzZWQgdG8gYSB0ZWFtIGxlYWRlciB0byBhcHByb3ZlLlxuICAgICAgPC9wPlxuICAgIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub0Nhc2VUcmFuc2F0aW9uUGFnZSgkZXZlbnQpXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHBvaW50ZXJcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgUmV0dXJuIHRvIGNhc2VcbiAgPC9hPlxuICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAncGF5bWVudC1mYWlsdXJlJ1wiPlxuICA8ZGl2IGNsYXNzPVwicGF5bWVudC1mYWlsdXJlLWFsaWdubWVudFwiPlxuICAgIDxkaXYgIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvQmFja1RvUGF5bWVudFZpZXcoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYmFjay1saW5rXCI+QmFjazwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvb2w+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2UgZ292dWstIS1tYXJnaW4tdG9wLTBcIj5GYWlsdXJlIGV2ZW50IGRldGFpbHM8L2gxPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRhYmxlPlxuICAgICAgPHRib2R5PlxuXG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5GYWlsdXJlIHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3JlZmVyZW5jZX19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5GYWlsdXJlIHJlYXNvbjwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3JlYXNvbn19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5wYXltZW50X3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5QYXltZW50IGFtb3VudDwvdGQ+XG4gICAgICAgICAgPHRkPiDCo3t7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cblxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+RGlzcHV0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQ+XHTCo3t7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5kaXNwdXRlZF9hbW91bnQgIHwgbnVtYmVyOicuMid9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+QWRkaXRpb25hbCBpbmZvcm1hdGlvbjwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5hZGRpdGlvbmFsX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+RmFpbHVyZSB0eXBlPC90ZD5cbiAgICAgICAgPHRkPlx0e3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3R5cGUgfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPkZhaWx1cmUgZXZlbnQgZGF0ZSBhbmQgdGltZTwvdGQ+XG4gICAgICAgIDx0ZD4ge3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX2V2ZW50X2RhdGVfdGltZSB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRQYXltZW50c1N0YXR1cy5oYXNfYW1vdW50X2RlYml0ZWRcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPkhhcyBkaXNwdXRlZCBhbW91bnQgZGViaXRlZDwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5oYXNfYW1vdW50X2RlYml0ZWR9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1c1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+U3RhdHVzIGZvbGxvd2luZyByZXByZXNlbnRhdGlvbiBvZiBwYXltZW50PC90ZD5cbiAgICAgICAgPHRkPlx0e3soc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1cyA9PT0gJ1llcycgfHwgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1cyA9PT0gJ3llcycpID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkUGF5bWVudHNTdGF0dXMucmVwcmVzZW50bWVudF9kYXRlXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5EYXRlIHBheW1lbnQgcmVwcmVzZW50ZWQ8L3RkPlxuICAgICAgICA8dGQ+XHR7e3NlbGVjdGVkUGF5bWVudHNTdGF0dXMucmVwcmVzZW50bWVudF9kYXRlICB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG5cbiAgICA8ZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFLckYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFbkYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1B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b25lbnQsIGZvcndhcmRSZWYsIEluamVjdCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BheW1lbnRWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7SUZlZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtJUmVtaXNzaW9ufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHtQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb259IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7SVBheW1lbnRGYWlsdXJlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50RmFpbHVyZSc7XG5pbXBvcnQge09yZGVyc2xpc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtJUmVmdW5kQ29udGFjdERldGFpbHN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZENvbnRhY3REZXRhaWxzJztcbmltcG9ydCB7QWRkUmVtaXNzaW9uQ29tcG9uZW50fSBmcm9tICcuLi9hZGQtcmVtaXNzaW9uL2FkZC1yZW1pc3Npb24uY29tcG9uZW50JztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtTdGF0dXNIaXN0b3J5Q29tcG9uZW50fSBmcm9tICcuLi9zdGF0dXMtaGlzdG9yeS9zdGF0dXMtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHtTZXJ2aWNlUmVxdWVzdENvbXBvbmVudH0gZnJvbSAnLi4vc2VydmljZS1yZXF1ZXN0L3NlcnZpY2UtcmVxdWVzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtDb250YWN0RGV0YWlsc0NvbXBvbmVudH0gZnJvbSAnLi4vY29udGFjdC1kZXRhaWxzL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtOb3RpZmljYXRpb25QcmV2aWV3Q29tcG9uZW50fSBmcm9tICcuLi9ub3RpZmljYXRpb24tcHJldmlldy9ub3RpZmljYXRpb24tcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtDY2RIeXBoZW5zUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMvY2NkLWh5cGhlbnMucGlwZSc7XG5pbXBvcnQge0NhcGl0YWxpemVQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9jYXBpdGFsaXplLnBpcGUnO1xuaW1wb3J0IHR5cGUgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BheW1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BheW1lbnQtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdQQVlNRU5UX1ZJRVcnLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQYXltZW50Vmlld0NvbXBvbmVudCkgfV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQWRkUmVtaXNzaW9uQ29tcG9uZW50KSxcbiAgICBTdGF0dXNIaXN0b3J5Q29tcG9uZW50LCBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VSZXF1ZXN0Q29tcG9uZW50KSxcbiAgICBDb250YWN0RGV0YWlsc0NvbXBvbmVudCxcbiAgICBOb3RpZmljYXRpb25QcmV2aWV3Q29tcG9uZW50LFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIENhcGl0YWxpemVQaXBlXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNUYWtlUGF5bWVudDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FzZVR5cGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG9yZGVyUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCkgTE9HR0VESU5VU0VSUk9MRVM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBJU1BBWU1FTlRTVEFUVVNFTkFCTEVEOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyUGFydHk6IHN0cmluZztcbiAgQElucHV0KCkgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBASW5wdXQoKSBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyRmVlc1RvdGFsOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9yZGVyUmVtaXNzaW9uVG90YWw6IG51bWJlcjtcbiAgQElucHV0KCkgb3JkZXJEZXRhaWw6IGFueVtdO1xuICBmZWVzOiBhbnk7XG4gIGlzRnVsbHlSZWZ1bmQ6IGJvb2xlYW47XG4gIEBJbnB1dChcImlzU2VydmljZVJlcXVlc3RcIikgaXNTZXJ2aWNlUmVxdWVzdDogc3RyaW5nO1xuICBlcnJvck1zZzogc3RyaW5nO1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIGZlZUlkOiBJRmVlO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCddO1xuICByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10gPSBbXTtcbiAgYWxsUGF5bWVudHNGYWlsdXJlOiBJUGF5bWVudEZhaWx1cmVbXSA9IFtdO1xuICBzZWxlY3RlZFBheW1lbnRzU3RhdHVzOiBJUGF5bWVudEZhaWx1cmU7XG4gIHJlbWlzc2lvbkZlZUFtdDogbnVtYmVyO1xuICBpc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZTogYm9vbGVhbjtcbiAgc2VydmljZVJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIGlzRnJvbVBheW1lbnREZXRhaWxQYWdlOiBib29sZWFuO1xuICBwYXltZW50RmVlczogSUZlZVtdO1xuICBwYXltZW50VHlwZTogc3RyaW5nO1xuICBpc0NvbnRpbnVlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBjb250YWN0RGV0YWlsc09iajogSVJlZnVuZENvbnRhY3REZXRhaWxzXG4gIG5vdGlmaWNhdGlvbjogYW55O1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlOiBzdHJpbmc7XG4gIG5vdGlmaWNhdGlvblByZXZpZXc6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIEBJbmplY3QoJ1BBWU1FTlRfTElCJykgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuZGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVI7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuc2VydmljZVJlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3BheW1lbnR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgbGV0IGZlZXMgPSBbXTtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcblxuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXNcbiAgICAgICAgdGhpcy5wYXltZW50RmVlcyA9IGZlZXM7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnRGYWlsdXJlKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICBKU09OLnBhcnNlKHJlcykucGF5bWVudF9mYWlsdXJlX2xpc3QucmV2ZXJzZSgpLmZvckVhY2gocGF5bWVudHMgPT4ge1xuXG4gICAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUucHVzaChwYXltZW50cy5wYXltZW50X2ZhaWx1cmVfaW5pdGlhdGVkKTtcbiAgICAgICAgICBpZiAocGF5bWVudHMucGF5bWVudF9mYWlsdXJlX2Nsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUucHVzaChwYXltZW50cy5wYXltZW50X2ZhaWx1cmVfY2xvc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsbFBheW1lbnRzRmFpbHVyZSA9IHRoaXMuYWxsUGF5bWVudHNGYWlsdXJlLnJldmVyc2UoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgdGhpcy5hbGxQYXltZW50c0ZhaWx1cmUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IFwiU2VydmVyIGVycm9yXCJcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0IGlzQ2FyZFBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm1ldGhvZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IGlzVGVsZXBob255UGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0uY2hhbm5lbCA9PT0gJ3RlbGVwaG9ueSc7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1BheW1lbnRMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LWxpc3QnO1xuICB9XG4gIGdldE92ZXJQYXltZW50VmFsdWUoKSB7XG4gICAgbGV0IGZlZXNPdmVyUGF5bWVudCA9IDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICBmZWVzT3ZlclBheW1lbnQgKz0gZmVlLm92ZXJfcGF5bWVudDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVlc092ZXJQYXltZW50ID4gMCA/IGZlZXNPdmVyUGF5bWVudCA6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm92ZXJfcGF5bWVudDtcblxuICB9XG4gIGdvVG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPSAndHJ1ZSc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG4gIGdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNldE9yZGVyRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUmVmcygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlclJlZiA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckNDREV2ZW50cygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlckNDREV2ZW50ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyQ3JlYXRlZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJDcmVhdGVkID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyRGV0YWlsKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyRGV0YWlsID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUGFydHlzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUGFydHkgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJSZW1pc3Npb25Ub3RhbHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckZlZXNUb3RhbHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJGZWVzVG90YWwgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b29yZGVyVG90YWxQYXltZW50c3MoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gZGF0YSk7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgICB9XG5cbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZiAodGhpcy5jaGtJc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZShmZWUpKSB7XG4gICAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgaWYgKHBheW1lbnRHcm91cCAhPT0gbnVsbCAmJiBwYXltZW50R3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzICE9PSBudWxsICYmIHBheW1lbnRHcm91cC5mZWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb2Nlc3NSZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMucGF5bWVudEdyb3VwLmZlZXNbMF07XG4gICAgdGhpcy5mZWVzID0gW3tcbiAgICAgIGlkOiBvYmouaWQsXG4gICAgICBjb2RlOiBvYmouY29kZSxcbiAgICAgIHZlcnNpb246IG9iai52ZXJzaW9uLFxuICAgICAgYXBwb3J0aW9uX2Ftb3VudDogb2JqLmFwcG9ydGlvbl9hbW91bnQsXG4gICAgICBjYWxjdWxhdGVkX2Ftb3VudDogb2JqLmNhbGN1bGF0ZWRfYW1vdW50LFxuICAgICAgdXBkYXRlZF92b2x1bWU6IG9iai51cGRhdGVkX3ZvbHVtZSA/IG9iai51cGRhdGVkX3ZvbHVtZSA6IG9iai52b2x1bWUsXG4gICAgICB2b2x1bWU6IG9iai52b2x1bWUsXG4gICAgICByZWZ1bmRfYW1vdW50OiB0aGlzLmdldE92ZXJQYXltZW50VmFsdWUoKVxuICAgIH1dO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLmNvbnRhY3REZXRhaWxzT2JqLCB0aGlzLmZlZXMsIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZSwgJ1JSMDM3JyxcbiAgICAgIHRoaXMuZ2V0T3ZlclBheW1lbnRWYWx1ZSgpLCAnb3AnKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG4gIGdvdG9BZGRyZXNzUGFnZShub3RlPzogSVJlZnVuZENvbnRhY3REZXRhaWxzKSB7XG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uID0geyBjb250YWN0X2RldGFpbHM6IG5vdGUsIG5vdGlmaWNhdGlvbl90eXBlOiBub3RlLm5vdGlmaWNhdGlvbl90eXBlIH07XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdvdmVyUGF5bWVudEFkZHJlc3NDYXB0dXJlJztcbiAgfVxuICBhZGRSZWZ1bmRGb3JSZW1pc3Npb24ocGF5bWVudDogSVBheW1lbnQsIHJlbWlzc2lvbjogSVJlbWlzc2lvbltdLCBmZWVzOiBhbnkpIHtcbiAgICAvL2lmKCF0aGlzLmNoa0lzSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudCkpIHtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyhwYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXMocGF5bWVudC5yZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhID0+IGRhdGEuY29kZSA9PT0gdGhpcy5yZW1pc3Npb25zWydmZWVfY29kZSddKVswXS5uZXRfYW1vdW50O1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgIC8vfVxuICB9XG5cbiAgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KCkge1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICB9XG4gIGlzc3VlUmVmdW5kKHBheW1lbnRncnA6IElQYXltZW50R3JvdXApIHtcbiAgICBpZiAocGF5bWVudGdycCAhPT0gbnVsbCAmJiBwYXltZW50Z3JwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmNoa0lzSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudGdycC5wYXltZW50c1swXSkpIHtcbiAgICAgICAgaWYgKHBheW1lbnRncnAucGF5bWVudHNbMF0ub3Zlcl9wYXltZW50ID4gMCkge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlcnBheW1lbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudGdycDtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlQ29kZTogc3RyaW5nLCByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10pOiBJUmVtaXNzaW9uIHtcbiAgICBpZiAocmVtaXNzaW9ucyAmJiByZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHJlbWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgIHJldHVybiByZW1pc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGtJc0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcGF5bWVudC5pc3N1ZV9yZWZ1bmQgJiYgcGF5bWVudC5yZWZ1bmRfZW5hYmxlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGtJc0FkZFJlZnVuZEJ0bkVuYWJsZShyZW1pc3Npb246IElSZW1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAocmVtaXNzaW9uICE9PSBudWxsICYmIHJlbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVtaXNzaW9uLmFkZF9yZWZ1bmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuXG4gIGNhbkl0QmVSZWZ1bmRlZChyZW1pc3Npb246IElSZW1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAocmVtaXNzaW9uICE9PSBudWxsICYmIHJlbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVtaXNzaW9uLmFkZF9yZWZ1bmQgPT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHJlbWlzc2lvbi5vdmVyYWxsX2JhbGFuY2UgPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGtJc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZShmZWU6IElGZWUpOiBib29sZWFuIHtcbiAgICBpZiAoZmVlICE9PSBudWxsICYmIGZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFkZF9yZW1pc3Npb24gJiYgZmVlLnJlbWlzc2lvbl9lbmFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICBzZWxlY3RQeW1lbnRPcHRpb24ocGF5bWVudFR5cGU6IHN0cmluZykge1xuICAgIHRoaXMucGF5bWVudFR5cGUgPSBwYXltZW50VHlwZTtcbiAgICB0aGlzLmlzQ29udGludWVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICB9XG4gIGNvbnRpbnVlUGF5bWVudChwYXltZW50Z3JwOiBJUGF5bWVudEdyb3VwKSB7XG5cbiAgICBpZiAodGhpcy5wYXltZW50VHlwZSA9PT0gJ29wJykge1xuICAgICAgdGhpcy5pc0Z1bGx5UmVmdW5kID0gZmFsc2VcbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBheW1lbnRUeXBlID09PSAnZnAnKSB7XG4gICAgICB0aGlzLmlzRnVsbHlSZWZ1bmQgPSB0cnVlXG4gICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRncnA7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9IFwiXCI7XG4gICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICB0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTtcbiAgICB9XG4gIH1cbiAgZ290b1BheW1lbnRTZWxlY3RQYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdvdmVycGF5bWVudCc7XG4gIH1cbiAgZ2V0Q29udGFjdERldGFpbHMob2JqOiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICB0aGlzLmNvbnRhY3REZXRhaWxzT2JqID0gb2JqO1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMuZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUodGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0pO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcic7XG5cbiAgfVxuXG4gIHJlc2V0T3JkZXJEYXRhKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWYobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDcmVhdGVkKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJEZXRhaWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJUb3RhbFBheW1lbnRzKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJSZW1pc3Npb25Ub3RhbChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRmVlc1RvdGFsKG51bGwpO1xuICB9XG5cbiAgZ29Ub1BheW1lbnRGYWlsdWVQYWdlKHBheW1lbnQ6IGFueSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdwYXltZW50LWZhaWx1cmUnO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXltZW50c1N0YXR1cyA9IHBheW1lbnQ7XG4gIH1cbiAgZ29CYWNrVG9QYXltZW50VmlldyhldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUocGF5bWVudDogSVBheW1lbnQpOiB2b2lkIHtcblxuICAgIGlmIChwYXltZW50ID09IHVuZGVmaW5lZCB8fCBwYXltZW50ID09IG51bGwpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbnN0cnVjdGlvblR5cGUgPSAnVGVtcGxhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvbkluc3RydWN0aW9uVHlwZShwYXltZW50LmNoYW5uZWwsIHBheW1lbnQubWV0aG9kKTtcbiAgICB9XG5cbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXcgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1zZWN0aW9uXCI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ3BheW1lbnR2aWV3JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbjxkaXYgY2xhc3M9XCJnb3Z1ay13aWR0aC1jb250YWluZXJcIj5cblxuICA8ZGl2ICBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3RcIj5cbiAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGlua1wiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyIGdvdnVrLSEtcGFkZGluZy10b3AtMFwiIGlkPVwibWFpbi1jb250ZW50XCIgcm9sZT1cIm1haW5cIj5cblxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBQYXltZW50IGRldGFpbHMgY291bGQgbm90IGJlIHJldHJpZXZlZFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBheW1lbnQtdmlldy1hbGlnbm1lbnRcIiAqbmdJZj1cIiFlcnJvck1lc3NhZ2UgJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXVwiPlxuXG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J1BBWU1FTlRERVRBSUxTJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZSBnb3Z1ay0hLW1hcmdpbi10b3AtMFwiPlBheW1lbnQgZGV0YWlsczwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cblxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlNlcnZpY2UgcmVxdWVzdCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgc2VydmljZVJlZmVyZW5jZSAgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LnJlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhbW91bnQ8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+wqN7eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm92ZXJfcGF5bWVudCA+IDBcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+T3ZlciBwYXltZW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPsKje3sgZ2V0T3ZlclBheW1lbnRWYWx1ZSgpIHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdICYmIHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyICYmICFwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5leHRlcm5hbF9yZWZlcmVuY2VcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UGF5bWVudCBhc3NldCBudW1iZXIoRENOKTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5kb2N1bWVudF9jb250cm9sX251bWJlciB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uZG9jdW1lbnRfY29udHJvbF9udW1iZXIgJiYgIXBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmV4dGVybmFsX3JlZmVyZW5jZVwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5CYW5rZWQgZGF0ZTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5iYW5rZWRfZGF0ZSB8IGRhdGU6J2RkIE1NTSB5eXl5JyB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uZXh0ZXJuYWxfcmVmZXJlbmNlXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkdvdlBheSBUcmFuc2FjdGlvbiBJRDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5leHRlcm5hbF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgbWV0aG9kPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13IHRleHQtdHJhbnNmb3JtXCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm1ldGhvZCA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCdcIiA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+VHlwZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICE9PSAnY2FyZCdcIj5DcmVkaXQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIiAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/Lm1ldGhvZCA9PT0gJ2NhcmQnXCI+Q2FyZDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13IHRleHQtdHJhbnNmb3JtXCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uY2hhbm5lbCAgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kICE9PSAnY2FyZCdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5tZXRob2QgfX08L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ubWV0aG9kID09PSAnY2FyZCdcIj5DQVJEPC90ZD5cbiAgICAgICAgPC90cj4gLS0+XG4gICAgICAgIDwhLS0gPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8uY2hhbm5lbCAhPT0gJ3RlbGVwaG9ueSdcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICA8L3RyPiAtLT5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucGF5bWVudF9hbGxvY2F0aW9uWzBdICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5BbGxvY2F0b24gc3RhdHVzPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucGF5bWVudF9hbGxvY2F0aW9uWzBdPy5hbGxvY2F0aW9uX3N0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cInBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0ub3JnYW5pc2F0aW9uX25hbWVcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5QQkEgYWNjb3VudCBuYW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+e3sgcGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ub3JnYW5pc2F0aW9uX25hbWUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdLmFjY291bnRfbnVtYmVyXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UEJBIG51bWJlcjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Yi1jb2wtd1wiPnt7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFjY291bnRfbnVtYmVyIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyICpuZ0lmPVwicGF5bWVudEdyb3VwPy5wYXltZW50c1swXS5jdXN0b21lcl9yZWZlcmVuY2VcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5DdXN0b21lciBpbnRlcm5hbCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5jdXN0b21lcl9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxkaXY+XG4gICAgICAgICAgICA8IS0tIFN0YXR1cyBoaXN0b3JpZXMgLS0+XG4gICAgICA8Y2NwYXktcGF5bWVudC1zdGF0dXNlcyAqbmdJZj1cImlzU3RhdHVzQWxsb2NhdGVkXCIgW2lzVGFrZVBheW1lbnRdPVwiaXNUYWtlUGF5bWVudFwiPjwvY2NwYXktcGF5bWVudC1zdGF0dXNlcz5cbiAgICAgIDwvZGl2PlxuICAgICA8ZGl2IGNsYXNzPVwicmVtaXNzaW9uXCI+XG4gICAgICAgIDxidXR0b24gIFtkaXNhYmxlZF09XCIhY2hrSXNJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50R3JvdXA/LnBheW1lbnRzWzBdKVwiICAoY2xpY2spPVwiaXNzdWVSZWZ1bmQocGF5bWVudEdyb3VwKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+SXNzdWUgcmVmdW5kPC9idXR0b24+XG4gICAgIDwvZGl2PlxuPGRpdiAqbmdJZj1cIklTUEFZTUVOVFNUQVRVU0VOQUJMRURcIj5cbiAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5EaXNwdXRlZCBwYXltZW50IGhpc3Rvcnk8L2gyPlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgPHRoPkFtb3VudDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5EYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoPlBheW1lbnQgcmVmZXJlbmNlPC90aD5cbiAgICAgICAgICAgICAgPHRoPkV2ZW50PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+IFxuICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIiFlcnJvck1zZyAmJiBhbGxQYXltZW50c0ZhaWx1cmUubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzRmFpbHVyZVwiPlxuICAgICAgICAgICAgICA8dGQ+e3sgcGF5bWVudC5zdGF0dXMgfCBjYXBpdGFsaXplIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkPsKje3sgcGF5bWVudC5kaXNwdXRlZF9hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyhwYXltZW50LnJlcHJlc2VudG1lbnRfZGF0ZSA/IHBheW1lbnQucmVwcmVzZW50bWVudF9kYXRlIDogcGF5bWVudC5mYWlsdXJlX2V2ZW50X2RhdGVfdGltZSkgfCBkYXRlOidkZCBNTU0geXl5eSd9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD57eyBwYXltZW50LnBheW1lbnRfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkID57eyBwYXltZW50LmZhaWx1cmVfdHlwZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvVG9QYXltZW50RmFpbHVlUGFnZShwYXltZW50KVwiPlNob3cgZGV0YWlsPC9hPlxuXG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPHRib2R5ICAqbmdJZj1cImVycm9yTXNnIHx8IGFsbFBheW1lbnRzRmFpbHVyZS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+IE5vIGRpc3B1dGVkIHBheW1lbnQgaGlzdG9yeSBhdmFpbGFibGUuIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8YnIvPlxuICAgIDxici8+XG4gIDwvZGl2PlxuICAgICAgXG4gICAgIDxkaXYgICpuZ0lmPVwiY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cClcIj5cbiAgICAgIDxkaXYgICpuZ0lmPVwicGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICA8YnIvPlxuICAgICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5GZWUgYW5kIHJlbWlzc2lvbiBkZXRhaWxzPC9oMj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRiLWNvbC13XCI+QXBwbGljYXRpb24gZm9yIHt7IGZlZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+RmVlIGNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGItY29sLXdcIj57eyBmZWU/LmNvZGUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5hcHBvcnRpb25fYW1vdW50ICYmICFmZWUucmVtaXNzaW9ucyAmJiAhaXNUdXJuT2ZmIH1cIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RyLWJvcmRlcic6ICFmZWUuYXBwb3J0aW9uX2Ftb3VudCAmJiAhZmVlLnJlbWlzc2lvbnMgJiYgIWlzVHVybk9mZn1cIj7Co3t7IGZlZT8uY2FsY3VsYXRlZF9hbW91bnQgfCBudW1iZXI6Jy4yJyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImZlZS5hcHBvcnRpb25fYW1vdW50XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13IHRyLWJvcmRlclwiIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPkFsbG9jYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsndHItYm9yZGVyJzogIWZlZS5yZW1pc3Npb25zfVwiPsKje3sgZmVlPy5hcHBvcnRpb25fYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhY2hrSXNBZGRSZW1pc3Npb25CdG5FbmFibGUoZmVlKVwiIChjbGljayk9XCJhZGRSZW1pc3Npb24oZmVlKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IEFkZCByZW1pc3Npb248L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmRlci1jbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+SGVscCB3aXRoIGZlZXMgb3IgcmVtaXNzaW9uIGNvZGU8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjcgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5SZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkZlZTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZCAgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdCByZWZ1bmRCdG5cIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICAqbmdGb3I9XCJsZXQgcmVtaXNzaW9uIG9mIHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uPy5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbj8ucmVtaXNzaW9uX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24/LmZlZV9jb2RlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbj8uaHdmX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgcmVmdW5kQnRuIHdoaXRlc3BhY2UtaW5oZXJpdFwiICA+XG4gICAgICAgICAgICAgICA8YnV0dG9uICBbZGlzYWJsZWRdPVwiIWNhbkl0QmVSZWZ1bmRlZChyZW1pc3Npb24pXCIgKGNsaWNrKT1cImFkZFJlZnVuZEZvclJlbWlzc2lvbihwYXltZW50R3JvdXAucGF5bWVudHNbMF0scmVtaXNzaW9uLHBheW1lbnRHcm91cC5mZWVzKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IEFkZCByZWZ1bmQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG5cblxuICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj48L2Rpdj5cblxuICAgPGRpdiAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWFyLTE3XCIgPk5vIGhlbHAgd2l0aCBmZWVzIG9yIHJlbWlzc2lvbnMuPC9zcGFuPlxuICAgPC9kaXY+XG5cbiAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbWFpbj5cbjwvZGl2PlxuXG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkcmVtaXNzaW9uJyAmJiBmZWVJZCAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbjxjY3BheS1hZGQtcmVtaXNzaW9uIFxuW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuW2lzU3RyYXRlZ2ljRml4RW5hYmxlXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcblt2aWV3Q29tcFN0YXR1c109IFwidmlld1N0YXR1c1wiXG5bZmVlXT1cImZlZUlkXCJcbltwYXltZW50XSA9IFwicGF5bWVudFwiXG5bb3JkZXJTdGF0dXNdID1cInBheW1lbnRHcm91cC5wYXltZW50c1swXS5zdGF0dXNcIlxuW3BhaWRBbW91bnRdPSBcInBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnRcIlxuW2lzUmVmdW5kUmVtaXNzaW9uXT1cImlzUmVmdW5kUmVtaXNzaW9uXCJcbltjYXNlVHlwZV09XCJjYXNlVHlwZVwiXG5bcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVwiXG5baXNGcm9tUGF5bWVudERldGFpbFBhZ2VdID0gXCJ0cnVlXCJcbltjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIlxuW29yZGVyRmVlc1RvdGFsXSA9IFwib3JkZXJGZWVzVG90YWxcIlxuW29yZGVyVG90YWxQYXltZW50c10gPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG5bb3JkZXJSZW1pc3Npb25Ub3RhbF0gPSBcIm9yZGVyUmVtaXNzaW9uVG90YWxcIlxuW29yZGVyUmVmXSA9IFwib3JkZXJSZWZcIlxuW29yZGVyQ3JlYXRlZF0gPSBcIm9yZGVyQ3JlYXRlZFwiXG5bb3JkZXJQYXJ0eV0gPSBcIm9yZGVyUGFydHlcIlxuW29yZGVyQ0NERXZlbnRdID0gXCJvcmRlckNDREV2ZW50XCJcbltvcmRlckRldGFpbF0gPSBcIm9yZGVyRGV0YWlsXCJcbltMT0dHRURJTlVTRVJST0xFU10gPSBcIkxPR0dFRElOVVNFUlJPTEVTXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJyAmJiBwYXltZW50ICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnQnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZScgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuXG48Y2NwYXktYWRkLXJlbWlzc2lvblxuW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuW2lzU3RyYXRlZ2ljRml4RW5hYmxlXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcblt2aWV3Q29tcFN0YXR1c109IFwidmlld1N0YXR1c1wiXG5bcGF5bWVudF09XCJwYXltZW50XCJcbltvcmRlclN0YXR1c10gPVwib3JkZXJTdGF0dXNcIlxuW3BhaWRBbW91bnRdPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG5baXNSZWZ1bmRSZW1pc3Npb25dPVwiaXNSZWZ1bmRSZW1pc3Npb25cIlxuW2Nhc2VUeXBlXT1cImNhc2VUeXBlXCJcbltmZWVhbW91bnRdPVwicmVtaXNzaW9uRmVlQW10XCJcbltyZW1pc3Npb25dID0gXCJyZW1pc3Npb25zXCJcbltpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VdPVwiZmFsc2VcIlxuW3BheW1lbnRHcm91cFJlZl09XCJwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcIlxuW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiXG5bb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG5bb3JkZXJUb3RhbFBheW1lbnRzXSA9IFwib3JkZXJUb3RhbFBheW1lbnRzXCJcbltvcmRlclJlbWlzc2lvblRvdGFsXSA9IFwib3JkZXJSZW1pc3Npb25Ub3RhbFwiXG5bb3JkZXJSZWZdID0gXCJvcmRlclJlZlwiXG5bb3JkZXJDcmVhdGVkXSA9IFwib3JkZXJDcmVhdGVkXCJcbltvcmRlclBhcnR5XSA9IFwib3JkZXJQYXJ0eVwiXG5bb3JkZXJDQ0RFdmVudF0gPSBcIm9yZGVyQ0NERXZlbnRcIlxuW29yZGVyRGV0YWlsXSA9IFwib3JkZXJEZXRhaWxcIlxuW0xPR0dFRElOVVNFUlJPTEVTXSA9IFwiTE9HR0VESU5VU0VSUk9MRVNcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZCcgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudCcgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVyUGF5bWVudEFkZHJlc3NDYXB0dXJlJyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50Y2hlY2thbmRhbnN3ZXInXCI+XG4gICAgPGNjcGF5LWFkZC1yZW1pc3Npb24gXG4gICAgW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuICAgIFtpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gICAgW3BheW1lbnRdID0gJ3BheW1lbnRHcm91cC5wYXltZW50c1swXSdcbiAgICBbdmlld0NvbXBTdGF0dXNdPSBcInZpZXdTdGF0dXNcIlxuICAgIFtvcmRlclN0YXR1c10gPVwicGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnN0YXR1c1wiXG4gICAgW3BhaWRBbW91bnRdPSBcInBheW1lbnRHcm91cC5wYXltZW50c1swXS5hbW91bnRcIlxuICAgIFtpc1JlZnVuZFJlbWlzc2lvbl09XCJpc1JlZnVuZFJlbWlzc2lvblwiXG4gICAgW2Nhc2VUeXBlXT1cImNhc2VUeXBlXCJcbiAgICBbaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXT1cImlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZVwiXG4gICAgW2lzRnJvbVBheW1lbnREZXRhaWxQYWdlXSA9IFwiaXNGcm9tUGF5bWVudERldGFpbFBhZ2VcIlxuICAgIFtwYXltZW50R3JvdXBSZWZdPVwicGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXCJcbiAgICBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCJcbiAgICBbb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG4gICAgW29yZGVyVG90YWxQYXltZW50c10gPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG4gICAgW29yZGVyUmVtaXNzaW9uVG90YWxdID0gXCJvcmRlclJlbWlzc2lvblRvdGFsXCJcbiAgICBbb3JkZXJSZWZdID0gXCJvcmRlclJlZlwiXG4gICAgW29yZGVyQ3JlYXRlZF0gPSBcIm9yZGVyQ3JlYXRlZFwiXG4gICAgW29yZGVyUGFydHldID0gXCJvcmRlclBhcnR5XCJcbiAgICBbb3JkZXJDQ0RFdmVudF0gPSBcIm9yZGVyQ0NERXZlbnRcIlxuICAgIFtvcmRlckRldGFpbF0gPSBcIm9yZGVyRGV0YWlsXCJcbiAgICBbZmVlc10gPVwicGF5bWVudEZlZXNcIlxuICAgIFtpc0Z1bGx5UmVmdW5kXSA9IFwiaXNGdWxseVJlZnVuZFwiXG4gICAgW0xPR0dFRElOVVNFUlJPTEVTXSA9IFwiTE9HR0VESU5VU0VSUk9MRVNcIj5cbiAgICBcbiAgPjwvY2NwYXktYWRkLXJlbWlzc2lvbj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdvcmRlci1mdWxsLXZpZXcnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnQnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZScgJiYgdmlld0NvbXBTdGF0dXMgIT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuICA8Y2NwYXktc2VydmljZS1yZXF1ZXN0XG4gIFt2aWV3U3RhdHVzXSA9IFwidmlld1N0YXR1c1wiXG4gIFtvcmRlclJlZl0gPSBcIm9yZGVyUmVmXCJcbiAgW29yZGVyU3RhdHVzXSA9IFwib3JkZXJTdGF0dXNcIlxuICBbb3JkZXJDcmVhdGVkXSA9IFwib3JkZXJDcmVhdGVkXCJcbiAgW29yZGVyUGFydHldID0gXCJvcmRlclBhcnR5XCJcbiAgW29yZGVyQ0NERXZlbnRdID0gXCJvcmRlckNDREV2ZW50XCJcbiAgW29yZGVyRGV0YWlsXSA9IFwib3JkZXJEZXRhaWxcIlxuICBbTE9HR0VESU5VU0VSUk9MRVNdID0gXCJMT0dHRURJTlVTRVJST0xFU1wiXG4gIFt0YWtlUGF5bWVudF0gPSBcImlzVGFrZVBheW1lbnRcIlxuICBbY2NkQ2FzZU51bWJlcl0gPSBcImNjZENhc2VOdW1iZXJcIlxuICBbb3JkZXJGZWVzVG90YWxdID0gXCJvcmRlckZlZXNUb3RhbFwiXG4gIFtvcmRlclRvdGFsUGF5bWVudHNdID0gXCJvcmRlclRvdGFsUGF5bWVudHNcIlxuICBbb3JkZXJSZW1pc3Npb25Ub3RhbF0gPSBcIm9yZGVyUmVtaXNzaW9uVG90YWxcIlxuICBbaXNTZXJ2aWNlUmVxdWVzdF0gPSBcImlzU2VydmljZVJlcXVlc3RcIlxuICAoZ29Ub1NlcnZpY2VScXVlc3RDb21wb25lbnQpID0gXCJnb1RvU2VydmljZVJlcXVlc3RQYWdlKClcIlxuPlxuPC9jY3BheS1zZXJ2aWNlLXJlcXVlc3Q+XG5cbjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwib3Zlci1wYXltZW50XCI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld0NvbXBTdGF0dXMgPT09ICdvdmVycGF5bWVudCdcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdPVkVSUEFZTUVOVFBBR0UnPiBcbiAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZVwiPklzc3VlIHJlZnVuZDwvaDE+XG4gIDxoMSBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+Q2FzZSByZWZlcmVuY2U6IHt7Y2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX08L2gxPlxuICA8c3BhbiBpZD1cImhvdy1jb250YWN0ZWQtY29uZGl0aW9uYWwtaGludCBnb3Z1ay1mb250MTlweFwiIGNsYXNzPVwiZm9ybS1oaW50XCI+XG4gICAgUGF5bWVudCByZWZlcmVuY2U6IHt7cGF5bWVudEdyb3VwPy5wYXltZW50c1swXT8ucmVmZXJlbmNlfX1cbiAgPC9zcGFuPlxuPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiZ292dWstZmllbGRzZXRcIj5cbiAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1sXCI+XG4gICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlNlbGVjdCBwYXltZW50IHRvIHJlZnVuZDwvaDE+XG4gICAgPC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc1wiIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cIm92ZXItcGF5bWVudFwiIG5hbWU9XCJvdmVyLXBheW1lbnRcIiB0eXBlPVwicmFkaW9cIiAoY2xpY2spPVwic2VsZWN0UHltZW50T3B0aW9uKCdvcCcpXCIgdmFsdWU9XCJvcFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLWZvbnQxOXB4XCIgZm9yPVwid2hlcmUtZG8teW91LWxpdmVcIj5cbiAgICAgICAgICBPdmVyIHBheW1lbnQgwqN7e2dldE92ZXJQYXltZW50VmFsdWUoKSB8IG51bWJlcjonLjInfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJmdWxsLXBheW1lbnRcIiBuYW1lPVwib3Zlci1wYXltZW50XCIgdHlwZT1cInJhZGlvXCIgKGNsaWNrKT1cInNlbGVjdFB5bWVudE9wdGlvbignZnAnKVwiIHZhbHVlPVwiZnBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBnb3Z1ay1mb250MTlweFwiIGZvcj1cIndoZXJlLWRvLXlvdS1saXZlLTJcIj5cbiAgICAgICAgICBGdWxsIHBheW1lbnQgwqN7e3BheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFtb3VudCB8IG51bWJlcjonLjInfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBvdmVyLXBheW1lbnQtYWxpZ25tZW50IGdvdnVrLWZvbnQxOXB4XCJcbiAgICAgIChjbGljayk9XCJnb1RvUGF5bWVudFZpZXdDb21wb25lbnQoKVwiPiBQcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBcbiAgICAgIChjbGljayk9XCJjb250aW51ZVBheW1lbnQocGF5bWVudEdyb3VwKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDb250aW51ZUJ0bkRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0naXNDb250aW51ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xIGdvdnVrLWZvbnQxOXB4XCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xIGdvdnVrLWZvbnQxOXB4XCInXG4gICAgICBjbGFzcz1cImdvdnVrLWJ1dHRvblwiPiBDb250aW51ZTwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdDb21wU3RhdHVzID09PSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSdcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdPVkVSUEFZTUVOVEFERFJFU1NDQVBUVVJFUEFHRSc+ICAgICAgXG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPklzc3VlIHJlZnVuZDwvaDE+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbSBnb3Z1ay1mb250MTlweFwiPkNhc2UgcmVmZXJlbmNlOiB7e2NjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9oMj5cbiAgPHNwYW4gaWQ9XCJob3ctY29udGFjdGVkLWNvbmRpdGlvbmFsLWhpbnRcIiBjbGFzcz1cImdvdnVrLWhpbnQgZ292dWstZm9udDE5cHhcIj5cbiAgICBQYXltZW50IHJlZmVyZW5jZToge3twYXltZW50R3JvdXA/LnBheW1lbnRzWzBdPy5yZWZlcmVuY2V9fVxuICA8L3NwYW4+XG48Y2NwYXktY29udGFjdC1kZXRhaWxzIFxuW2FkZHJlc3NPYmpdID0gbm90aWZpY2F0aW9uXG4oYXNzaWduQ29udGFjdERldGFpbHMpPVwiZ2V0Q29udGFjdERldGFpbHMoJGV2ZW50KVwiXG4ocmVkaXJlY3RUb0lzc3VlUmVmdW5kKT1cImdvdG9QYXltZW50U2VsZWN0UGFnZSgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuPHA+XG4gICAgPGEgKGNsaWNrKT1cImdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgIENhbmNlbFxuICAgIDwvYT5cbjwvcD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld0NvbXBTdGF0dXMgPT09ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJ1wiPlxuICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0FERFJFRlVOREZPUlJFTUlTU0lPTic+IFxuICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICBcbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj4gQ2hlY2sgeW91ciBhbnN3ZXJzPC9oMT5cbiAgPC9kaXY+XG4gIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+IHt7cGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZX19IDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlBheW1lbnQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7cGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmFtb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7cGF5bWVudEdyb3VwPy5mZWVzWzBdPy5uZXRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlJlZnVuZCBhbW91bnQ8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tnZXRPdmVyUGF5bWVudFZhbHVlKCkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVmdW5kIHJlYXNvbjwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5PdmVyIHBheW1lbnQ8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+U2VuZCB0bzwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tvcmRlclBhcnR5fX08L3RkPlxuICAgIDwvdHI+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+U2VuZCB2aWE8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb250YWN0RGV0YWlsc09iaj8ubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCdcIiBjbGFzcz1cImNvbnRhY3REZXRhaWxzLXdpZHRoXCI+XG4gICAgICAgICAgPHN0cm9uZz5FbWFpbDwvc3Ryb25nPlxuICAgICAgICAgIDxici8+XG4gICAgICAgICAge3tjb250YWN0RGV0YWlsc09iaj8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGFjdERldGFpbHNPYmo/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnTEVUVEVSJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGhcIj5cbiAgICAgICAgICA8c3Ryb25nPlBvc3Q8L3N0cm9uZz5cbiAgICAgICAgICA8YnIvPlxuICAgICAgICAgIHt7Y29udGFjdERldGFpbHNPYmo/LmFkZHJlc3NfbGluZT8udHJpbSgpfX0mbmJzcDt7e2NvbnRhY3REZXRhaWxzT2JqPy5jaXR5Py50cmltKCl9fSZuYnNwO3t7Y29udGFjdERldGFpbHNPYmo/LmNvdW50eT8udHJpbSgpfX0mbmJzcDt7e2NvbnRhY3REZXRhaWxzT2JqPy5jb3VudHJ5Py50cmltKCl9fSZuYnNwO3t7Y29udGFjdERldGFpbHNPYmo/LnBvc3RhbF9jb2RlPy50cmltKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGEgKGNsaWNrKT1cImdvdG9BZGRyZXNzUGFnZShjb250YWN0RGV0YWlsc09iailcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiA+Q2hhbmdlPC9hPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuXG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+Tm90aWZpY2F0aW9uPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3t0ZW1wbGF0ZUluc3RydWN0aW9uVHlwZX19XG4gICAgICAgICAgPGEgKm5nSWY9XCIhbm90aWZpY2F0aW9uUHJldmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiAoY2xpY2spPVwic2hvd05vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgUHJldmlld1xuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YSAqbmdJZj1cIm5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cImhpZGVOb3RpZmljYXRpb25QcmV2aWV3KClcIj5cbiAgICAgICAgICAgIEhpZGUgUHJldmlld1xuICAgICAgICAgIDwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90YWJsZT5cblxuICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIFxuICBbcGF5bWVudF09XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF1cIiBcbiAgW2NvbnRhY3REZXRhaWxzXT1cImNvbnRhY3REZXRhaWxzT2JqXCJcbiAgW3JlZnVuZFJlYXNvbl09XCInUlIwMzcnXCJcbiAgW3JlZnVuZEFtb3VudF09XCJnZXRPdmVyUGF5bWVudFZhbHVlKClcIj48L2FwcC1ub3RpZmljYXRpb24tcHJldmlldz5cblxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBvdmVyLXBheW1lbnQtYWxpZ25tZW50IGdvdnVrLWZvbnQxOXB4XCIgKGNsaWNrKT1cImdvdG9BZGRyZXNzUGFnZShjb250YWN0RGV0YWlsc09iailcIj5QcmV2aW91czwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICBbbmdDbGFzc109J2lzQ29udGludWVCdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMSBnb3Z1ay1mb250MTlweFwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMSBnb3Z1ay1mb250MTlweFwiJ1xuICAoY2xpY2spPVwicHJvY2Vzc1JlZnVuZCgpXCI+XG4gICAgU3VibWl0IHJlZnVuZFxuICA8L2J1dHRvbj5cbiAgPHA+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgIChjbGljayk9XCJnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWxpbmsgZ292dWstZm9udDE5cHhcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgPC9hPlxuICA8L3A+XG5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJwYXltZW50JyAmJiB2aWV3Q29tcFN0YXR1cyAhPT0gJ292ZXJQYXltZW50QWRkcmVzc0NhcHR1cmUnICYmIHZpZXdDb21wU3RhdHVzICE9PSAnb3ZlcnBheW1lbnRjaGVja2FuZGFuc3dlcidcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdSRVRST1JFTUlTU0lPTlJFRlVORENPTkZJUk1BVElPTlBBR0UnPiBcbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IHBhZ2VzaXplXCI+XG4gICAgPGRpdiA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF92aWV3X3RpdGxlXCI+XG4gICAgICAgICAgUmVmdW5kIHN1Ym1pdHRlZFxuICAgICAgICA8L2gxPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5IHdoaXRlXCI+PHN0cm9uZyBjbGFzcz1cIndoaXRlXCI+UmVmdW5kIHJlZmVyZW5jZToge3tyZWZ1bmRSZWZlcmVuY2V9fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgPC9kaXY+XG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5XaGF0IGhhcHBlbnMgbmV4dDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgQSByZWZ1bmQgcmVxdWVzdCBmb3Ige3tyZWZ1bmRBbW91bnQgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgd2lsbCBiZSBwYXNzZWQgdG8gYSB0ZWFtIGxlYWRlciB0byBhcHByb3ZlLlxuICAgICAgPC9wPlxuICAgIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub0Nhc2VUcmFuc2F0aW9uUGFnZSgkZXZlbnQpXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHBvaW50ZXJcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgUmV0dXJuIHRvIGNhc2VcbiAgPC9hPlxuICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAncGF5bWVudC1mYWlsdXJlJ1wiPlxuICA8ZGl2IGNsYXNzPVwicGF5bWVudC1mYWlsdXJlLWFsaWdubWVudFwiPlxuICAgIDxkaXYgIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImdvQmFja1RvUGF5bWVudFZpZXcoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYmFjay1saW5rXCI+QmFjazwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvb2w+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2UgZ292dWstIS1tYXJnaW4tdG9wLTBcIj5GYWlsdXJlIGV2ZW50IGRldGFpbHM8L2gxPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRhYmxlPlxuICAgICAgPHRib2R5PlxuXG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5GYWlsdXJlIHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3JlZmVyZW5jZX19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5GYWlsdXJlIHJlYXNvbjwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3JlYXNvbn19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5wYXltZW50X3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5QYXltZW50IGFtb3VudDwvdGQ+XG4gICAgICAgICAgPHRkPiDCo3t7IHBheW1lbnRHcm91cD8ucGF5bWVudHNbMF0/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cblxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+RGlzcHV0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICA8dGQ+XHTCo3t7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5kaXNwdXRlZF9hbW91bnQgIHwgbnVtYmVyOicuMid9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+QWRkaXRpb25hbCBpbmZvcm1hdGlvbjwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5hZGRpdGlvbmFsX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+RmFpbHVyZSB0eXBlPC90ZD5cbiAgICAgICAgPHRkPlx0e3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX3R5cGUgfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPkZhaWx1cmUgZXZlbnQgZGF0ZSBhbmQgdGltZTwvdGQ+XG4gICAgICAgIDx0ZD4ge3sgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5mYWlsdXJlX2V2ZW50X2RhdGVfdGltZSB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRQYXltZW50c1N0YXR1cy5oYXNfYW1vdW50X2RlYml0ZWRcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiPkhhcyBkaXNwdXRlZCBhbW91bnQgZGViaXRlZDwvdGQ+XG4gICAgICAgIDx0ZD5cdHt7c2VsZWN0ZWRQYXltZW50c1N0YXR1cy5oYXNfYW1vdW50X2RlYml0ZWR9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1c1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCI+U3RhdHVzIGZvbGxvd2luZyByZXByZXNlbnRhdGlvbiBvZiBwYXltZW50PC90ZD5cbiAgICAgICAgPHRkPlx0e3soc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1cyA9PT0gJ1llcycgfHwgc2VsZWN0ZWRQYXltZW50c1N0YXR1cy5yZXByZXNlbnRtZW50X3N0YXR1cyA9PT0gJ3llcycpID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkUGF5bWVudHNTdGF0dXMucmVwcmVzZW50bWVudF9kYXRlXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIj5EYXRlIHBheW1lbnQgcmVwcmVzZW50ZWQ8L3RkPlxuICAgICAgICA8dGQ+XHR7e3NlbGVjdGVkUGF5bWVudHNTdGF0dXMucmVwcmVzZW50bWVudF9kYXRlICB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG5cbiAgICA8ZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|