@hitsoft/uretim-yonetimi 1.0.29 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,6 +23,7 @@ export class HitComponentWastageComponent {
23
23
  dismissible: false,
24
24
  };
25
25
  this.isLoading = false;
26
+ this.isSaving = false;
26
27
  this.isWorkOrderNoValid = false;
27
28
  this.searcheBasildiMi = false;
28
29
  this.componentWastagePostDto = new ComponentWastagePostDto;
@@ -166,10 +167,11 @@ export class HitComponentWastageComponent {
166
167
  });
167
168
  }
168
169
  save() {
169
- if (!this.isWorkOrderNoValid || !this.componentWastagePostDto) {
170
+ if (!this.isWorkOrderNoValid || !this.componentWastagePostDto || this.isSaving) {
170
171
  this.focusWorkOrder();
171
172
  return;
172
173
  }
174
+ this.isSaving = true;
173
175
  this.isLoading = true;
174
176
  this.componentWastagePostDto.documentLines.forEach(line => {
175
177
  line.baseEntry = this.productionOrder.absoluteEntry;
@@ -189,6 +191,8 @@ export class HitComponentWastageComponent {
189
191
  }
190
192
  },
191
193
  error: (error) => {
194
+ this.isSaving = false;
195
+ this.isLoading = false;
192
196
  },
193
197
  complete: () => {
194
198
  this.clearAll();
@@ -201,6 +205,7 @@ export class HitComponentWastageComponent {
201
205
  this.workOrderNo = null;
202
206
  this.productionOrder = null;
203
207
  this.componentWastagePostDto = new ComponentWastagePostDto;
208
+ this.isSaving = false;
204
209
  this.isLoading = false;
205
210
  this.lookupDataSourceItemCodes = {};
206
211
  this.ngZone.run(() => {
@@ -222,10 +227,10 @@ export class HitComponentWastageComponent {
222
227
  }
223
228
  }
224
229
  HitComponentWastageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitComponentWastageComponent, deps: [{ token: i1.HitComponentWastageService }, { token: i2.ConfirmationService }, { token: i0.NgZone }, { token: i3.HitProductionOrdersService }], target: i0.ɵɵFactoryTarget.Component });
225
- HitComponentWastageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitComponentWastageComponent, selector: "lib-hit-component-wastage", viewQueries: [{ propertyName: "nmbBoxBarkodNumarasi", first: true, predicate: ["barkodNumarasiRef"], descendants: true }, { propertyName: "componentWastageLinesGrid", first: true, predicate: ["getComponentWastageLinesGrid"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::ComponentWastage.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-8\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\"\r\n [disabled]=\"!isWorkOrderNoValid\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-4\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\"\r\n [disabled]=\"isLoading\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #barkodNumarasiRef class=\"me-1\" style=\"width:100%;\" [min]=\"1\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"workOrderNo\" (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-button>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderNoValid\">\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ConveyorInformation' | abpLocalization\"\r\n [(value)]=\"productionOrder.u_Hat\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductDescription' | abpLocalization\"\r\n [(value)]=\"productionOrder.productDescription\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-number-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductQuantity' | abpLocalization\"\r\n [(value)]=\"productionOrder.plannedQuantity\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n <div class=\"mt-3\">\r\n <dx-data-grid #getComponentWastageLinesGrid\r\n [dataSource]=\"componentWastagePostDto.documentLines\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n (onToolbarPreparing)=\"onToolbarPreparing($event)\">\r\n <dxo-editing\r\n mode=\"row\"\r\n [newRowPosition]=\"'last'\"\r\n [allowDeleting]=\"true\"\r\n [allowUpdating]=\"true\"\r\n [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"baseLine\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ItemCode' | abpLocalization}}\">\r\n <dxo-lookup style=\"width:100%;\"\r\n [dataSource]=\"lookupDataSourceItemCodes\"\r\n displayExpr=\"itemName\"\r\n valueExpr=\"lineNum\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNedeni\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.CauseOfWastage' | abpLocalization}}\">\r\n <dxo-lookup\r\n [dataSource]=\"lookupDataSourceCauseOfWastages\"\r\n displayExpr=\"name\"\r\n dataType=\"string\"\r\n valueExpr=\"id\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n dataType=\"string\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.QuantityOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"numeric\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.DescOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"componentWastages && componentWastages.length && isWorkOrderNoValid\">\r\n <div>\r\n <h5>{{ 'UretimYonetimi::ComponentWastage.ComponentWastageRecords' | abpLocalization }}</h5>\r\n </div>\r\n <dx-data-grid #instanceComponentWastagesGrid\r\n [dataSource]=\"componentWastages\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\">\r\n <dxi-column dataField=\"docEntry\" [minWidth]=\"50\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DocEntry' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"itemName\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.ItemName' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"fireNedeniAdi\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.CauseOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.QuantityOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [":host{display:block}dx-number-box,dx-text-box{width:100%}dx-data-grid{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i5.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i6.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i7.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: i7.DxoEditingComponent, selector: "dxo-editing", inputs: ["allowAdding", "allowDeleting", "allowUpdating", "changes", "confirmDelete", "editColumnName", "editRowKey", "form", "mode", "newRowPosition", "popup", "refreshMode", "selectTextOnEditStart", "startEditAction", "texts", "useIcons", "allowAddShape", "allowChangeConnection", "allowChangeConnectorPoints", "allowChangeConnectorText", "allowChangeShapeText", "allowDeleteConnector", "allowDeleteShape", "allowMoveShape", "allowResizeShape", "allowDependencyAdding", "allowDependencyDeleting", "allowResourceAdding", "allowResourceDeleting", "allowResourceUpdating", "allowTaskAdding", "allowTaskDeleting", "allowTaskResourceUpdating", "allowTaskUpdating", "enabled", "allowDragging", "allowResizing", "allowTimeZoneEditing"], outputs: ["changesChange", "editColumnNameChange", "editRowKeyChange"] }, { kind: "component", type: i6.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i8.LocalizationPipe, name: "abpLocalization" }] });
230
+ HitComponentWastageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitComponentWastageComponent, selector: "lib-hit-component-wastage", viewQueries: [{ propertyName: "nmbBoxBarkodNumarasi", first: true, predicate: ["barkodNumarasiRef"], descendants: true }, { propertyName: "componentWastageLinesGrid", first: true, predicate: ["getComponentWastageLinesGrid"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::ComponentWastage.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-8\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\"\r\n [disabled]=\"!isWorkOrderNoValid || isSaving\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-4\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\"\r\n [disabled]=\"isLoading\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #barkodNumarasiRef class=\"me-1\" style=\"width:100%;\" [min]=\"1\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"workOrderNo\" (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-button>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderNoValid\">\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ConveyorInformation' | abpLocalization\"\r\n [(value)]=\"productionOrder.u_Hat\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductDescription' | abpLocalization\"\r\n [(value)]=\"productionOrder.productDescription\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-number-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductQuantity' | abpLocalization\"\r\n [(value)]=\"productionOrder.plannedQuantity\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n <div class=\"mt-3\">\r\n <dx-data-grid #getComponentWastageLinesGrid\r\n [dataSource]=\"componentWastagePostDto.documentLines\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n (onToolbarPreparing)=\"onToolbarPreparing($event)\">\r\n <dxo-editing\r\n mode=\"row\"\r\n [newRowPosition]=\"'last'\"\r\n [allowDeleting]=\"true\"\r\n [allowUpdating]=\"true\"\r\n [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"baseLine\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ItemCode' | abpLocalization}}\">\r\n <dxo-lookup style=\"width:100%;\"\r\n [dataSource]=\"lookupDataSourceItemCodes\"\r\n displayExpr=\"itemName\"\r\n valueExpr=\"lineNum\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNedeni\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.CauseOfWastage' | abpLocalization}}\">\r\n <dxo-lookup\r\n [dataSource]=\"lookupDataSourceCauseOfWastages\"\r\n displayExpr=\"name\"\r\n dataType=\"string\"\r\n valueExpr=\"id\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n dataType=\"string\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.QuantityOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"numeric\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"componentWastages && componentWastages.length && isWorkOrderNoValid\">\r\n <div>\r\n <h5>{{ 'UretimYonetimi::ComponentWastage.ComponentWastageRecords' | abpLocalization }}</h5>\r\n </div>\r\n <dx-data-grid #instanceComponentWastagesGrid\r\n [dataSource]=\"componentWastages\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\">\r\n <dxi-column dataField=\"docEntry\" [minWidth]=\"50\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DocEntry' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"itemName\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.ItemName' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"fireNedeniAdi\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.CauseOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.QuantityOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [":host{display:block}dx-number-box,dx-text-box{width:100%}dx-data-grid{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i5.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i6.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i7.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: i7.DxoEditingComponent, selector: "dxo-editing", inputs: ["allowAdding", "allowDeleting", "allowUpdating", "changes", "confirmDelete", "editColumnName", "editRowKey", "form", "mode", "newRowPosition", "popup", "refreshMode", "selectTextOnEditStart", "startEditAction", "texts", "useIcons", "allowAddShape", "allowChangeConnection", "allowChangeConnectorPoints", "allowChangeConnectorText", "allowChangeShapeText", "allowDeleteConnector", "allowDeleteShape", "allowMoveShape", "allowResizeShape", "allowDependencyAdding", "allowDependencyDeleting", "allowResourceAdding", "allowResourceDeleting", "allowResourceUpdating", "allowTaskAdding", "allowTaskDeleting", "allowTaskResourceUpdating", "allowTaskUpdating", "enabled", "allowDragging", "allowResizing", "allowTimeZoneEditing"], outputs: ["changesChange", "editColumnNameChange", "editRowKeyChange"] }, { kind: "component", type: i6.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i8.LocalizationPipe, name: "abpLocalization" }] });
226
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitComponentWastageComponent, decorators: [{
227
232
  type: Component,
228
- args: [{ selector: 'lib-hit-component-wastage', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::ComponentWastage.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-8\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\"\r\n [disabled]=\"!isWorkOrderNoValid\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-4\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\"\r\n [disabled]=\"isLoading\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #barkodNumarasiRef class=\"me-1\" style=\"width:100%;\" [min]=\"1\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"workOrderNo\" (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-button>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderNoValid\">\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ConveyorInformation' | abpLocalization\"\r\n [(value)]=\"productionOrder.u_Hat\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductDescription' | abpLocalization\"\r\n [(value)]=\"productionOrder.productDescription\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-number-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductQuantity' | abpLocalization\"\r\n [(value)]=\"productionOrder.plannedQuantity\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n <div class=\"mt-3\">\r\n <dx-data-grid #getComponentWastageLinesGrid\r\n [dataSource]=\"componentWastagePostDto.documentLines\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n (onToolbarPreparing)=\"onToolbarPreparing($event)\">\r\n <dxo-editing\r\n mode=\"row\"\r\n [newRowPosition]=\"'last'\"\r\n [allowDeleting]=\"true\"\r\n [allowUpdating]=\"true\"\r\n [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"baseLine\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ItemCode' | abpLocalization}}\">\r\n <dxo-lookup style=\"width:100%;\"\r\n [dataSource]=\"lookupDataSourceItemCodes\"\r\n displayExpr=\"itemName\"\r\n valueExpr=\"lineNum\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNedeni\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.CauseOfWastage' | abpLocalization}}\">\r\n <dxo-lookup\r\n [dataSource]=\"lookupDataSourceCauseOfWastages\"\r\n displayExpr=\"name\"\r\n dataType=\"string\"\r\n valueExpr=\"id\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n dataType=\"string\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.QuantityOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"numeric\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.DescOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"componentWastages && componentWastages.length && isWorkOrderNoValid\">\r\n <div>\r\n <h5>{{ 'UretimYonetimi::ComponentWastage.ComponentWastageRecords' | abpLocalization }}</h5>\r\n </div>\r\n <dx-data-grid #instanceComponentWastagesGrid\r\n [dataSource]=\"componentWastages\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\">\r\n <dxi-column dataField=\"docEntry\" [minWidth]=\"50\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DocEntry' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"itemName\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.ItemName' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"fireNedeniAdi\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.CauseOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.QuantityOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [":host{display:block}dx-number-box,dx-text-box{width:100%}dx-data-grid{width:100%}\n"] }]
233
+ args: [{ selector: 'lib-hit-component-wastage', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::ComponentWastage.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-8\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\"\r\n [disabled]=\"!isWorkOrderNoValid || isSaving\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-4\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\"\r\n [disabled]=\"isLoading\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::ComponentWastage.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #barkodNumarasiRef class=\"me-1\" style=\"width:100%;\" [min]=\"1\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"workOrderNo\" (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searcheBasildiMi || isWorkOrderNoValid\">\r\n </dx-button>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderNoValid\">\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ConveyorInformation' | abpLocalization\"\r\n [(value)]=\"productionOrder.u_Hat\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-text-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductDescription' | abpLocalization\"\r\n [(value)]=\"productionOrder.productDescription\"\r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n <dx-number-box style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::ComponentWastage.ProductQuantity' | abpLocalization\"\r\n [(value)]=\"productionOrder.plannedQuantity\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n <div class=\"mt-3\">\r\n <dx-data-grid #getComponentWastageLinesGrid\r\n [dataSource]=\"componentWastagePostDto.documentLines\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n (onToolbarPreparing)=\"onToolbarPreparing($event)\">\r\n <dxo-editing\r\n mode=\"row\"\r\n [newRowPosition]=\"'last'\"\r\n [allowDeleting]=\"true\"\r\n [allowUpdating]=\"true\"\r\n [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"baseLine\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ItemCode' | abpLocalization}}\">\r\n <dxo-lookup style=\"width:100%;\"\r\n [dataSource]=\"lookupDataSourceItemCodes\"\r\n displayExpr=\"itemName\"\r\n valueExpr=\"lineNum\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNedeni\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.CauseOfWastage' | abpLocalization}}\">\r\n <dxo-lookup\r\n [dataSource]=\"lookupDataSourceCauseOfWastages\"\r\n displayExpr=\"name\"\r\n dataType=\"string\"\r\n valueExpr=\"id\">\r\n </dxo-lookup>\r\n <dxi-validation-rule\r\n type=\"required\"\r\n dataType=\"string\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.QuantityOfWastage' | abpLocalization}}\">\r\n <dxi-validation-rule\r\n type=\"required\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"numeric\"\r\n message=\"\">\r\n </dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"componentWastages && componentWastages.length && isWorkOrderNoValid\">\r\n <div>\r\n <h5>{{ 'UretimYonetimi::ComponentWastage.ComponentWastageRecords' | abpLocalization }}</h5>\r\n </div>\r\n <dx-data-grid #instanceComponentWastagesGrid\r\n [dataSource]=\"componentWastages\"\r\n [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [sorting]=\"{ mode: 'none' }\"\r\n [repaintChangesOnly]=\"true\"\r\n [rowAlternationEnabled]=\"true\">\r\n <dxi-column dataField=\"docEntry\" [minWidth]=\"50\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DocEntry' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"itemName\" [minWidth]=\"250\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.ItemName' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"fireNedeniAdi\" [minWidth]=\"125\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.CauseOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"quantity\"\r\n dataType=\"number\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.QuantityOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n <dxi-column dataField=\"u_FireNDesc\"\r\n dataType=\"string\"\r\n caption=\"{{'UretimYonetimi::ComponentWastage.ComponentWastageRecords.DescOfWastage' | abpLocalization}}\">\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [":host{display:block}dx-number-box,dx-text-box{width:100%}dx-data-grid{width:100%}\n"] }]
229
234
  }], ctorParameters: function () { return [{ type: i1.HitComponentWastageService }, { type: i2.ConfirmationService }, { type: i0.NgZone }, { type: i3.HitProductionOrdersService }]; }, propDecorators: { nmbBoxBarkodNumarasi: [{
230
235
  type: ViewChild,
231
236
  args: ['barkodNumarasiRef', { static: false }]
@@ -233,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
233
238
  type: ViewChild,
234
239
  args: ['getComponentWastageLinesGrid', { static: false }]
235
240
  }] } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWNvbXBvbmVudC13YXN0YWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VyZXRpbS15b25ldGltaS9zcmMvbGliL2NvbXBvbmVudHMvaGl0LWNvbXBvbmVudC13YXN0YWdlL2hpdC1jb21wb25lbnQtd2FzdGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1jb21wb25lbnQtd2FzdGFnZS9oaXQtY29tcG9uZW50LXdhc3RhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLENBQUM7QUFRMUMsT0FBTyxFQUdILDhCQUE4QixFQUM5Qix1QkFBdUIsR0FDMUIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sNEJBQTRCO0lBcUJyQyxZQUNxQixPQUFtQyxFQUNuQyxZQUFpQyxFQUNqQyxNQUFjLEVBQ2QsdUJBQW1EO1FBSG5ELFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUE0QjtRQXJCeEUsWUFBTyxHQUFrQztZQUNyQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsT0FBTztZQUNuQixXQUFXLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBRUYsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FB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QUNQLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDOzt5SEF2T1EsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsd1RDaEN6QyxxdVNBeUpBOzJGRHpIYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0ksMkJBQTJCO2lOQUtZLG9CQUFvQjtzQkFBcEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBQ2EseUJBQXlCO3NCQUFwRixTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgTmdab25lLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBEeERhdGFHcmlkQ29tcG9uZW50LFxyXG4gICAgRHhUZXh0Qm94Q29tcG9uZW50XHJcbn0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcclxuaW1wb3J0IG5vdGlmeSBmcm9tICdkZXZleHRyZW1lL3VpL25vdGlmeSc7XHJcbmltcG9ydCB7XHJcbiAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgQ29uZmlybWF0aW9uXHJcbn0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge0hpdFByb2R1Y3Rpb25PcmRlcnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaGl0LXByb3h5L2hpdC1wcm9kdWN0aW9uLW9yZGVycy9oaXQtcHJvZHVjdGlvbi1vcmRlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQge0dldFByb2R1Y3Rpb25PcmRlckR0b30gZnJvbSBcIi4uLy4uL2hpdC1wcm94eS9oaXQtcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb25zL21vZGVsc1wiO1xyXG5pbXBvcnQge0hpdENvbXBvbmVudFdhc3RhZ2VTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaGl0LXByb3h5L2hpdC1jb21wb25lbnQtd2FzdGFnZS9oaXQtY29tcG9uZW50LXdhc3RhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2F1c2VPZldhc3RhZ2UsXHJcbiAgICBDb21wb25lbnRXYXN0YWdlTGluZUdldER0byxcclxuICAgIENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0UmVxdWVzdCxcclxuICAgIENvbXBvbmVudFdhc3RhZ2VQb3N0RHRvLFxyXG59IGZyb20gXCIuLi8uLi9oaXQtcHJveHkvaGl0LWNvbXBvbmVudC13YXN0YWdlL21vZGVsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tU3RvcmUgZnJvbSBcImRldmV4dHJlbWUvZGF0YS9jdXN0b21fc3RvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWhpdC1jb21wb25lbnQtd2FzdGFnZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGl0LWNvbXBvbmVudC13YXN0YWdlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2hpdC1jb21wb25lbnQtd2FzdGFnZS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRDb21wb25lbnRXYXN0YWdlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdiYXJrb2ROdW1hcmFzaVJlZicsIHtzdGF0aWM6IGZhbHNlfSkgbm1iQm94QmFya29kTnVtYXJhc2k6IER4VGV4dEJveENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2dldENvbXBvbmVudFdhc3RhZ2VMaW5lc0dyaWQnLCB7c3RhdGljOiBmYWxzZX0pIGNvbXBvbmVudFdhc3RhZ2VMaW5lc0dyaWQ6IER4RGF0YUdyaWRDb21wb25lbnQ7XHJcblxyXG4gICAgb3B0aW9uczogUGFydGlhbDxDb25maXJtYXRpb24uT3B0aW9ucz4gPSB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpc1dvcmtPcmRlck5vVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNlYXJjaGVCYXNpbGRpTWk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHdvcmtPcmRlck5vOiBudW1iZXI7XHJcbiAgICBwcm9kdWN0aW9uT3JkZXI6IEdldFByb2R1Y3Rpb25PcmRlckR0bztcclxuICAgIGNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvOiBDb21wb25lbnRXYXN0YWdlUG9zdER0byA9IG5ldyBDb21wb25lbnRXYXN0YWdlUG9zdER0bztcclxuICAgIGNhdXNlT2ZXYXN0YWdlczogQ2F1c2VPZldhc3RhZ2VbXSA9IFtdO1xyXG4gICAgbG9va3VwRGF0YVNvdXJjZUNhdXNlT2ZXYXN0YWdlcyA9IHt9O1xyXG4gICAgbG9va3VwRGF0YVNvdXJjZUl0ZW1Db2RlcyA9IHt9O1xyXG4gICAgY29tcG9uZW50V2FzdGFnZXM6IENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0RHRvW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2U6IEhpdENvbXBvbmVudFdhc3RhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0aW9uT3JkZXJzU2VydmljZTogSGl0UHJvZHVjdGlvbk9yZGVyc1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmNhdXNlT2ZXYXN0YWdlcyA9IFtcclxuICAgICAgICAgICAge2lkOiBcIjFcIiwgbmFtZTogJ1BlcnNvbmVsIEtheW5ha2zEsSd9LFxyXG4gICAgICAgICAgICB7aWQ6IFwiMlwiLCBuYW1lOiAnTWFraW5lIEtheW5ha2zEsSd9LFxyXG4gICAgICAgICAgICB7aWQ6IFwiM1wiLCBuYW1lOiAnVGVkYXJpayBLYXluYWtsxLEnfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmxvb2t1cERhdGFTb3VyY2VDYXVzZU9mV2FzdGFnZXMgPSB7XHJcbiAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkTW9kZTogXCJyYXdcIixcclxuICAgICAgICAgICAgICAgIGxvYWQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXVzZU9mV2FzdGFnZXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNvcnQ6IFwibmFtZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBvblRvb2xiYXJQcmVwYXJpbmcoZTogYW55KSB7XHJcbiAgICAgICAgZS50b29sYmFyT3B0aW9ucy5pdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbG9jYXRpb246ICdhZnRlcicsICAgICAgICAgIC8vICdiZWZvcmUnIC8gJ2NlbnRlcicgLyAnYWZ0ZXInXHJcbiAgICAgICAgICAgIHdpZGdldDogJ2R4QnV0dG9uJyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgaWNvbjogJ2FkZCcsICAgICAgICAgICAgICAvLyBEZXZFeHRyZW1lIGljb24gYWTEsVxyXG4gICAgICAgICAgICAgICAgdGV4dDogJycsICAgICAgIC8vIEJ1dG9uIMO8emVyaW5kZWtpIHlhesSxXHJcbiAgICAgICAgICAgICAgICBzdHlsaW5nTW9kZTogJ291dGxpbmVkJywgLy8gJ3RleHQnIHwgJ291dGxpbmVkJyB8ICdjb250YWluZWQnXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9ybWFsJywgICAgICAgICAgLy8gJ25vcm1hbCcgfCAnZGVmYXVsdCcgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJ1xyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZUxpbmVzR3JpZC5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50V2FzdGFnZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndvcmtPcmRlck5vIHx8ICF0aGlzLnByb2R1Y3Rpb25PcmRlciB8fCAhdGhpcy5wcm9kdWN0aW9uT3JkZXIuYWJzb2x1dGVFbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIGxldCBjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdDogQ29tcG9uZW50V2FzdGFnZUxpbmVHZXRSZXF1ZXN0ID0gbmV3IENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0UmVxdWVzdDtcclxuICAgICAgICBjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdC5CYXNlUmVmID0gdGhpcy5wcm9kdWN0aW9uT3JkZXIuYWJzb2x1dGVFbnRyeTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldENvbXBvbmVudFdhc3RhZ2VMaW5lcyhjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZXMgPSByZXNwb25zZS5pdGVtcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5pdGVtTmFtZSA9IGAke2xpbmUubGluZU51bX06ICR7bGluZS5pdGVtQ29kZX0gLSAke2xpbmUuZHNjcmlwdGlvbn1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmZpcmVOZWRlbmlBZGkgPSB0aGlzLmNhdXNlT2ZXYXN0YWdlcy5maW5kKGMgPT4gYy5pZCA9PT0gbGluZS51X0ZpcmVOZWRuaSk/Lm5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JzPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNwb25zZS5lcnJvcnMuam9pbignXFxuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnQmlsZcWfZW4gZmlyZXNpIGJpbGdpbGVyaSBhbMSxbmFtYWTEsSEnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3Rpb25PcmRlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud29ya09yZGVyTm8pIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c1dvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc1dvcmtPcmRlck5vVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdGlvbk9yZGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXJzU2VydmljZS5HZXRQcm9kdWN0aW9uT3JkZXJXaXRob3V0WU1JdGVtcyh0aGlzLndvcmtPcmRlck5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzZnVsICYmIHJlc3BvbnNlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXIgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzV29ya09yZGVyTm9WYWxpZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9va3VwRGF0YVNvdXJjZUl0ZW1Db2RlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbUNvZGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRNb2RlOiBcInJhd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWNhbGx5IGNyZWF0ZSB1bmlxdWUgbGlzdCBvZiBpdGVtIGNvZGVzIGZyb20gcHJvZHVjdGlvbiBvcmRlciBsaW5lc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Rpb25PcmRlci5nZXRQcm9kdWN0aW9uT3JkZXJMaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bTogbGluZS5saW5lTnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbnRyeTogbGluZS5hYnNvbHV0ZUVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FyZWhvdXNlOiBsaW5lLndhcmVob3VzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db2RlOiBsaW5lLml0ZW1Db2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGAke2xpbmUubGluZU51bX06ICR7bGluZS5pdGVtQ29kZX0gLSAke2xpbmUuaXRlbU5hbWV9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5wcm9kdWN0aW9uT3JkZXIuZ2V0UHJvZHVjdGlvbk9yZGVyTGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAucmVkdWNlKChncm91cHMsIGxpbmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmICghZ3JvdXBzLnNvbWUoZyA9PiBnLmlkID09PSBsaW5lLml0ZW1Db2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWQ6IGxpbmUuaXRlbUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5hbWU6IGAke2xpbmUuaXRlbUNvZGV9IC0gJHtsaW5lLml0ZW1OYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBncm91cHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBcImxpbmVOdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50V2FzdGFnZXMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvcnM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3BvbnNlLmVycm9ycy5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICfEsMWfIGVtcmkgYmlsZ2lsZXJpIGFsxLFuYW1hZMSxLic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1dvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZUJhc2lsZGlNaSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ8SwxZ8gZW1yaSBiaWxnaWxlcmkgYWzEsW5hbWFkxLEuJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JrT3JkZXJOb1ZhbGlkIHx8ICF0aGlzLmNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNXb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRXYXN0YWdlUG9zdER0by5kb2N1bWVudExpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgIGxpbmUuYmFzZUVudHJ5ID0gdGhpcy5wcm9kdWN0aW9uT3JkZXIuYWJzb2x1dGVFbnRyeTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlKHRoaXMuY29tcG9uZW50V2FzdGFnZVBvc3REdG8pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3VjY2VzcygnJywgJ8SwxZ9sZW0gYmHFn2FyxLF5bGEgdGFtYW1sYW5kxLEuJywgdGhpcy5vcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xlYXJBbGwoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JzPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNwb25zZS5lcnJvcnMuam9pbignXFxuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnRmlyZSBpxZ9sZW1pIHPEsXJhc8SxbmRhIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNXb3JrT3JkZXJOb1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53b3JrT3JkZXJObyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZVBvc3REdG8gPSBuZXcgQ29tcG9uZW50V2FzdGFnZVBvc3REdG87XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvb2t1cERhdGFTb3VyY2VJdGVtQ29kZXMgPSB7fTtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm1iQm94QmFya29kTnVtYXJhc2kuaW5zdGFuY2UuZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c1dvcmtPcmRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ubWJCb3hCYXJrb2ROdW1hcmFzaT8uaW5zdGFuY2U/LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0Vycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCBtZXNzYWdlLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgIG5vdGlmeSh7bWVzc2FnZSwgdHlwZTogJ2Vycm9yJ30pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxhYnAtcGFnZSBbYnJlYWRjcnVtYl09XCJmYWxzZVwiPlxyXG4gICAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJwYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWxnLWVuZCBwdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNXb3JrT3JkZXJOb1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zYXZlIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2FybmluZyBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1icm9vbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5DbGVhbicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtbnVtYmVyLWJveCAjYmFya29kTnVtYXJhc2lSZWYgY2xhc3M9XCJtZS0xXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIFttaW5dPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLldvcmtPcmRlck5vJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ3b3JrT3JkZXJOb1wiIChvbkVudGVyS2V5KT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hlQmFzaWxkaU1pIHx8IGlzV29ya09yZGVyTm9WYWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC1udW1iZXItYm94PlxyXG4gICAgICAgICAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIGljb249XCJzZWFyY2hcIiB0eXBlPVwiZGVmYXVsdFwiIChvbkNsaWNrKT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaGVCYXNpbGRpTWkgfHwgaXNXb3JrT3JkZXJOb1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJpc1dvcmtPcmRlck5vVmFsaWRcIj5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBzdHlsZT1cIndpZHRoOjEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNvbnZleW9ySW5mb3JtYXRpb24nIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJwcm9kdWN0aW9uT3JkZXIudV9IYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IHN0eWxlPVwid2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuUHJvZHVjdERlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicHJvZHVjdGlvbk9yZGVyLnByb2R1Y3REZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgICA8ZHgtbnVtYmVyLWJveCBzdHlsZT1cIndpZHRoOjEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuUHJvZHVjdFF1YW50aXR5JyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJwcm9kdWN0aW9uT3JkZXIucGxhbm5lZFF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4LW51bWJlci1ib3g+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgI2dldENvbXBvbmVudFdhc3RhZ2VMaW5lc0dyaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvLmRvY3VtZW50TGluZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ109XCJ7IG1vZGU6ICdub25lJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXBhaW50Q2hhbmdlc09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVG9vbGJhclByZXBhcmluZyk9XCJvblRvb2xiYXJQcmVwYXJpbmcoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwicm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV3Um93UG9zaXRpb25dPVwiJ2xhc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dEZWxldGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dVcGRhdGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlSWNvbnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1lZGl0aW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJiYXNlTGluZVwiIFttaW5XaWR0aF09XCIyNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuSXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9ufX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbG9va3VwIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwibG9va3VwRGF0YVNvdXJjZUl0ZW1Db2Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cIml0ZW1OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcj1cImxpbmVOdW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxvb2t1cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbGlkYXRpb24tcnVsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ1X0ZpcmVOZWRlbmlcIiBbbWluV2lkdGhdPVwiMTI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNhdXNlT2ZXYXN0YWdlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWxvb2t1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJsb29rdXBEYXRhU291cmNlQ2F1c2VPZldhc3RhZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tbG9va3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS12YWxpZGF0aW9uLXJ1bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5RdWFudGl0eU9mV2FzdGFnZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktdmFsaWRhdGlvbi1ydWxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWVyaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS12YWxpZGF0aW9uLXJ1bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidV9GaXJlTkRlc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZT1cInN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5EZXNjT2ZXYXN0YWdlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXZhbGlkYXRpb24tcnVsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS12YWxpZGF0aW9uLXJ1bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImNvbXBvbmVudFdhc3RhZ2VzICYmIGNvbXBvbmVudFdhc3RhZ2VzLmxlbmd0aCAmJiBpc1dvcmtPcmRlck5vVmFsaWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1Pnt7ICdVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db21wb25lbnRXYXN0YWdlUmVjb3JkcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCAjaW5zdGFuY2VDb21wb25lbnRXYXN0YWdlc0dyaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImNvbXBvbmVudFdhc3RhZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmddPVwieyBtb2RlOiAnbm9uZScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwYWludENoYW5nZXNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0VudHJ5XCIgW21pbldpZHRoXT1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNvbXBvbmVudFdhc3RhZ2VSZWNvcmRzLkRvY0VudHJ5JyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXRlbU5hbWVcIiBbbWluV2lkdGhdPVwiMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNvbXBvbmVudFdhc3RhZ2VSZWNvcmRzLkl0ZW1OYW1lJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZmlyZU5lZGVuaUFkaVwiIFttaW5XaWR0aF09XCIxMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuQ29tcG9uZW50V2FzdGFnZVJlY29yZHMuQ2F1c2VPZldhc3RhZ2UnIHwgYWJwTG9jYWxpemF0aW9ufX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJxdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNvbXBvbmVudFdhc3RhZ2VSZWNvcmRzLlF1YW50aXR5T2ZXYXN0YWdlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidV9GaXJlTkRlc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZT1cInN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db21wb25lbnRXYXN0YWdlUmVjb3Jkcy5EZXNjT2ZXYXN0YWdlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9hYnAtcGFnZT5cclxuIl19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWNvbXBvbmVudC13YXN0YWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VyZXRpbS15b25ldGltaS9zcmMvbGliL2NvbXBvbmVudHMvaGl0LWNvbXBvbmVudC13YXN0YWdlL2hpdC1jb21wb25lbnQtd2FzdGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1jb21wb25lbnQtd2FzdGFnZS9oaXQtY29tcG9uZW50LXdhc3RhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLENBQUM7QUFRMUMsT0FBTyxFQUdILDhCQUE4QixFQUM5Qix1QkFBdUIsR0FDMUIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sNEJBQTRCO0lBc0JyQyxZQUNxQixPQUFtQyxFQUNuQyxZQUFpQyxFQUNqQyxNQUFjLEVBQ2QsdUJBQW1EO1FBSG5ELFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUE0QjtRQXRCeEUsWUFBTyxHQUFrQztZQUNyQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsT0FBTztZQUNuQixXQUFXLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBRUYsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNw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QUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQWU7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7O3lIQTVPUSw0QkFBNEI7NkdBQTVCLDRCQUE0Qix3VENoQ3pDLHloU0FxSkE7MkZEckhhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDSSwyQkFBMkI7aU5BS1ksb0JBQW9CO3NCQUFwRSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDYSx5QkFBeUI7c0JBQXBGLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIER4RGF0YUdyaWRDb21wb25lbnQsXHJcbiAgICBEeFRleHRCb3hDb21wb25lbnRcclxufSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgbm90aWZ5IGZyb20gJ2RldmV4dHJlbWUvdWkvbm90aWZ5JztcclxuaW1wb3J0IHtcclxuICAgIENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBDb25maXJtYXRpb25cclxufSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7SGl0UHJvZHVjdGlvbk9yZGVyc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9oaXQtcHJveHkvaGl0LXByb2R1Y3Rpb24tb3JkZXJzL2hpdC1wcm9kdWN0aW9uLW9yZGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7R2V0UHJvZHVjdGlvbk9yZGVyRHRvfSBmcm9tIFwiLi4vLi4vaGl0LXByb3h5L2hpdC1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbnMvbW9kZWxzXCI7XHJcbmltcG9ydCB7SGl0Q29tcG9uZW50V2FzdGFnZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9oaXQtcHJveHkvaGl0LWNvbXBvbmVudC13YXN0YWdlL2hpdC1jb21wb25lbnQtd2FzdGFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBDYXVzZU9mV2FzdGFnZSxcclxuICAgIENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0RHRvLFxyXG4gICAgQ29tcG9uZW50V2FzdGFnZUxpbmVHZXRSZXF1ZXN0LFxyXG4gICAgQ29tcG9uZW50V2FzdGFnZVBvc3REdG8sXHJcbn0gZnJvbSBcIi4uLy4uL2hpdC1wcm94eS9oaXQtY29tcG9uZW50LXdhc3RhZ2UvbW9kZWxzXCI7XHJcbmltcG9ydCBDdXN0b21TdG9yZSBmcm9tIFwiZGV2ZXh0cmVtZS9kYXRhL2N1c3RvbV9zdG9yZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItaGl0LWNvbXBvbmVudC13YXN0YWdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaXQtY29tcG9uZW50LXdhc3RhZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vaGl0LWNvbXBvbmVudC13YXN0YWdlLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdENvbXBvbmVudFdhc3RhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2JhcmtvZE51bWFyYXNpUmVmJywge3N0YXRpYzogZmFsc2V9KSBubWJCb3hCYXJrb2ROdW1hcmFzaTogRHhUZXh0Qm94Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnZ2V0Q29tcG9uZW50V2FzdGFnZUxpbmVzR3JpZCcsIHtzdGF0aWM6IGZhbHNlfSkgY29tcG9uZW50V2FzdGFnZUxpbmVzR3JpZDogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICBvcHRpb25zOiBQYXJ0aWFsPENvbmZpcm1hdGlvbi5PcHRpb25zPiA9IHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpc1dvcmtPcmRlck5vVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNlYXJjaGVCYXNpbGRpTWk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHdvcmtPcmRlck5vOiBudW1iZXI7XHJcbiAgICBwcm9kdWN0aW9uT3JkZXI6IEdldFByb2R1Y3Rpb25PcmRlckR0bztcclxuICAgIGNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvOiBDb21wb25lbnRXYXN0YWdlUG9zdER0byA9IG5ldyBDb21wb25lbnRXYXN0YWdlUG9zdER0bztcclxuICAgIGNhdXNlT2ZXYXN0YWdlczogQ2F1c2VPZldhc3RhZ2VbXSA9IFtdO1xyXG4gICAgbG9va3VwRGF0YVNvdXJjZUNhdXNlT2ZXYXN0YWdlcyA9IHt9O1xyXG4gICAgbG9va3VwRGF0YVNvdXJjZUl0ZW1Db2RlcyA9IHt9O1xyXG4gICAgY29tcG9uZW50V2FzdGFnZXM6IENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0RHRvW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2U6IEhpdENvbXBvbmVudFdhc3RhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0aW9uT3JkZXJzU2VydmljZTogSGl0UHJvZHVjdGlvbk9yZGVyc1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmNhdXNlT2ZXYXN0YWdlcyA9IFtcclxuICAgICAgICAgICAge2lkOiBcIjFcIiwgbmFtZTogJ1BlcnNvbmVsIEtheW5ha2zEsSd9LFxyXG4gICAgICAgICAgICB7aWQ6IFwiMlwiLCBuYW1lOiAnTWFraW5lIEtheW5ha2zEsSd9LFxyXG4gICAgICAgICAgICB7aWQ6IFwiM1wiLCBuYW1lOiAnVGVkYXJpayBLYXluYWtsxLEnfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmxvb2t1cERhdGFTb3VyY2VDYXVzZU9mV2FzdGFnZXMgPSB7XHJcbiAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkTW9kZTogXCJyYXdcIixcclxuICAgICAgICAgICAgICAgIGxvYWQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXVzZU9mV2FzdGFnZXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNvcnQ6IFwibmFtZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBvblRvb2xiYXJQcmVwYXJpbmcoZTogYW55KSB7XHJcbiAgICAgICAgZS50b29sYmFyT3B0aW9ucy5pdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbG9jYXRpb246ICdhZnRlcicsICAgICAgICAgIC8vICdiZWZvcmUnIC8gJ2NlbnRlcicgLyAnYWZ0ZXInXHJcbiAgICAgICAgICAgIHdpZGdldDogJ2R4QnV0dG9uJyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgaWNvbjogJ2FkZCcsICAgICAgICAgICAgICAvLyBEZXZFeHRyZW1lIGljb24gYWTEsVxyXG4gICAgICAgICAgICAgICAgdGV4dDogJycsICAgICAgIC8vIEJ1dG9uIMO8emVyaW5kZWtpIHlhesSxXHJcbiAgICAgICAgICAgICAgICBzdHlsaW5nTW9kZTogJ291dGxpbmVkJywgLy8gJ3RleHQnIHwgJ291dGxpbmVkJyB8ICdjb250YWluZWQnXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9ybWFsJywgICAgICAgICAgLy8gJ25vcm1hbCcgfCAnZGVmYXVsdCcgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJ1xyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZUxpbmVzR3JpZC5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50V2FzdGFnZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndvcmtPcmRlck5vIHx8ICF0aGlzLnByb2R1Y3Rpb25PcmRlciB8fCAhdGhpcy5wcm9kdWN0aW9uT3JkZXIuYWJzb2x1dGVFbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIGxldCBjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdDogQ29tcG9uZW50V2FzdGFnZUxpbmVHZXRSZXF1ZXN0ID0gbmV3IENvbXBvbmVudFdhc3RhZ2VMaW5lR2V0UmVxdWVzdDtcclxuICAgICAgICBjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdC5CYXNlUmVmID0gdGhpcy5wcm9kdWN0aW9uT3JkZXIuYWJzb2x1dGVFbnRyeTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldENvbXBvbmVudFdhc3RhZ2VMaW5lcyhjb21wb25lbnRXYXN0YWdlR2V0UmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZXMgPSByZXNwb25zZS5pdGVtcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5pdGVtTmFtZSA9IGAke2xpbmUubGluZU51bX06ICR7bGluZS5pdGVtQ29kZX0gLSAke2xpbmUuZHNjcmlwdGlvbn1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmZpcmVOZWRlbmlBZGkgPSB0aGlzLmNhdXNlT2ZXYXN0YWdlcy5maW5kKGMgPT4gYy5pZCA9PT0gbGluZS51X0ZpcmVOZWRuaSk/Lm5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JzPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNwb25zZS5lcnJvcnMuam9pbignXFxuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnQmlsZcWfZW4gZmlyZXNpIGJpbGdpbGVyaSBhbMSxbmFtYWTEsSEnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3Rpb25PcmRlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud29ya09yZGVyTm8pIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c1dvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc1dvcmtPcmRlck5vVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdGlvbk9yZGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXJzU2VydmljZS5HZXRQcm9kdWN0aW9uT3JkZXJXaXRob3V0WU1JdGVtcyh0aGlzLndvcmtPcmRlck5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzZnVsICYmIHJlc3BvbnNlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXIgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzV29ya09yZGVyTm9WYWxpZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9va3VwRGF0YVNvdXJjZUl0ZW1Db2RlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbUNvZGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRNb2RlOiBcInJhd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWNhbGx5IGNyZWF0ZSB1bmlxdWUgbGlzdCBvZiBpdGVtIGNvZGVzIGZyb20gcHJvZHVjdGlvbiBvcmRlciBsaW5lc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Rpb25PcmRlci5nZXRQcm9kdWN0aW9uT3JkZXJMaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bTogbGluZS5saW5lTnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbnRyeTogbGluZS5hYnNvbHV0ZUVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FyZWhvdXNlOiBsaW5lLndhcmVob3VzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db2RlOiBsaW5lLml0ZW1Db2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGAke2xpbmUubGluZU51bX06ICR7bGluZS5pdGVtQ29kZX0gLSAke2xpbmUuaXRlbU5hbWV9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5wcm9kdWN0aW9uT3JkZXIuZ2V0UHJvZHVjdGlvbk9yZGVyTGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAucmVkdWNlKChncm91cHMsIGxpbmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmICghZ3JvdXBzLnNvbWUoZyA9PiBnLmlkID09PSBsaW5lLml0ZW1Db2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWQ6IGxpbmUuaXRlbUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5hbWU6IGAke2xpbmUuaXRlbUNvZGV9IC0gJHtsaW5lLml0ZW1OYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBncm91cHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBcImxpbmVOdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50V2FzdGFnZXMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvcnM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3BvbnNlLmVycm9ycy5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICfEsMWfIGVtcmkgYmlsZ2lsZXJpIGFsxLFuYW1hZMSxLic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1dvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZUJhc2lsZGlNaSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ8SwxZ8gZW1yaSBiaWxnaWxlcmkgYWzEsW5hbWFkxLEuJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzV29ya09yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JrT3JkZXJOb1ZhbGlkIHx8ICF0aGlzLmNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvIHx8IHRoaXMuaXNTYXZpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c1dvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFdhc3RhZ2VQb3N0RHRvLmRvY3VtZW50TGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgbGluZS5iYXNlRW50cnkgPSB0aGlzLnByb2R1Y3Rpb25PcmRlci5hYnNvbHV0ZUVudHJ5O1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5jcmVhdGUodGhpcy5jb21wb25lbnRXYXN0YWdlUG9zdER0bykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWNjZXNzKCcnLCAnxLDFn2xlbSBiYcWfYXLEsXlsYSB0YW1hbWxhbmTEsS4nLCB0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGVhckFsbCgpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvcnM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3BvbnNlLmVycm9ycy5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdGaXJlIGnFn2xlbWkgc8SxcmFzxLFuZGEgYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNXb3JrT3JkZXJOb1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hlQmFzaWxkaU1pID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53b3JrT3JkZXJObyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0aW9uT3JkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50V2FzdGFnZVBvc3REdG8gPSBuZXcgQ29tcG9uZW50V2FzdGFnZVBvc3REdG87XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb29rdXBEYXRhU291cmNlSXRlbUNvZGVzID0ge307XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5tYkJveEJhcmtvZE51bWFyYXNpLmluc3RhbmNlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9jdXNXb3JrT3JkZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm1iQm94QmFya29kTnVtYXJhc2k/Lmluc3RhbmNlPy5mb2N1cygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgbWVzc2FnZSwgdGhpcy5vcHRpb25zKTtcclxuICAgICAgICBub3RpZnkoe21lc3NhZ2UsIHR5cGU6ICdlcnJvcid9KTtcclxuICAgIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICAgIDxhYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lciBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLlRpdGxlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1sZy1lbmQgcHQtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzV29ya09yZGVyTm9WYWxpZCB8fCBpc1NhdmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2F2ZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5TYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhckFsbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnJvb20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuQ2xlYW4nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggI2JhcmtvZE51bWFyYXNpUmVmIGNsYXNzPVwibWUtMVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBbbWluXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Xb3JrT3JkZXJObycgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwid29ya09yZGVyTm9cIiAob25FbnRlcktleSk9XCJnZXRQcm9kdWN0aW9uT3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoZUJhc2lsZGlNaSB8fCBpc1dvcmtPcmRlck5vVmFsaWRcIj5cclxuICAgICAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgICAgICAgIDxkeC1idXR0b24gc3R5bGU9XCJtYXJnaW4tdG9wOiA3LjVweDtcIiBpY29uPVwic2VhcmNoXCIgdHlwZT1cImRlZmF1bHRcIiAob25DbGljayk9XCJnZXRQcm9kdWN0aW9uT3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hlQmFzaWxkaU1pIHx8IGlzV29ya09yZGVyTm9WYWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwiaXNXb3JrT3JkZXJOb1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db252ZXlvckluZm9ybWF0aW9uJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicHJvZHVjdGlvbk9yZGVyLnVfSGF0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBzdHlsZT1cIndpZHRoOjEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLlByb2R1Y3REZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInByb2R1Y3Rpb25PcmRlci5wcm9kdWN0RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLlByb2R1Y3RRdWFudGl0eScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicHJvZHVjdGlvbk9yZGVyLnBsYW5uZWRRdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC1udW1iZXItYm94PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHgtZGF0YS1ncmlkICNnZXRDb21wb25lbnRXYXN0YWdlTGluZXNHcmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJjb21wb25lbnRXYXN0YWdlUG9zdER0by5kb2N1bWVudExpbmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmddPVwieyBtb2RlOiAnbm9uZScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwYWludENoYW5nZXNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblRvb2xiYXJQcmVwYXJpbmcpPVwib25Ub29sYmFyUHJlcGFyaW5nKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1lZGl0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25ld1Jvd1Bvc2l0aW9uXT1cIidsYXN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93RGVsZXRpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93VXBkYXRpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZUljb25zXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tZWRpdGluZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYmFzZUxpbmVcIiBbbWluV2lkdGhdPVwiMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWxvb2t1cCBzdHlsZT1cIndpZHRoOjEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImxvb2t1cERhdGFTb3VyY2VJdGVtQ29kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJpdGVtTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJsaW5lTnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sb29rdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXZhbGlkYXRpb24tcnVsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS12YWxpZGF0aW9uLXJ1bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidV9GaXJlTmVkZW5pXCIgW21pbldpZHRoXT1cIjEyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5DYXVzZU9mV2FzdGFnZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sb29rdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwibG9va3VwRGF0YVNvdXJjZUNhdXNlT2ZXYXN0YWdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwic3RyaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxvb2t1cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwic3RyaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktdmFsaWRhdGlvbi1ydWxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuUXVhbnRpdHlPZldhc3RhZ2UnIHwgYWJwTG9jYWxpemF0aW9ufX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbGlkYXRpb24tcnVsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1lcmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktdmFsaWRhdGlvbi1ydWxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInVfRmlyZU5EZXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuRGVzY09mV2FzdGFnZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJjb21wb25lbnRXYXN0YWdlcyAmJiBjb21wb25lbnRXYXN0YWdlcy5sZW5ndGggJiYgaXNXb3JrT3JkZXJOb1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNT57eyAnVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuQ29tcG9uZW50V2FzdGFnZVJlY29yZHMnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oNT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgI2luc3RhbmNlQ29tcG9uZW50V2FzdGFnZXNHcmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJjb21wb25lbnRXYXN0YWdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cInsgbW9kZTogJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NFbnRyeVwiIFttaW5XaWR0aF09XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db21wb25lbnRXYXN0YWdlUmVjb3Jkcy5Eb2NFbnRyeScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cIml0ZW1OYW1lXCIgW21pbldpZHRoXT1cIjI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db21wb25lbnRXYXN0YWdlUmVjb3Jkcy5JdGVtTmFtZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImZpcmVOZWRlbmlBZGlcIiBbbWluV2lkdGhdPVwiMTI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J1VyZXRpbVlvbmV0aW1pOjpDb21wb25lbnRXYXN0YWdlLkNvbXBvbmVudFdhc3RhZ2VSZWNvcmRzLkNhdXNlT2ZXYXN0YWdlJyB8IGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydVcmV0aW1Zb25ldGltaTo6Q29tcG9uZW50V2FzdGFnZS5Db21wb25lbnRXYXN0YWdlUmVjb3Jkcy5RdWFudGl0eU9mV2FzdGFnZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInVfRmlyZU5EZXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snVXJldGltWW9uZXRpbWk6OkNvbXBvbmVudFdhc3RhZ2UuQ29tcG9uZW50V2FzdGFnZVJlY29yZHMuRGVzY09mV2FzdGFnZScgfCBhYnBMb2NhbGl6YXRpb259fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==