@libs-ui/components-image-editor 0.1.1-1

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.
@@ -0,0 +1,6 @@
1
+ export * from './image-editor.component';
2
+ export * from './interfaces/image-editor.interface';
3
+ export * from './interfaces/function-control-event.interface';
4
+ export * from './resize/resize.component';
5
+ export * from './demo/image-editor-demo.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ltYWdlLWVkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2ltYWdlLWVkaXRvci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZW1vL2ltYWdlLWVkaXRvci1kZW1vLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgY3JvcEltYWdlOiAoKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIHNldExvYWRpbmdTdGF0ZTogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ludGVyZmFjZXMvaW1hZ2UtZWRpdG9yLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVFlQRV9BU1BFQ1RfUkFUSU8gfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2F2ZUZpbGUge1xuICBmaWxlOiBCbG9iO1xuICB1cmw6IHN0cmluZztcbiAgbW9kZTogVFlQRV9NT0RFX1NBVkU7XG59XG5cbmV4cG9ydCB0eXBlIFRZUEVfTU9ERV9TQVZFID0gJ3NhdmUtZmlsZScgfCAnc2F2ZS1hcGknIHwgJ3NhdmUtYXBpLWFzLW5ldy1maWxlJztcbmV4cG9ydCBpbnRlcmZhY2UgSUNyb3BSYXRpb0l0ZW0ge1xuICBrZXk6IFRZUEVfQVNQRUNUX1JBVElPO1xuICBpY29uOiBzdHJpbmc7XG4gIHZhbHVlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDcm9wU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWN0Q2xpcCB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzaXplRGF0YSB7XG4gIHJhdGlvOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1JFU0laRV9TVEFURSA9ICdUTCcgfCAnQkwnIHwgJ1RSJyB8ICdCUicgfCAnVkwnIHwgJ1ZSJyB8ICdIVCcgfCAnSEInIHwgJ25vbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdGFydE1vdXNlRGltIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBpbWFnZVRvcDogbnVtYmVyO1xuICBpbWFnZUxlZnQ6IG51bWJlcjtcbiAgaW1hZ2VXaWR0aDogbnVtYmVyO1xuICBpbWFnZUhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdHlsZXMge1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICB0b3A/OiBudW1iZXI7XG4gIGxlZnQ/OiBudW1iZXI7XG4gIGRpc3BsYXk/OiBzdHJpbmc7XG4gIHNyYz86IHN0cmluZztcbiAgY2xpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTU9ERV9FRElUID0gJ3NhdmUtZmlsZScgfCAnc2F2ZS1hcGknO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWltYWdlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2xpYnMtdWktY29tcG9uZW50cy1pbWFnZS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,126 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { getDataUrl } from '../defines/image-editor.define';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { LibsUiComponentsModalComponent } from '@libs-ui/components-modal';
5
+ import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
6
+ import { convertBase64ToBlob, convertBlobToFile, getLabelBySizeFile } from '@libs-ui/utils';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ export class LibsUiComponentsImageEditorResizeComponent {
10
+ buttonsFooter;
11
+ image = new Image();
12
+ originFileSize;
13
+ currentFileSize;
14
+ inputValidFunctionControl;
15
+ resizeData;
16
+ originWidth;
17
+ originHeight;
18
+ src;
19
+ zIndex;
20
+ mimetype;
21
+ outClose = new EventEmitter();
22
+ outSave = new EventEmitter();
23
+ constructor() {
24
+ this.buttonsFooter = [
25
+ {
26
+ type: 'button-third',
27
+ label: 'i18n_cancel',
28
+ action: async () => this.outClose.emit(),
29
+ },
30
+ {
31
+ label: 'i18n_save',
32
+ action: async () => {
33
+ this.outSave.emit(this.resizeData);
34
+ this.outClose.emit();
35
+ },
36
+ },
37
+ ];
38
+ this.inputValidFunctionControl = [];
39
+ }
40
+ async ngOnInit() {
41
+ const fileSize = await this.getFileSize();
42
+ this.currentFileSize = fileSize;
43
+ this.originFileSize = fileSize;
44
+ }
45
+ async handlerResizeRatio() {
46
+ let ratio = parseInt(`${this.resizeData.ratio}`);
47
+ if (!ratio || ratio < 0) {
48
+ return;
49
+ }
50
+ if (ratio > 100) {
51
+ ratio = 100;
52
+ this.resizeData.ratio = ratio;
53
+ }
54
+ this.resizeData.width = Math.max(parseInt(`${(this.originWidth * ratio) / 100}`), 1);
55
+ this.resizeData.height = Math.max(parseInt(`${(this.originHeight * ratio) / 100}`), 1);
56
+ // this.inputValidFunctionControl.forEach(item => item.detectChanges());
57
+ this.currentFileSize = await this.getFileSize();
58
+ }
59
+ getFileSize() {
60
+ return new Promise((resolve) => {
61
+ this.image.onload = () => {
62
+ const canvas = document.createElement('canvas');
63
+ canvas.width = this.resizeData.width;
64
+ canvas.height = this.resizeData.height;
65
+ const ctx = canvas.getContext('2d');
66
+ if (ctx) {
67
+ ctx.drawImage(this.image, 0, 0, canvas.width, canvas.height);
68
+ }
69
+ const src = getDataUrl(canvas, this.mimetype, this.src);
70
+ const file = convertBase64ToBlob(src);
71
+ resolve(getLabelBySizeFile(convertBlobToFile(file, Date.now().toLocaleString()).size));
72
+ };
73
+ this.image.src = this.src;
74
+ });
75
+ }
76
+ handlerResizeWidth() {
77
+ this.processResizeWidthOrHeight('width', 'height', this.originWidth, this.originHeight);
78
+ }
79
+ handlerResizeHeight() {
80
+ this.processResizeWidthOrHeight('height', 'width', this.originHeight, this.originWidth);
81
+ }
82
+ async processResizeWidthOrHeight(resizeBy, fieldResize, originByValue, originOtherValue) {
83
+ const value = parseInt(`${this.resizeData[resizeBy]}`);
84
+ if (!value || value > originByValue) {
85
+ return;
86
+ }
87
+ this.resizeData[fieldResize] = Math.max(parseInt(`${(originOtherValue * value) / originByValue}`), 1);
88
+ this.resizeData.ratio = Math.max(parseInt(`${(100 * value) / originByValue}`), 1);
89
+ this.currentFileSize = await this.getFileSize();
90
+ }
91
+ handlerInputValidFunctionControl(event) {
92
+ this.inputValidFunctionControl.push(event);
93
+ }
94
+ handlerEvent(event) {
95
+ if (event === 'close') {
96
+ this.outClose.emit();
97
+ }
98
+ }
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LibsUiComponentsImageEditorResizeComponent, isStandalone: true, selector: "libs-ui-components-image_editor-resize", inputs: { resizeData: "resizeData", originWidth: "originWidth", originHeight: "originHeight", src: "src", zIndex: "zIndex", mimetype: "mimetype" }, outputs: { outClose: "outClose", outSave: "outSave" }, ngImport: i0, template: "<libs_ui-components-modal\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">{{ 'i18n_ratio_size' | translate }} (%)</div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{ isRequired: true }\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\"></div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate: { current_size: currentFileSize, original_size: originFileSize } }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }] });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'libs-ui-components-image_editor-resize', standalone: true, imports: [TranslateModule, LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent], template: "<libs_ui-components-modal\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">{{ 'i18n_ratio_size' | translate }} (%)</div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{ isRequired: true }\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid\n [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\"></div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate: { current_size: currentFileSize, original_size: originFileSize } }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
105
+ }], ctorParameters: () => [], propDecorators: { resizeData: [{
106
+ type: Input,
107
+ args: [{ required: true }]
108
+ }], originWidth: [{
109
+ type: Input,
110
+ args: [{ required: true }]
111
+ }], originHeight: [{
112
+ type: Input,
113
+ args: [{ required: true }]
114
+ }], src: [{
115
+ type: Input,
116
+ args: [{ required: true }]
117
+ }], zIndex: [{
118
+ type: Input
119
+ }], mimetype: [{
120
+ type: Input
121
+ }], outClose: [{
122
+ type: Output
123
+ }], outSave: [{
124
+ type: Output
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2ltYWdlLWVkaXRvci9zcmMvcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdEQsT0FBTyxFQUFFLDhCQUE4QixFQUFvQixNQUFNLDJCQUEyQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFTNUYsTUFBTSxPQUFPLDBDQUEwQztJQUMzQyxhQUFhLENBQWlCO0lBQzlCLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3BCLGNBQWMsQ0FBVTtJQUN4QixlQUFlLENBQVU7SUFFM0IseUJBQXlCLENBQXlDO0lBRS9DLFVBQVUsQ0FBZTtJQUN6QixXQUFXLENBQVU7SUFDckIsWUFBWSxDQUFVO0lBQ3RCLEdBQUcsQ0FBVTtJQUMvQixNQUFNLENBQVU7SUFDaEIsUUFBUSxDQUFVO0lBRVIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFN0Q7UUFDRSxJQUFJLENBQUMsYUFBYSxH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RyxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVTLGdDQUFnQyxDQUFDLEtBQXNDO1FBQy9FLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVTLFlBQVksQ0FBQyxLQUF1QjtRQUM1QyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO3dHQTFHVSwwQ0FBMEM7NEZBQTFDLDBDQUEwQyw2U0NqQnZELG8yR0E0RUEsMkNEN0RZLGVBQWUsNEZBQUUsOEJBQThCLG10QkFBRSxvQ0FBb0M7OzRGQUVwRiwwQ0FBMEM7a0JBUHRELFNBQVM7K0JBRUUsd0NBQXdDLGNBRXRDLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxvQ0FBb0MsQ0FBQzt3REFVckUsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsV0FBVztzQkFBckMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsR0FBRztzQkFBN0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVhLFFBQVE7c0JBQTFCLE1BQU07Z0JBQ1ksT0FBTztzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldERhdGFVcmwgfSBmcm9tICcuLi9kZWZpbmVzL2ltYWdlLWVkaXRvci5kZWZpbmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgSVJlc2l6ZURhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ltYWdlLWVkaXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50LCBUWVBFX01PREFMX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZCc7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBjb252ZXJ0QmxvYlRvRmlsZSwgZ2V0TGFiZWxCeVNpemVGaWxlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzLXVpLWNvbXBvbmVudHMtaW1hZ2VfZWRpdG9yLXJlc2l6ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNpemUuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBidXR0b25zRm9vdGVyOiBBcnJheTxJQnV0dG9uPjtcbiAgcHJvdGVjdGVkIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHByb3RlY3RlZCBvcmlnaW5GaWxlU2l6ZSE6IHN0cmluZztcbiAgcHJvdGVjdGVkIGN1cnJlbnRGaWxlU2l6ZSE6IHN0cmluZztcblxuICBwcml2YXRlIGlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2w6IEFycmF5PElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+O1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHJlc2l6ZURhdGEhOiBJUmVzaXplRGF0YTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgb3JpZ2luV2lkdGghOiBudW1iZXI7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG9yaWdpbkhlaWdodCE6IG51bWJlcjtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc3JjITogc3RyaW5nO1xuICBASW5wdXQoKSB6SW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIG1pbWV0eXBlPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBvdXRDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG91dFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPElSZXNpemVEYXRhPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYnV0dG9uc0Zvb3RlciA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2J1dHRvbi10aGlyZCcsXG4gICAgICAgIGxhYmVsOiAnaTE4bl9jYW5jZWwnLFxuICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3V0Q2xvc2UuZW1pdCgpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdpMThuX3NhdmUnLFxuICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLm91dFNhdmUuZW1pdCh0aGlzLnJlc2l6ZURhdGEpO1xuICAgICAgICAgIHRoaXMub3V0Q2xvc2UuZW1pdCgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCA9IFtdO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVNpemUgPSBhd2FpdCB0aGlzLmdldEZpbGVTaXplKCk7XG5cbiAgICB0aGlzLmN1cnJlbnRGaWxlU2l6ZSA9IGZpbGVTaXplO1xuICAgIHRoaXMub3JpZ2luRmlsZVNpemUgPSBmaWxlU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVzaXplUmF0aW8oKSB7XG4gICAgbGV0IHJhdGlvID0gcGFyc2VJbnQoYCR7dGhpcy5yZXNpemVEYXRhLnJhdGlvfWApO1xuXG4gICAgaWYgKCFyYXRpbyB8fCByYXRpbyA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJhdGlvID4gMTAwKSB7XG4gICAgICByYXRpbyA9IDEwMDtcbiAgICAgIHRoaXMucmVzaXplRGF0YS5yYXRpbyA9IHJhdGlvO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZURhdGEud2lkdGggPSBNYXRoLm1heChwYXJzZUludChgJHsodGhpcy5vcmlnaW5XaWR0aCAqIHJhdGlvKSAvIDEwMH1gKSwgMSk7XG4gICAgdGhpcy5yZXNpemVEYXRhLmhlaWdodCA9IE1hdGgubWF4KHBhcnNlSW50KGAkeyh0aGlzLm9yaWdpbkhlaWdodCAqIHJhdGlvKSAvIDEwMH1gKSwgMSk7XG4gICAgLy8gdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sLmZvckVhY2goaXRlbSA9PiBpdGVtLmRldGVjdENoYW5nZXMoKSk7XG4gICAgdGhpcy5jdXJyZW50RmlsZVNpemUgPSBhd2FpdCB0aGlzLmdldEZpbGVTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVTaXplKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gdGhpcy5yZXNpemVEYXRhLndpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5yZXNpemVEYXRhLmhlaWdodDtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3JjID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUsIHRoaXMuc3JjKTtcbiAgICAgICAgY29uc3QgZmlsZSA9IGNvbnZlcnRCYXNlNjRUb0Jsb2Ioc3JjKTtcblxuICAgICAgICByZXNvbHZlKGdldExhYmVsQnlTaXplRmlsZShjb252ZXJ0QmxvYlRvRmlsZShmaWxlLCBEYXRlLm5vdygpLnRvTG9jYWxlU3RyaW5nKCkpLnNpemUpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuc3JjO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNpemVXaWR0aCgpIHtcbiAgICB0aGlzLnByb2Nlc3NSZXNpemVXaWR0aE9ySGVpZ2h0KCd3aWR0aCcsICdoZWlnaHQnLCB0aGlzLm9yaWdpbldpZHRoLCB0aGlzLm9yaWdpbkhlaWdodCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2l6ZUhlaWdodCgpIHtcbiAgICB0aGlzLnByb2Nlc3NSZXNpemVXaWR0aE9ySGVpZ2h0KCdoZWlnaHQnLCAnd2lkdGgnLCB0aGlzLm9yaWdpbkhlaWdodCwgdGhpcy5vcmlnaW5XaWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NSZXNpemVXaWR0aE9ySGVpZ2h0KHJlc2l6ZUJ5OiAnd2lkdGgnIHwgJ2hlaWdodCcsIGZpZWxkUmVzaXplOiAnd2lkdGgnIHwgJ2hlaWdodCcsIG9yaWdpbkJ5VmFsdWU6IG51bWJlciwgb3JpZ2luT3RoZXJWYWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChgJHt0aGlzLnJlc2l6ZURhdGFbcmVzaXplQnldfWApO1xuXG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA+IG9yaWdpbkJ5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXNpemVEYXRhW2ZpZWxkUmVzaXplXSA9IE1hdGgubWF4KHBhcnNlSW50KGAkeyhvcmlnaW5PdGhlclZhbHVlICogdmFsdWUpIC8gb3JpZ2luQnlWYWx1ZX1gKSwgMSk7XG4gICAgdGhpcy5yZXNpemVEYXRhLnJhdGlvID0gTWF0aC5tYXgocGFyc2VJbnQoYCR7KDEwMCAqIHZhbHVlKSAvIG9yaWdpbkJ5VmFsdWV9YCksIDEpO1xuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gYXdhaXQgdGhpcy5nZXRGaWxlU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudChldmVudDogVFlQRV9NT0RBTF9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ2Nsb3NlJykge1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsXG4gIFtoZWFkZXJDb25maWddPVwieyBpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSB9XCJcbiAgW21vZGVdPVwiJ2NlbnRlcidcIlxuICBbd2lkdGhdPVwiJzUwMHB4J1wiXG4gIFtoZWlnaHRdPVwiJ2F1dG8nXCJcbiAgW3RpdGxlXT1cIidpMThuX3Jlc2l6ZScgfCB0cmFuc2xhdGVcIlxuICBbekluZGV4XT1cInpJbmRleFwiXG4gIFtidXR0b25zRm9vdGVyXT1cImJ1dHRvbnNGb290ZXJcIlxuICAob3V0RXZlbnQpPVwiaGFuZGxlckV2ZW50KCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b20gdy1mdWxsIGgtZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgbXItWzRweF0gdGV4dC1bIzZhNzM4M10gdy1bMTAwcHhdIHNocmluay0wXCI+e3sgJ2kxOG5fcmF0aW9fc2l6ZScgfCB0cmFuc2xhdGUgfX0gKCUpPC9kaXY+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICBbaWdub3JlV2lkdGhJbnB1dDEwMF09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZUlucHV0XT1cIid3LVsxMzJweF0nXCJcbiAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ3JhdGlvJ1wiXG4gICAgICAgIFsoaXRlbSldPVwicmVzaXplRGF0YVwiXG4gICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIxXCJcbiAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjEwMFwiXG4gICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwieyBpc1JlcXVpcmVkOiB0cnVlIH1cIlxuICAgICAgICBbaWdub3JlU2hvd0Vycm9yXT1cInRydWVcIlxuICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclJlc2l6ZVJhdGlvKClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtWzE2cHhdIHJlbGF0aXZlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgbXItWzRweF0gdGV4dC1bIzZhNzM4M10gdy1bMTAwcHhdIHNocmluay0wXCI+XG4gICAgICAgICAge3sgJ2kxOG5fd2lkdGgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICAgIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTAycHhdJ1wiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luV2lkdGhcIlxuICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIxXCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInd2lkdGgnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7IGlkOiAncHgnLCBsYWJlbDogJ3B4JyB9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclJlc2l6ZVdpZHRoKClcIlxuICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtWzhweF1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgbXItWzRweF0gdGV4dC1bIzZhNzM4M10gdy1bMTAwcHhdIHNocmluay0wXCI+XG4gICAgICAgICAge3sgJ2kxOG5fbGVuZ3RoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICBbaWdub3JlV2lkdGhJbnB1dDEwMF09XCJ0cnVlXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlSW5wdXRdPVwiJ3ctWzEwMnB4XSdcIlxuICAgICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjFcIlxuICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJvcmlnaW5IZWlnaHRcIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7IGlkOiAncHgnLCBsYWJlbDogJ3B4JyB9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclJlc2l6ZUhlaWdodCgpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGxlZnQtWzIzNnB4XSB0b3AtWzE0cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsyMHB4XSBoLVs0NHB4XSBsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbCBsaWJzLXVpLWJvcmRlci1yaWdodC1nZW5lcmFsIGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bNnB4XSB0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWljb24tbG9ja1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm10LVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gdGV4dC1bIzZhNzM4M10gbWItWzhweF1cIj57eyAnaTE4bl9zaXplX3Bob3RvJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgcm91bmRlZC1bNHB4XSBweS1bOHB4XSBweC1bMTZweF0gYmctWyNmOGY5ZmFdIHRleHQtWyM5Y2EyYWRdXCI+XG4gICAgICAgIHt7ICdpMThuX2ZpbGVfc2l6ZV9jb21wYXJlX3doZW5fcmVzaXplJyB8IHRyYW5zbGF0ZTogeyBjdXJyZW50X3NpemU6IGN1cnJlbnRGaWxlU2l6ZSwgb3JpZ2luYWxfc2l6ZTogb3JpZ2luRmlsZVNpemUgfSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9saWJzX3VpLWNvbXBvbmVudHMtbW9kYWw+XG4iXX0=