@libs-ui/components-inputs-upload 0.2.161 → 0.2.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/defines/helper.define.d.ts +0 -2
- package/esm2022/defines/helper.define.mjs +1 -13
- package/esm2022/index.mjs +1 -2
- package/esm2022/pipes/check-file-extension.pipe.mjs +6 -7
- package/esm2022/upload.component.mjs +24 -20
- package/fesm2022/libs-ui-components-inputs-upload.mjs +61 -73
- package/fesm2022/libs-ui-components-inputs-upload.mjs.map +1 -1
- package/index.d.ts +0 -1
- package/package.json +1 -1
- package/defines/upload.define.d.ts +0 -4
- package/esm2022/defines/upload.define.mjs +0 -5
|
@@ -1,4 +1,2 @@
|
|
|
1
1
|
import { IUploadDescriptionFormatAndSizeFile, TYPE_FILE_UPLOAD } from '../interfaces/upload.interface';
|
|
2
|
-
import { IFile } from '@libs-ui/interfaces-types';
|
|
3
2
|
export declare const getDescriptionFormatAndSizeFileDefault: (type: TYPE_FILE_UPLOAD, maxImageSize: number, maxVideoSize: number, maxDocumentSize: number, maxAudioSize: number) => IUploadDescriptionFormatAndSizeFile[];
|
|
4
|
-
export declare const getFileExtension: (file: IFile | File) => string | undefined;
|
|
@@ -32,16 +32,4 @@ export const getDescriptionFormatAndSizeFileDefault = (type, maxImageSize, maxVi
|
|
|
32
32
|
}
|
|
33
33
|
return description;
|
|
34
34
|
};
|
|
35
|
-
|
|
36
|
-
const fileName = file.name;
|
|
37
|
-
if (!fileName) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const dots = fileName.split(".");
|
|
41
|
-
if (dots.length <= 0) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const extension = dots[dots.length - 1];
|
|
45
|
-
return extension.toLowerCase();
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9kZWZpbmVzL2hlbHBlci5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJcEQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLFlBQW9CLEVBQUUsWUFBb0IsRUFBRSxlQUF1QixFQUFFLFlBQW9CLEVBQXlDLEVBQUU7SUFDak4sTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUc7UUFDZixPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNyRSxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFdkIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFrQixFQUFFLEVBQUU7SUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUUzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFeEMsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TGFiZWxCeVNpemVGaWxlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgSVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUsIFRZUEVfRklMRV9VUExPQUQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VwbG9hZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGdldERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVEZWZhdWx0ID0gKHR5cGU6IFRZUEVfRklMRV9VUExPQUQsIG1heEltYWdlU2l6ZTogbnVtYmVyLCBtYXhWaWRlb1NpemU6IG51bWJlciwgbWF4RG9jdW1lbnRTaXplOiBudW1iZXIsIG1heEF1ZGlvU2l6ZTogbnVtYmVyKTogSVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVbXSA9PiB7XG4gIGNvbnN0IGltYWdlID0ge1xuICAgIG1lc3NhZ2U6ICdpMThuX25vdGVfdXBsb2FkX2ltYWdlX3ZvbHVtZScsXG4gICAgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IGdldExhYmVsQnlTaXplRmlsZShtYXhJbWFnZVNpemUsIDApIH1cbiAgfTtcbiAgY29uc3QgdmlkZW8gPSB7XG4gICAgbWVzc2FnZTogJ2kxOG5fbm90ZV91cGxvYWRfdmlkZW9fdm9sdW1lJyxcbiAgICBpbnRlcnBvbGF0ZVBhcmFtczogeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heFZpZGVvU2l6ZSwgMCkgfVxuICB9O1xuICBjb25zdCBkb2N1bWVudCA9IHtcbiAgICBtZXNzYWdlOiAnaTE4bl9ub3RlX3VwbG9hZF9maWxlX3ZvbHVtZScsXG4gICAgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IGdldExhYmVsQnlTaXplRmlsZShtYXhEb2N1bWVudFNpemUsIDApIH1cbiAgfTtcbiAgY29uc3QgYXVkaW8gPSB7XG4gICAgbWVzc2FnZTogJ2kxOG5fbm90ZV91cGxvYWRfYXVkaW9fdm9sdW1lJyxcbiAgICBpbnRlcnBvbGF0ZVBhcmFtczogeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heEF1ZGlvU2l6ZSwgMCkgfVxuICB9O1xuXG4gIGNvbnN0IHR5cGVTcGxpdCA9IHR5cGUuc3BsaXQoJ18nKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBbXTtcblxuICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgZGVzY3JpcHRpb24ucHVzaChpbWFnZSk7XG4gIH1cbiAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgIGRlc2NyaXB0aW9uLnB1c2goYXVkaW8pO1xuICB9XG4gIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ3ZpZGVvJykpIHtcbiAgICBkZXNjcmlwdGlvbi5wdXNoKHZpZGVvKTtcbiAgfVxuICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdkb2N1bWVudCcpKSB7XG4gICAgZGVzY3JpcHRpb24ucHVzaChkb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZUV4dGVuc2lvbiA9IChmaWxlOiBJRmlsZSB8IEZpbGUpID0+IHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG5cbiAgaWYgKCFmaWxlTmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkb3RzID0gZmlsZU5hbWUuc3BsaXQoXCIuXCIpO1xuXG4gIGlmIChkb3RzLmxlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGRvdHNbZG90cy5sZW5ndGggLSAxXTtcblxuICByZXR1cm4gZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG59OyJdfQ==
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9kZWZpbmVzL2hlbHBlci5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLFlBQW9CLEVBQUUsWUFBb0IsRUFBRSxlQUF1QixFQUFFLFlBQW9CLEVBQXlDLEVBQUU7SUFDak4sTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUc7UUFDZixPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNyRSxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtLQUNsRSxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFdkIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TGFiZWxCeVNpemVGaWxlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgSVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUsIFRZUEVfRklMRV9VUExPQUQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VwbG9hZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZURlZmF1bHQgPSAodHlwZTogVFlQRV9GSUxFX1VQTE9BRCwgbWF4SW1hZ2VTaXplOiBudW1iZXIsIG1heFZpZGVvU2l6ZTogbnVtYmVyLCBtYXhEb2N1bWVudFNpemU6IG51bWJlciwgbWF4QXVkaW9TaXplOiBudW1iZXIpOiBJVXBsb2FkRGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZVtdID0+IHtcbiAgY29uc3QgaW1hZ2UgPSB7XG4gICAgbWVzc2FnZTogJ2kxOG5fbm90ZV91cGxvYWRfaW1hZ2Vfdm9sdW1lJyxcbiAgICBpbnRlcnBvbGF0ZVBhcmFtczogeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heEltYWdlU2l6ZSwgMCkgfVxuICB9O1xuICBjb25zdCB2aWRlbyA9IHtcbiAgICBtZXNzYWdlOiAnaTE4bl9ub3RlX3VwbG9hZF92aWRlb192b2x1bWUnLFxuICAgIGludGVycG9sYXRlUGFyYW1zOiB7IHZhbHVlOiBnZXRMYWJlbEJ5U2l6ZUZpbGUobWF4VmlkZW9TaXplLCAwKSB9XG4gIH07XG4gIGNvbnN0IGRvY3VtZW50ID0ge1xuICAgIG1lc3NhZ2U6ICdpMThuX25vdGVfdXBsb2FkX2ZpbGVfdm9sdW1lJyxcbiAgICBpbnRlcnBvbGF0ZVBhcmFtczogeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heERvY3VtZW50U2l6ZSwgMCkgfVxuICB9O1xuICBjb25zdCBhdWRpbyA9IHtcbiAgICBtZXNzYWdlOiAnaTE4bl9ub3RlX3VwbG9hZF9hdWRpb192b2x1bWUnLFxuICAgIGludGVycG9sYXRlUGFyYW1zOiB7IHZhbHVlOiBnZXRMYWJlbEJ5U2l6ZUZpbGUobWF4QXVkaW9TaXplLCAwKSB9XG4gIH07XG5cbiAgY29uc3QgdHlwZVNwbGl0ID0gdHlwZS5zcGxpdCgnXycpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IFtdO1xuXG4gIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2ltYWdlJykpIHtcbiAgICBkZXNjcmlwdGlvbi5wdXNoKGltYWdlKTtcbiAgfVxuICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgZGVzY3JpcHRpb24ucHVzaChhdWRpbyk7XG4gIH1cbiAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgIGRlc2NyaXB0aW9uLnB1c2godmlkZW8pO1xuICB9XG4gIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICBkZXNjcmlwdGlvbi5wdXNoKGRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdGlvbjtcbn07Il19
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export * from './upload.component';
|
|
2
|
-
export * from './defines/upload.define';
|
|
3
2
|
export * from './interfaces/upload.interface';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91cGxvYWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy91cGxvYWQuaW50ZXJmYWNlJztcblxuIl19
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
-
import { getFileExtension } from '
|
|
3
|
-
import { DocumentExtList, ImageExtList, VideoExtList } from '../defines/upload.define';
|
|
2
|
+
import { DocumentExtList, getFileExtension, ImageExtList, VideoExtList } from '@libs-ui/utils';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
export class LibsUiPipesInputsUploadCheckFileExtensionPipe {
|
|
6
5
|
transform(file, type) {
|
|
@@ -14,13 +13,13 @@ export class LibsUiPipesInputsUploadCheckFileExtensionPipe {
|
|
|
14
13
|
case 'video':
|
|
15
14
|
return VideoExtList.includes(fileExtension);
|
|
16
15
|
case 'word':
|
|
17
|
-
return ['doc', 'docx'].includes(fileExtension);
|
|
16
|
+
return ['doc', 'docx', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'].includes(fileExtension);
|
|
18
17
|
case 'xlsx':
|
|
19
|
-
return ['xls', 'xlsx'].includes(fileExtension);
|
|
18
|
+
return ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].includes(fileExtension);
|
|
20
19
|
case 'pdf':
|
|
21
|
-
return ['pdf'].includes(fileExtension);
|
|
20
|
+
return ['pdf', 'application/pdf'].includes(fileExtension);
|
|
22
21
|
case 'pptx':
|
|
23
|
-
return ['ppt', 'pptx'].includes(fileExtension);
|
|
22
|
+
return ['ppt', 'pptx', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'].includes(fileExtension);
|
|
24
23
|
case 'other':
|
|
25
24
|
return ![...ImageExtList, ...VideoExtList, ...DocumentExtList].includes(fileExtension);
|
|
26
25
|
}
|
|
@@ -35,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
35
34
|
standalone: true
|
|
36
35
|
}]
|
|
37
36
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stZmlsZS1leHRlbnNpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9waXBlcy9jaGVjay1maWxlLWV4dGVuc2lvbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU0vRixNQUFNLE9BQU8sNkNBQTZDO0lBRXhELFNBQVMsQ0FBQyxJQUFXLEVBQUUsSUFBb0U7UUFDekYsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLE9BQU87Z0JBRVYsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTlDLEtBQUssT0FBTztnQkFFVixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFOUMsS0FBSyxNQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRWpKLEtBQUssTUFBTTtnQkFDVCxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxtRUFBbUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUVqSixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUUzRCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsMkVBQTJFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7WUFFOUosS0FBSyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLENBQUM7SUFDSCxDQUFDO3dHQWhDVSw2Q0FBNkM7c0dBQTdDLDZDQUE2Qzs7NEZBQTdDLDZDQUE2QztrQkFKekQsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsK0NBQStDO29CQUNyRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsZSB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgRG9jdW1lbnRFeHRMaXN0LCBnZXRGaWxlRXh0ZW5zaW9uLCBJbWFnZUV4dExpc3QsIFZpZGVvRXh0TGlzdCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDaGVja0ZpbGVFeHRlbnNpb25QaXBlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0oZmlsZTogSUZpbGUsIHR5cGU6ICdpbWFnZScgfCAndmlkZW8nIHwgJ3dvcmQnIHwgJ3hsc3gnIHwgJ3BkZicgfCAncHB0eCcgfCAnb3RoZXInKSB7XG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGdldEZpbGVFeHRlbnNpb24oZmlsZSk7XG5cbiAgICBpZiAoIWZpbGVFeHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG5cbiAgICAgICAgcmV0dXJuIEltYWdlRXh0TGlzdC5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKTtcblxuICAgICAgY2FzZSAndmlkZW8nOlxuXG4gICAgICAgIHJldHVybiBWaWRlb0V4dExpc3QuaW5jbHVkZXMoZmlsZUV4dGVuc2lvbik7XG5cbiAgICAgIGNhc2UgJ3dvcmQnOlxuICAgICAgICByZXR1cm4gWydkb2MnLCAnZG9jeCcsICdhcHBsaWNhdGlvbi9tc3dvcmQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxuXG4gICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgcmV0dXJuIFsneGxzJywgJ3hsc3gnLCAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcblxuICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgcmV0dXJuIFsncGRmJywgJ2FwcGxpY2F0aW9uL3BkZiddLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pXG5cbiAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICByZXR1cm4gWydwcHQnLCAncHB0eCcsICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcblxuICAgICAgY2FzZSAnb3RoZXInOlxuICAgICAgICByZXR1cm4gIVsuLi5JbWFnZUV4dExpc3QsIC4uLlZpZGVvRXh0TGlzdCwgLi4uRG9jdW1lbnRFeHRMaXN0XS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKTtcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from '@angular/core';
|
|
2
2
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
3
|
+
import { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';
|
|
3
4
|
import { LibsUiComponentsImageEditorComponent } from '@libs-ui/components-image-editor';
|
|
4
5
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
6
|
+
import { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';
|
|
5
7
|
import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
|
|
6
8
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
7
9
|
import { LibsUiNotificationService } from '@libs-ui/services-notification';
|
|
8
|
-
import { convertBlobToFile, convertFileToBase64_ObjectUrl, downloadFileByUrl, ERROR_MESSAGE_EMPTY_VALID, getLabelBySizeFile, uuid } from '@libs-ui/utils';
|
|
10
|
+
import { AudioExtList, convertBlobToFile, convertFileToBase64_ObjectUrl, DocumentExtList, downloadFileByUrl, ERROR_MESSAGE_EMPTY_VALID, getFileExtension, getLabelBySizeFile, ImageExtList, isAudioExtList, isDocumentExtList, isImageExtList, isTypeAudio, isTypeImage, isTypeVideo, isVideoExtList, uuid, VideoExtList } from '@libs-ui/utils';
|
|
9
11
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
10
12
|
import { fromEvent, Subject } from 'rxjs';
|
|
11
13
|
import { takeUntil, tap } from 'rxjs/operators';
|
|
12
14
|
import { LibsUiComponentsInputsUploadAvatarComponent } from './avatar/avatar.component';
|
|
13
|
-
import { getDescriptionFormatAndSizeFileDefault
|
|
14
|
-
import { AudioExtList, DocumentExtList, ImageExtList, VideoExtList } from './defines/upload.define';
|
|
15
|
-
import { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';
|
|
16
|
-
import { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';
|
|
15
|
+
import { getDescriptionFormatAndSizeFileDefault } from './defines/helper.define';
|
|
17
16
|
import * as i0 from "@angular/core";
|
|
18
17
|
import * as i1 from "@ngx-translate/core";
|
|
19
18
|
export class LibsUiComponentsInputsUploadComponent {
|
|
@@ -228,9 +227,9 @@ export class LibsUiComponentsInputsUploadComponent {
|
|
|
228
227
|
}
|
|
229
228
|
for (let i = 0; i < files.length; i++) {
|
|
230
229
|
const file = files[i];
|
|
231
|
-
const isImage = file
|
|
232
|
-
const isVideo = file
|
|
233
|
-
const isAudio = file
|
|
230
|
+
const isImage = isTypeImage(file);
|
|
231
|
+
const isVideo = isTypeVideo(file);
|
|
232
|
+
const isAudio = isTypeAudio(file);
|
|
234
233
|
const newFile = {
|
|
235
234
|
name: file.name,
|
|
236
235
|
file: file,
|
|
@@ -350,7 +349,7 @@ export class LibsUiComponentsInputsUploadComponent {
|
|
|
350
349
|
this.imageEditorComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsImageEditorComponent);
|
|
351
350
|
this.imageEditorComponentRef.setInput('imgSrc', fileDataUrl);
|
|
352
351
|
this.imageEditorComponentRef.setInput('zIndex', this.zIndex() + 1);
|
|
353
|
-
this.imageEditorComponentRef.setInput('nameFile', fileItem.name);
|
|
352
|
+
this.imageEditorComponentRef.setInput('nameFile', fileItem().name);
|
|
354
353
|
if (this.aspectRatio()) {
|
|
355
354
|
this.imageEditorComponentRef.setInput('aspectRatio', this.aspectRatio());
|
|
356
355
|
}
|
|
@@ -372,13 +371,18 @@ export class LibsUiComponentsInputsUploadComponent {
|
|
|
372
371
|
if (!extension) {
|
|
373
372
|
return false;
|
|
374
373
|
}
|
|
375
|
-
|
|
376
|
-
const
|
|
377
|
-
const
|
|
378
|
-
const
|
|
379
|
-
const
|
|
380
|
-
const
|
|
381
|
-
const
|
|
374
|
+
console.log('extension', extension);
|
|
375
|
+
const isImage = isTypeImage(file);
|
|
376
|
+
const isVideo = isTypeVideo(file);
|
|
377
|
+
const isAudio = isTypeAudio(file);
|
|
378
|
+
const validImage = isImageExtList(extension);
|
|
379
|
+
const validVideo = isVideoExtList(extension);
|
|
380
|
+
const validAudio = isAudioExtList(extension);
|
|
381
|
+
const validDocument = isDocumentExtList(extension);
|
|
382
|
+
console.log('validImage', validImage);
|
|
383
|
+
console.log('validVideo', validVideo);
|
|
384
|
+
console.log('validAudio', validAudio);
|
|
385
|
+
console.log('validDocument', validDocument);
|
|
382
386
|
const typeSplit = this.fileType().split('_');
|
|
383
387
|
if (isImage && typeSplit.includes('image')) {
|
|
384
388
|
return validImage;
|
|
@@ -395,9 +399,9 @@ export class LibsUiComponentsInputsUploadComponent {
|
|
|
395
399
|
return false;
|
|
396
400
|
}
|
|
397
401
|
async checkValidFileSize(file) {
|
|
398
|
-
const isImage = file
|
|
399
|
-
const isVideo = file
|
|
400
|
-
const isAudio = file
|
|
402
|
+
const isImage = isTypeImage(file);
|
|
403
|
+
const isVideo = isTypeVideo(file);
|
|
404
|
+
const isAudio = isTypeAudio(file);
|
|
401
405
|
const validImage = file.size <= this.maxImageSize();
|
|
402
406
|
const validVideo = file.size <= this.maxVideoSize();
|
|
403
407
|
const validAudio = file.size <= this.maxAudioSize();
|
|
@@ -480,4 +484,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
480
484
|
LibsUiComponentsScrollOverlayDirective
|
|
481
485
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col w-full h-full\">\n <div>\n @if (labelConfig();as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if ((!configDownloadSampleFile()?.position || configDownloadSampleFile()?.position === 'top') && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mb-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile?.title || ' '\"\n (outClick)=\"handlerDownloadSampleFile($event)\" />\n }\n @if (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple())) {\n <div #upload\n class=\"libs-ui-components-inputs-upload\"\n [class.libs-ui-components-inputs-upload-disable]=\"disable() || (!multiple() && fileList().length)\"\n [class.libs-ui-components-inputs-upload-error]=\"messageError()\">\n <div class=\"flex items-center\">\n <div class=\"mr-[16px]\">\n <i class=\"libs-ui-components-inputs-upload-icon libs-ui-icon-file-upload before:!text-[32px]\"></i>\n </div>\n <div class=\"libs-ui-components-inputs-upload-description\">\n <div class=\"mb-[4px] libs-ui-font-h6m\"\n [innerHTML]=\"(configDescriptionInputUpload().message || '') | translate:configDescriptionInputUpload().interpolateParams\">\n </div>\n @for (item of descriptionFormatAndSizeFileComputed(); track item; let last = $last) {\n <div class=\"libs-ui-font-h7r\"\n [class.mb-[4px]]=\"!last\"\n [innerHTML]=\"item.message | translate:item.interpolateParams\">\n </div>\n }\n </div>\n </div>\n @if (multiple()) {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n multiple\n [accept]=\"accessFiles()\" />\n } @else {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n [accept]=\"accessFiles()\" />\n }\n </div>\n }\n @if (messageError() && (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple()))) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">\n {{ (messageError() || '') | translate:{ value: limitFile() } }}\n </div>\n }\n @if (configDownloadSampleFile()?.position === 'bottom' && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mt-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile.title || ' '\"\n (moClick)=\"handlerDownloadSampleFile($event)\" />\n }\n </div>\n @if (fileList().length) {\n <div LibsUiComponentsScrollOverlayDirective\n class=\"relative w-full h-full px-[10px] libs-ui-components-inputs-upload-view-list {{ classIncludeFileContent() || '' }}\"\n [class.mt-[12px]]=\"multiple() || showBlockUploadWhenHasFileAndModeSingle()\">\n <ng-content select=\"[label-file]\"></ng-content>\n @for (item of fileList(); track item(); let first = $first) {\n <div class=\"libs-ui-components-inputs-upload-view-list-item {{ classIncludeListItem() || '' }}\"\n [class.libs-ui-components-inputs-upload-file-full]=\"modeDisplayFile() === 'full'\"\n [class.libs-ui-components-inputs-upload-file-short]=\"modeDisplayFile() === 'short'\"\n [class.libs-ui-border-error-general]=\"item().error || (messageError() && showBorderErrorAllItemWhenError())\"\n [class.mt-0]=\"first && !multiple() && !showBlockUploadWhenHasFileAndModeSingle()\">\n\n <div class=\"flex w-full\">\n <div class=\"flex items-center\">\n @if (canSetAvatar() && item().type === 'image') {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'!mr-0' + (item().isAvatar ? ' libs-ui-icon-check-circle-solid before:!text-[#00bc62]': ' libs-ui-icon-check-circle-outline') + ((disable() || item().isUploading || !!item().error) ? ' libs-ui-disable' : '')\"\n [popover]=\"{config:{ content: item().isAvatar ? 'i18n_avatar' : 'i18n_choose_as_your_avatar', zIndex: zIndex()}}\"\n [classInclude]=\"'!mr-[12px] !p-0'\"\n [disable]=\"disable() || item().isUploading || !!item().error\"\n (outClick)=\"handlerSetAvatar($event, item)\" />\n }\n </div>\n <div class=\"flex\"\n [class.w-[calc(100%-28px)]]=\"canSetAvatar()\"\n [class.w-full]=\"!canSetAvatar()\">\n @if (modeDisplayFile() === 'full') {\n <libs_ui-components-inputs-upload-avatar [disable]=\"disable()\"\n [(item)]=\"item\"\n [showVideoDuration]=\"showVideoDuration()\"\n (outOpenPreview)=\"handlerOpenPreviewFile($event)\" />\n }\n <div class=\"relative w-full\">\n <div class=\"flex absolute w-full h-full flex-col\"\n [class.flex-col]=\"modeDisplayFile() === 'full'\"\n [class.justify-center]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\">\n <libs_ui-components-label class=\"flex w-full\"\n [labelLeft]=\"item().name\"\n [zIndexPopover]=\"zIndex() + 1\"\n [labelLeftClass]=\"'libs-ui-font-h6m ' + ((disable() || item().isUploading || item().error) ? 'text-[#6a7383]' : 'text-[#071631]')\"\n [classInclude]=\"modeDisplayFile() === 'short' ? '!mb-0' : ''\" />\n\n @if (!ignoreShowSizeFile()) {\n <div class=\"text-[#9ca2ad] libs-ui-font-h7r shrink-0\"\n [class.flex]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\"\n [class.ml-[12px]]=\"modeDisplayFile() === 'short'\">\n {{ item().size }}\n </div>\n }\n </div>\n </div>\n @if (item().isUploading && item().percentUploading) {\n <div class=\"flex items-center ml-[16px]\"\n [class.mr-[26px]]=\"modeDisplayFile() === 'full'\">\n <div class=\"w-[120px] h-[4px] rounded-[4px] bg-[#f8f9fa] relative\">\n <div class=\"absolute top-0 left-0 h-[4px] rounded-[4px] bg-[#00bc62]\"\n [style.width.px]=\"(item().percentUploading ?? 0)*1.2\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex ml-[16px]\">\n @if (!ignoreIconPreview()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-eye-outline !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_preview', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() && !ignoreIconEdit() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerOpenPreviewFile(item())\" />\n }\n @if (item().type === 'image' && !item().error && !ignoreIconEdit()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-edit-line !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_edit', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerEditImage($event, item)\" />\n }\n @if (!ignoreIconRemove()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-close !mr-0'\"\n [popover]=\"{config: {content: 'i18n_delete', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0'\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerRemoveFile($event, item)\" />\n }\n </div>\n </div>\n @if (item().error && (multiple() || !showBlockUploadWhenHasFileAndModeSingle())) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">{{ (item().error || ' ') | translate }}</div>\n }\n }\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .libs-ui-components-inputs-upload{width:100%;padding:16px;display:flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;background-color:#fff;border:1px dashed #e6e7ea}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-icon:before{color:#9ca2ad}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-description{color:#9ca2ad}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-description span{color:var(--libs-ui-color-default, #226ff5)}:host ::ng-deep .libs-ui-components-inputs-upload:hover,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over{background-color:var(--libs-ui-color-light-3, #f4f8ff);border:1px dashed var(--libs-ui-color-light-1, #226ff5)}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-icon:before,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-description,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-description{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-description span,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-description span{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-disable{cursor:default!important;text-decoration:none;pointer-events:none;background-color:#f8f9fa!important;border:1px dashed #e6e7ea!important}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-description{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-description span{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-error{background-color:#fef5f6!important;border:1px dashed #ee2d41!important}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-description{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-description span{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-file-full{background-color:#fff;padding:8px 12px}:host ::ng-deep .libs-ui-components-inputs-upload-file-short{background-color:#f4f8ff;padding:6px 12px}.libs-ui-components-inputs-upload-view-list{overflow-y:auto;max-height:100%;padding:0 10px}.libs-ui-components-inputs-upload-view-list .libs-ui-components-inputs-upload-view-list-item{width:100%;display:flex;align-items:center;justify-content:center;border-radius:4px;margin-bottom:8px}.libs-ui-components-inputs-upload-view-list .libs-ui-components-inputs-upload-view-list-item:hover{background-color:#f8f9fa}\n"] }]
|
|
482
486
|
}], ctorParameters: () => [] });
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy91cGxvYWQvc3JjL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ROLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBYSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25HLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw2QkFBNkIsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxSixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUs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SSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxVQUFVLENBQUM7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QUNwRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7SUFHYixXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdmdCVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyxrd01DaENsRCx3cFVBeUxBLG12R0RqS1ksZUFBZSw0RkFDdkIsc0NBQXNDLGloQkFDdEMsOEJBQThCLDRxQkFDOUIsMkNBQTJDLHlMQUMzQyxzQ0FBc0M7OzRGQUk3QixxQ0FBcUM7a0JBZGpELFNBQVM7K0JBRUUsa0NBQWtDLGNBR2hDLElBQUksV0FDUCxDQUFDLGVBQWU7d0JBQ3ZCLHNDQUFzQzt3QkFDdEMsOEJBQThCO3dCQUM5QiwyQ0FBMkM7d0JBQzNDLHNDQUFzQztxQkFDdkMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVNhdmVGaWxlLCBMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWltYWdlLWVkaXRvcic7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IElFdmVudCwgSUZpbGUsIElJc1ZhbGlkUmVxdWlyZWQsIElNZXNzYWdlVHJhbnNsYXRlIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWR5bmFtaWMtY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgY29udmVydEJsb2JUb0ZpbGUsIGNvbnZlcnRGaWxlVG9CYXNlNjRfT2JqZWN0VXJsLCBkb3dubG9hZEZpbGVCeVVybCwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgZ2V0TGFiZWxCeVNpemVGaWxlLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZURlZmF1bHQsIGdldEZpbGVFeHRlbnNpb24gfSBmcm9tICcuL2RlZmluZXMvaGVscGVyLmRlZmluZSc7XG5pbXBvcnQgeyBBdWRpb0V4dExpc3QsIERvY3VtZW50RXh0TGlzdCwgSW1hZ2VFeHRMaXN0LCBWaWRlb0V4dExpc3QgfSBmcm9tICcuL2RlZmluZXMvdXBsb2FkLmRlZmluZSc7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElVcGxvYWRDb25maWdEb3dubG9hZFNhbXBsZUZpbGUsIElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlLCBJVXBsb2FkRnVuY3Rpb25Db250cm9sRXZlbnQsIFRZUEVfRklMRV9VUExPQUQsIFRZUEVfTU9ERV9GSUxFX0RJU1BMQVkgfSBmcm9tICcuL2ludGVyZmFjZXMvdXBsb2FkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUHJldmlld0ZpbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXByZXZpZXctZmlsZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZ2FsbGVyeSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZEF2YXRhckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRJRVNcbiAgcHJpdmF0ZSBpbWFnZUVkaXRvckNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQ+O1xuICBwcml2YXRlIHByZXZpZXdGaWxlQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNQcmV2aWV3RmlsZUNvbXBvbmVudD47XG4gIHByaXZhdGUgcHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudD47XG4gIHByb3RlY3RlZCBpc0RyYWdPdmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGZpbGVMaXN0ID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4+KFtdKTtcbiAgcHJvdGVjdGVkIGFjY2Vzc0ZpbGVzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgbWVzc2FnZUVycm9yID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVDb21wdXRlZCA9IGNvbXB1dGVkPEFycmF5PElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlPj4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUoKT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlKCkgYXMgdW5rbm93biBhcyBBcnJheTxJVXBsb2FkRGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZT47XG4gICAgfVxuICAgIHJldHVybiBnZXREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlRGVmYXVsdCh0aGlzLmZpbGVUeXBlKCksIHRoaXMubWF4SW1hZ2VTaXplKCksIHRoaXMubWF4VmlkZW9TaXplKCksIHRoaXMubWF4RG9jdW1lbnRTaXplKCksIHRoaXMubWF4QXVkaW9TaXplKCkpO1xuICB9KTtcblxuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUU1xuICByZWFkb25seSBvcmlnaW5GaWxlcyA9IGlucHV0PEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4sIEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4gfCB1bmRlZmluZWQ+KFtdLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgZmlsZVR5cGUgPSBpbnB1dDxUWVBFX0ZJTEVfVVBMT0FELCBUWVBFX0ZJTEVfVVBMT0FEIHwgdW5kZWZpbmVkPignaW1hZ2VfdmlkZW9fZG9jdW1lbnQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAnaW1hZ2VfdmlkZW9fZG9jdW1lbnQnIH0pO1xuICByZWFkb25seSBtdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNhblVwbG9hZElmSGFzRXhpc3RGaWxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjYW5TZXRBdmF0YXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpbWl0RmlsZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAgfSk7XG4gIHJlYWRvbmx5IG1heFRvdGFsU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhJbWFnZVNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oNSAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyA1ICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IG1heFZpZGVvU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhEb2N1bWVudFNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAgKiAxMDI0ICogMTAyNCB9KTtcbiAgcmVhZG9ubHkgbWF4QXVkaW9TaXplID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwICogMTAyNCAqIDEwMjQsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IDEwICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IGltYWdlRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oSW1hZ2VFeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBJbWFnZUV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IHZpZGVvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oVmlkZW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBWaWRlb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGRvY3VtZW50RXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oRG9jdW1lbnRFeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBEb2N1bWVudEV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGF1ZGlvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oQXVkaW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBBdWRpb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUxpc3RJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SUlzVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgYXNwZWN0UmF0aW8gPSBpbnB1dDxJQXNwZWN0UmF0aW8+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMjAwLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMjAwIH0pO1xuICByZWFkb25seSBpZ25vcmVTaG93U2l6ZUZpbGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBtZXNzYWdlVHlwZUZpbGVFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl90aGVfZmlsZV9zdXBwb3J0X2Zvcm1hdF9pc19ub3RfY29ycmVjdCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdpMThuX3RoZV9maWxlX3N1cHBvcnRfZm9ybWF0X2lzX25vdF9jb3JyZWN0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZU1heFNpemVFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9maWxlX3NpemVfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdpMThuX2ZpbGVfc2l6ZV9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZUZpbGVVcGxvYWRFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ2kxOG5faW52YWxpZF9maWxlX3VwbG9hZCcgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fZmlsZV9udW1iZXJfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdF9wbGVhc2VfZGVsZXRlX3RoZV9maWxlJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ2kxOG5fZmlsZV9udW1iZXJfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdF9wbGVhc2VfZGVsZXRlX3RoZV9maWxlJyB9KVxuICByZWFkb25seSBjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGUsIElNZXNzYWdlVHJhbnNsYXRlIHwgdW5kZWZpbmVkPih7IG1lc3NhZ2U6ICdpMThuX2RyYWdfZmlsZV9oZXJlX3RvX3VwbG9hZF9vcl9zZWxlY3RfZmlsZScgfSwge1xuICAgIHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyB7IG1lc3NhZ2U6ICdpMThuX2RyYWdfZmlsZV9oZXJlX3RvX3VwbG9hZF9vcl9zZWxlY3RfZmlsZScgfVxuICB9KTtcblxuICByZWFkb25seSBtb2RlRGlzcGxheUZpbGUgPSBpbnB1dDxUWVBFX01PREVfRklMRV9ESVNQTEFZLCBUWVBFX01PREVfRklMRV9ESVNQTEFZIHwgdW5kZWZpbmVkPignZnVsbCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdmdWxsJyB9KTtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZSA9IGlucHV0PFdyaXRhYmxlU2lnbmFsPEFycmF5PElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlPj4+KCk7XG4gIHJlYWRvbmx5IHNob3dWaWRlb0R1cmF0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvblJlbW92ZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvbkVkaXQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUljb25QcmV2aWV3ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlRmlsZUNvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNob3dCb3JkZXJFcnJvckFsbEl0ZW1XaGVuRXJyb3IgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSA9IGlucHV0PElVcGxvYWRDb25maWdEb3dubG9hZFNhbXBsZUZpbGU+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFNcbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZUNoYW5nZWQgPSBvdXRwdXQ8QXJyYXk8V3JpdGFibGVTaWduYWw8SUZpbGU+Pj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZVJlbW92ZWQgPSBvdXRwdXQ8V3JpdGFibGVTaWduYWw8SUZpbGU+PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElVcGxvYWRGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVklFVyBDSElMRFJFTlxuICByZWFkb25seSB1cGxvYWRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3VwbG9hZCcpO1xuICByZWFkb25seSB1cGxvYWRJbnB1dFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndXBsb2FkSW5wdXQnKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5KRUNUSU9OU1xuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3JpZ2luRmlsZXMoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZUxpc3Quc2V0KFsuLi50aGlzLm9yaWdpbkZpbGVzKCldKTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vICNyZWdpb24gTElGRUNZQ0xFIEhPT0tTXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVBbGw6IHRoaXMucmVtb3ZlQWxsRmlsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBsb2FkaW5nOiBhc3luYyAocHJvY2VzcywgaWQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVVwbG9hZGluZyA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKGZpbGUgPT4gZmlsZSgpLmlkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKGZpbGVVcGxvYWRpbmcpIHtcbiAgICAgICAgICBmaWxlVXBsb2FkaW5nLnVwZGF0ZShmaWxlID0+ICh7IC4uLmZpbGUsIHBlcmNlbnRVcGxvYWRpbmc6IHByb2Nlc3MucGVyY2VudCwgaXNVcGxvYWRpbmc6IHByb2Nlc3MucGVyY2VudCAhPT0gMTAwIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldE1lc3NhZ2VFcnJvcjogYXN5bmMgKG1lc3NhZ2UsIGlkKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldChtZXNzYWdlKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZUVycm9yID0gdGhpcy5maWxlTGlzdCgpLmZpbmQoZmlsZSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICAgIGlmIChmaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIGZpbGVFcnJvci51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBlcnJvcjogbWVzc2FnZSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclVwbG9hZEZpbGU6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIHRoaXMudXBsb2FkSW5wdXRSZWYoKT8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIHRoaXMuYWNjZXNzRmlsZXMoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluaXRBY2Nlc3NGaWxlcygpO1xuICAgICAgaWYgKHRoaXMudXBsb2FkUmVmKCkpIHtcbiAgICAgICAgdGhpcy5pbml0VXBsb2FkRXZlbnQoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTklUSUFMSVpBVElPTlxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdEFjY2Vzc0ZpbGVzKCkge1xuICAgIGNvbnN0IGFjY2Vzc0V4dHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdHlwZVNwbGl0ID0gdGhpcy5maWxlVHlwZSgpLnNwbGl0KCdfJyk7XG5cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5pbWFnZUV4dExpc3QoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIGFjY2Vzc0V4dHMucHVzaCguLi50aGlzLmRvY3VtZW50RXh0TGlzdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMudmlkZW9FeHRMaXN0KCkpO1xuICAgIH1cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5hdWRpb0V4dExpc3QoKSk7XG4gICAgfVxuICAgIHRoaXMuYWNjZXNzRmlsZXMuc2V0KGFjY2Vzc0V4dHMubWFwKGV4dCA9PiBgLiR7ZXh0fWApLmpvaW4oJywnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdFVwbG9hZEV2ZW50KCkge1xuICAgIGNvbnN0IHVwbG9hZFJlZiA9IHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaW5wdXRVcGxvYWRSZWYgPSB0aGlzLnVwbG9hZElucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLmluaXRFdmVudChpbnB1dFVwbG9hZFJlZiwgJ2NoYW5nZScsIHRoaXMuaGFuZGxlclVwbG9hZEZpbGUuYmluZCh0aGlzKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodXBsb2FkUmVmLCAnY2xpY2snLCB0aGlzLmhhbmRsZXJVcGxvYWRGaWxlQ2xpY2suYmluZCh0aGlzKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodXBsb2FkUmVmLCAnZHJhZ292ZXInLCB0aGlzLmhhbmRsZXJEcmFnT3Zlci5iaW5kKHRoaXMpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh1cGxvYWRSZWYsICdkcmFnbGVhdmUnLCB0aGlzLmhhbmRsZXJEcmFnRW5kLmJpbmQodGhpcykpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHVwbG9hZFJlZiwgJ2Ryb3AnLCB0aGlzLmhhbmRsZXJEcmFnRHJvcC5iaW5kKHRoaXMpKS5zdWJzY3JpYmUoKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBFVkVOVCBIQU5ETElOR1xuICBwcm90ZWN0ZWQgaW5pdEV2ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbEJhY2s6IChldmVudDogSUV2ZW50KSA9PiB2b2lkKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4oZWxlbWVudCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKGUgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjYWxsQmFjayhlKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclVwbG9hZEZpbGVDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgdGhpcy5hY2Nlc3NGaWxlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyVXBsb2FkRmlsZShldmVudDogSUV2ZW50KSB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVVcGxvYWRGaWxlcyhldmVudCk7XG4gICAgY29uc3QgaW5wdXRVcGxvYWRSZWYgPSB0aGlzLnVwbG9hZElucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGlucHV0VXBsb2FkUmVmKSB7XG4gICAgICBpbnB1dFVwbG9hZFJlZi52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJEcmFnT3ZlcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZHJhZy1vdmVyJywgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRyYWdFbmQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnVwbG9hZFJlZigpPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2xpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRyYWctb3ZlcicsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRHJhZ0Ryb3AoZXZlbnQ6IElFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGxvYWRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1kcmFnLW92ZXInLCBmYWxzZSk7XG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZVVwbG9hZEZpbGVzKGV2ZW50KTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBGSUxFIE9QRVJBVElPTlNcbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVVwbG9hZEZpbGVzKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXMgfHwgZXZlbnQudGFyZ2V0Py5maWxlcztcbiAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSkge1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbCArPSBmaWxlc1tpXS5zaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSA8IHRvdGFsKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0RXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2kxOG5fc2l6ZV9ub3RfbnVtYmVyX21iJywgeyBudW1iZXI6IHRoaXMubWF4VG90YWxTaXplKCkgLyAxMDI0IC8gMTAyNCB9KSwgeyB0aW1lUmVtb3ZlOiAzMDAwIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3JFeGNlZWRzTWF4RmlsZSA9IGZhbHNlO1xuICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZW1haW5GaWxlVG90YWwgPSB0aGlzLmxpbWl0RmlsZSgpIC0gdGhpcy5maWxlTGlzdCgpLmxlbmd0aDtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gcmVtYWluRmlsZVRvdGFsKSB7XG4gICAgICBlcnJvckV4Y2VlZHNNYXhGaWxlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGlzSW1hZ2UgPSBmaWxlLnR5cGUubWF0Y2goL2ltYWdlLiovKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGlzVmlkZW8gPSBmaWxlLnR5cGUubWF0Y2goL3ZpZGVvLiovKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGlzQXVkaW8gPSBmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IG5ld0ZpbGU6IElGaWxlID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShmaWxlLnNpemUpLFxuICAgICAgICB0eXBlOiBpc0ltYWdlID8gJ2ltYWdlJyA6IGlzVmlkZW8gPyAndmlkZW8nIDogaXNBdWRpbyA/ICdhdWRpbycgOiAnZG9jdW1lbnQnLFxuICAgICAgICBpZDogdXVpZCgpXG4gICAgICB9O1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkRmlsZUV4dGVuc2lvbihmaWxlKSkpIHtcbiAgICAgICAgaWYgKCFlcnJvckV4Y2VlZHNNYXhGaWxlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogdGhpcy5tZXNzYWdlVHlwZUZpbGVFcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdGaWxlLmVycm9yID0gdGhpcy5tZXNzYWdlVHlwZUZpbGVFcnJvcigpO1xuICAgICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZEZpbGVTaXplKGZpbGUpKSkge1xuICAgICAgICBpZiAoIWVycm9yRXhjZWVkc01heEZpbGUpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodGhpcy5tdWx0aXBsZSgpID8gdGhpcy5tZXNzYWdlRmlsZVVwbG9hZEVycm9yKCkgOiB0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RmlsZS5lcnJvciA9IHRoaXMubWVzc2FnZU1heFNpemVFcnJvcigpO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yKCkpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dEVycm9yKHRoaXMubWVzc2FnZU1heFNpemVFcnJvcigpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMucHVzaEZpbGVJbkxpc3QoZmlsZSwgbmV3RmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhblNldEF2YXRhcigpICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGggJiYgIXRoaXMuZmlsZUxpc3QoKS5maW5kKGZpbGUgPT4gZmlsZSgpLmlzQXZhdGFyKSkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoZmlsZUxpc3QgPT4ge1xuICAgICAgICBjb25zdCBpdGVtSW1hZ2UgPSBmaWxlTGlzdC5maW5kKGZpbGUgPT4gZmlsZSgpLnR5cGUgPT09ICdpbWFnZScpO1xuICAgICAgICBpZiAoaXRlbUltYWdlKSB7XG4gICAgICAgICAgaXRlbUltYWdlLnVwZGF0ZShmaWxlID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1c2hGaWxlSW5MaXN0KGZpbGU6IEZpbGUsIG5ld0ZpbGU6IElGaWxlKSB7XG4gICAgbmV3RmlsZS51cmwgPSBhd2FpdCBjb252ZXJ0RmlsZVRvQmFzZTY0X09iamVjdFVybChmaWxlKTtcblxuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKGZpbGVMaXN0ID0+IHtcbiAgICAgIGZpbGVMaXN0LnNwbGljZSgwLCB0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkgPyAxIDogMCwgc2lnbmFsKG5ld0ZpbGUpKTtcbiAgICAgIHJldHVybiBbLi4uZmlsZUxpc3RdO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJPcGVuUHJldmlld0ZpbGUoaXRlbTogSUZpbGUpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnZG9jdW1lbnQnKSB7XG4gICAgICB0aGlzLnByZXZpZXdGaWxlRG9jdW1lbnQoaXRlbSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZShpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJldmlld0ZpbGVEb2N1bWVudChpdGVtOiBJRmlsZSkge1xuICAgIGlmICh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNQcmV2aWV3RmlsZUNvbXBvbmVudCk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZGF0YScsIGl0ZW0pO1xuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKTtcbiAgICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXZpZXdGaWxlSW1hZ2UoaXRlbTogSUZpbGUpIHtcbiAgICBpZiAodGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgIGNvbnN0IHVybCA9IGl0ZW0udXJsIHx8IGl0ZW0ub3JpZ2luX3VybDtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ltYWdlcycsIFt7IHVybCB9XSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLnNldElucHV0KCdpbWFnZVNlbGVjdGVkJywgeyB1cmwgfSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZERpc3BsYXlTcmNJbWFnZScsICd1cmwnKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3NpbmdsZUltYWdlJywgdHJ1ZSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckVkaXRJbWFnZShldmVudDogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2hvd0VkaXRNb2RhbChpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlRmlsZShldmVudDogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlRmlsZShpdGVtKTtcbiAgICBpZiAodGhpcy5vcmlnaW5GaWxlcygpLmZpbmQoZmlsZSA9PiBmaWxlKCkudXJsID09PSBpdGVtKCkudXJsKSkge1xuICAgICAgdGhpcy5vdXRGaWxlUmVtb3ZlZC5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKCkgJiYgIXRoaXMuc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRVcGxvYWRFdmVudCgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZUZpbGUoZmlsZUl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKGZpbGVMaXN0ID0+IGZpbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0oKS5pZCAhPT0gZmlsZUl0ZW0oKS5pZCkpO1xuICAgIGlmICh0aGlzLmNhblNldEF2YXRhcigpICYmIGZpbGVJdGVtKCkuaXNBdmF0YXIgJiYgdGhpcy5maWxlTGlzdCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoZmlsZUxpc3QgPT4ge1xuICAgICAgICBmaWxlTGlzdFswXS51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBpc0F2YXRhcjogdHJ1ZSB9KSk7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5maWxlTGlzdF07XG4gICAgICB9KTtcblxuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93RWRpdE1vZGFsKGZpbGVJdGVtOiBXcml0YWJsZVNpZ25hbDxJRmlsZT4pIHtcbiAgICBpZiAodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlRGF0YVVybCA9IGZpbGVJdGVtKCkudXJsIHx8IGZpbGVJdGVtKCkub3JpZ2luX3VybCB8fCAnJztcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQpO1xuXG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1nU3JjJywgZmlsZURhdGFVcmwpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLnNldElucHV0KCduYW1lRmlsZScsIGZpbGVJdGVtLm5hbWUpO1xuICAgIGlmICh0aGlzLmFzcGVjdFJhdGlvKCkpIHtcbiAgICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2FzcGVjdFJhdGlvJywgdGhpcy5hc3BlY3RSYXRpbygpKTtcbiAgICB9XG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5pbnN0YW5jZS5vdXRDbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5pbnN0YW5jZS5vdXRTYXZlRmlsZS5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdDogSVNhdmVGaWxlKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlRXJyb3IgPSAhKGF3YWl0IHRoaXMuY2hlY2tWYWxpZEZpbGVTaXplKHJlc3VsdC5maWxlKSkgPyB0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG5hbWVGaWxlID0gZmlsZUl0ZW0oKS5maWxlPy5uYW1lIHx8IGZpbGVJdGVtKCkubmFtZTtcbiAgICAgIGZpbGVJdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIGZpbGU6IGNvbnZlcnRCbG9iVG9GaWxlKHJlc3VsdC5maWxlLCBuYW1lRmlsZSksIG5hbWU6IG5hbWVGaWxlLCBvcmlnaW5fdXJsOiB1bmRlZmluZWQsIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShyZXN1bHQuZmlsZS5zaXplKSwgZXJyb3I6IG1lc3NhZ2VFcnJvciwgdXJsOiByZXN1bHQudXJsLCBpc1VwZGF0ZTogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWY/Lmluc3RhbmNlLm91dENsb3NlLmVtaXQoeyBpc0NsaWNrQnV0dG9uQ2xvc2U6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tWYWxpZEZpbGVFeHRlbnNpb24oZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGdldEZpbGVFeHRlbnNpb24oZmlsZSk7XG5cbiAgICBpZiAoIWV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc0ltYWdlID0gZmlsZS50eXBlLm1hdGNoKC9pbWFnZS4qLykgPyB0cnVlIDogZmFsc2U7XG4gICAgY29uc3QgaXNWaWRlbyA9IGZpbGUudHlwZS5tYXRjaCgvdmlkZW8uKi8pID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IGlzQXVkaW8gPSBmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCB2YWxpZEltYWdlID0gdGhpcy5pbWFnZUV4dExpc3QoKS5pbmRleE9mKGV4dGVuc2lvbikgPj0gMDtcbiAgICBjb25zdCB2YWxpZFZpZGVvID0gdGhpcy52aWRlb0V4dExpc3QoKS5pbmRleE9mKGV4dGVuc2lvbikgPj0gMDtcbiAgICBjb25zdCB2YWxpZEF1ZGlvID0gdGhpcy5hdWRpb0V4dExpc3QoKS5pbmRleE9mKGV4dGVuc2lvbikgPj0gMDtcbiAgICBjb25zdCB2YWxpZERvY3VtZW50ID0gdGhpcy5kb2N1bWVudEV4dExpc3QoKS5pbmRleE9mKGV4dGVuc2lvbikgPj0gMDtcblxuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKGlzSW1hZ2UgJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICByZXR1cm4gdmFsaWRJbWFnZTtcbiAgICB9XG4gICAgaWYgKGlzVmlkZW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCd2aWRlbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRWaWRlbztcbiAgICB9XG4gICAgaWYgKGlzQXVkaW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRBdWRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnZG9jdW1lbnQnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrVmFsaWRGaWxlU2l6ZShmaWxlOiBGaWxlIHwgQmxvYikge1xuICAgIGNvbnN0IGlzSW1hZ2UgPSBmaWxlLnR5cGUubWF0Y2goL2ltYWdlLiovKSA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCBpc1ZpZGVvID0gZmlsZS50eXBlLm1hdGNoKC92aWRlby4qLykgPyB0cnVlIDogZmFsc2U7XG4gICAgY29uc3QgaXNBdWRpbyA9IGZpbGUudHlwZS5tYXRjaCgvYXVkaW8uKi8pID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkSW1hZ2UgPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhJbWFnZVNpemUoKTtcbiAgICBjb25zdCB2YWxpZFZpZGVvID0gZmlsZS5zaXplIDw9IHRoaXMubWF4VmlkZW9TaXplKCk7XG4gICAgY29uc3QgdmFsaWRBdWRpbyA9IGZpbGUuc2l6ZSA8PSB0aGlzLm1heEF1ZGlvU2l6ZSgpO1xuICAgIGNvbnN0IHZhbGlkRG9jdW1lbnQgPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhEb2N1bWVudFNpemUoKTtcblxuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKGlzSW1hZ2UgJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICByZXR1cm4gdmFsaWRJbWFnZTtcbiAgICB9XG4gICAgaWYgKGlzVmlkZW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCd2aWRlbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRWaWRlbztcbiAgICB9XG4gICAgaWYgKGlzQXVkaW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRBdWRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnZG9jdW1lbnQnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaXNSZXF1aXJlZCAmJiAhdGhpcy5maWxlTGlzdCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpcGxlKCkgJiYgdGhpcy5maWxlTGlzdCgpLmxlbmd0aCA+IHRoaXMubGltaXRGaWxlKCkpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZUVycm9yID0gdGhpcy5maWxlTGlzdCgpLmZpbmQoaXRlbSA9PiBpdGVtKCkuZXJyb3IpO1xuXG4gICAgaWYgKGZpbGVFcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogZmlsZUVycm9yKCkuZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNldEF2YXRhcihldmVudDogRXZlbnQsIGZpbGU6IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5maWxlTGlzdCgpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbSgpLmlkID09PSBmaWxlKCkuaWQpIHtcbiAgICAgICAgaXRlbS51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBpc0F2YXRhcjogdHJ1ZSB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGZpbGUgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlQWxsRmlsZSgpIHtcbiAgICB0aGlzLmZpbGVMaXN0LnNldChbXSk7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRvd25sb2FkU2FtcGxlRmlsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb25maWc/LmNhbGxCYWNrKSB7XG4gICAgICBjb25maWcuY2FsbEJhY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy51cmwpIHtcbiAgICAgIGRvd25sb2FkRmlsZUJ5VXJsKGNvbmZpZy51cmwsIGNvbmZpZy50aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gIDxkaXY+XG4gICAgQGlmIChsYWJlbENvbmZpZygpO2FzIGxhYmVsQ29uZmlnKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnQgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKClcIlxuICAgICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICBbcG9wb3Zlcl09XCJsYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICB9XG4gICAgQGlmICgoIWNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiB8fCBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICd0b3AnKSAmJiBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKTthcyBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiJ2xpYnMtdWktZm9udC1oN20nXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1iLVs4cHhdICFwLTAnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hdHRhY2htZW50IGJlZm9yZTohdGV4dC1bMTJweF0nXCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZT8udGl0bGUgfHwgJyAnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJEb3dubG9hZFNhbXBsZUZpbGUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICAgIEBpZiAobXVsdGlwbGUoKSB8fCBzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKSB8fCAoIWZpbGVMaXN0KCkubGVuZ3RoICYmICFtdWx0aXBsZSgpKSkge1xuICAgICAgPGRpdiAjdXBsb2FkXG4gICAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWRcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgKCFtdWx0aXBsZSgpICYmIGZpbGVMaXN0KCkubGVuZ3RoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1lcnJvcl09XCJtZXNzYWdlRXJyb3IoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzE2cHhdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWljb24gbGlicy11aS1pY29uLWZpbGUtdXBsb2FkIGJlZm9yZTohdGV4dC1bMzJweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItWzRweF0gbGlicy11aS1mb250LWg2bVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiKGNvbmZpZ0Rlc2NyaXB0aW9uSW5wdXRVcGxvYWQoKS5tZXNzYWdlIHx8ICcnKSB8IHRyYW5zbGF0ZTpjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkKCkuaW50ZXJwb2xhdGVQYXJhbXNcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlQ29tcHV0ZWQoKTsgdHJhY2sgaXRlbTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg3clwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1iLVs0cHhdXT1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0ubWVzc2FnZSB8IHRyYW5zbGF0ZTppdGVtLmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChtdWx0aXBsZSgpKSB7XG4gICAgICAgICAgPGlucHV0ICN1cGxvYWRJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtaW5wdXQgaGlkZGVuXCJcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIG5hbWU9XCJmaWxlc1tdXCJcbiAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICBbYWNjZXB0XT1cImFjY2Vzc0ZpbGVzKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8aW5wdXQgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2Nlc3NGaWxlcygpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgKG11bHRpcGxlKCkgfHwgc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkgfHwgKCFmaWxlTGlzdCgpLmxlbmd0aCAmJiAhbXVsdGlwbGUoKSkpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiPlxuICAgICAgICB7eyAobWVzc2FnZUVycm9yKCkgfHwgJycpIHwgdHJhbnNsYXRlOnsgdmFsdWU6IGxpbWl0RmlsZSgpIH0gfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO2FzIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg3bSdcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichbXQtWzhweF0gIXAtMCdcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWF0dGFjaG1lbnQgYmVmb3JlOiF0ZXh0LVsxMnB4XSdcIlxuICAgICAgICBbbGFiZWxdPVwiY29uZmlnRG93bmxvYWRTYW1wbGVGaWxlLnRpdGxlIHx8ICcgJ1wiXG4gICAgICAgIChtb0NsaWNrKT1cImhhbmRsZXJEb3dubG9hZFNhbXBsZUZpbGUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChmaWxlTGlzdCgpLmxlbmd0aCkge1xuICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBweC1bMTBweF0gbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtdmlldy1saXN0IHt7IGNsYXNzSW5jbHVkZUZpbGVDb250ZW50KCkgfHwgJycgfX1cIlxuICAgICAgW2NsYXNzLm10LVsxMnB4XV09XCJtdWx0aXBsZSgpIHx8IHNob3dCbG9ja1VwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWwtZmlsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICBAZm9yIChpdGVtIG9mIGZpbGVMaXN0KCk7IHRyYWNrIGl0ZW0oKTsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC12aWV3LWxpc3QtaXRlbSB7eyBjbGFzc0luY2x1ZGVMaXN0SXRlbSgpIHx8ICcnIH19XCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZmlsZS1mdWxsXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1maWxlLXNob3J0XT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJpdGVtKCkuZXJyb3IgfHwgKG1lc3NhZ2VFcnJvcigpICYmIHNob3dCb3JkZXJFcnJvckFsbEl0ZW1XaGVuRXJyb3IoKSlcIlxuICAgICAgICAgIFtjbGFzcy5tdC0wXT1cImZpcnN0ICYmICFtdWx0aXBsZSgpICYmICFzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQGlmIChjYW5TZXRBdmF0YXIoKSAmJiBpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInIW1yLTAnICsgKGl0ZW0oKS5pc0F2YXRhciA/ICcgbGlicy11aS1pY29uLWNoZWNrLWNpcmNsZS1zb2xpZCBiZWZvcmU6IXRleHQtWyMwMGJjNjJdJzogJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLW91dGxpbmUnKSArICgoZGlzYWJsZSgpIHx8IGl0ZW0oKS5pc1VwbG9hZGluZyB8fCAhIWl0ZW0oKS5lcnJvcikgPyAnIGxpYnMtdWktZGlzYWJsZScgOiAnJylcIlxuICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzp7IGNvbnRlbnQ6IGl0ZW0oKS5pc0F2YXRhciA/ICdpMThuX2F2YXRhcicgOiAnaTE4bl9jaG9vc2VfYXNfeW91cl9hdmF0YXInLCB6SW5kZXg6IHpJbmRleCgpfX1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1yLVsxMnB4XSAhcC0wJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8ICEhaXRlbSgpLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2V0QXZhdGFyKCRldmVudCwgaXRlbSlcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnctW2NhbGMoMTAwJS0yOHB4KV1dPVwiY2FuU2V0QXZhdGFyKClcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1mdWxsXT1cIiFjYW5TZXRBdmF0YXIoKVwiPlxuICAgICAgICAgICAgICBAaWYgKG1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCcpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtYXZhdGFyIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgW3Nob3dWaWRlb0R1cmF0aW9uXT1cInNob3dWaWRlb0R1cmF0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKG91dE9wZW5QcmV2aWV3KT1cImhhbmRsZXJPcGVuUHJldmlld0ZpbGUoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFic29sdXRlIHctZnVsbCBoLWZ1bGwgZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtY29sXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJtb2RlRGlzcGxheUZpbGUoKSA9PT0gJ3Nob3J0J1wiPlxuICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBjbGFzcz1cImZsZXggdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJpdGVtKCkubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFt6SW5kZXhQb3BvdmVyXT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCInbGlicy11aS1mb250LWg2bSAnICsgKChkaXNhYmxlKCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGl0ZW0oKS5lcnJvcikgPyAndGV4dC1bIzZhNzM4M10nIDogJ3RleHQtWyMwNzE2MzFdJylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnID8gJyFtYi0wJyA6ICcnXCIgLz5cblxuICAgICAgICAgICAgICAgICAgQGlmICghaWdub3JlU2hvd1NpemVGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtWyM5Y2EyYWRdIGxpYnMtdWktZm9udC1oN3Igc2hyaW5rLTBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tbC1bMTJweF1dPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtKCkuc2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbSgpLmlzVXBsb2FkaW5nICYmIGl0ZW0oKS5wZXJjZW50VXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1sLVsxNnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubXItWzI2cHhdXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxMjBweF0gaC1bNHB4XSByb3VuZGVkLVs0cHhdIGJnLVsjZjhmOWZhXSByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtWzRweF0gcm91bmRlZC1bNHB4XSBiZy1bIzAwYmM2Ml1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIoaXRlbSgpLnBlcmNlbnRVcGxvYWRpbmcgPz8gMCkqMS4yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtbC1bMTZweF1cIj5cbiAgICAgICAgICAgIEBpZiAoIWlnbm9yZUljb25QcmV2aWV3KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWV5ZS1vdXRsaW5lICFtci0wJ1wiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzp7IGNvbnRlbnQ6ICdpMThuX3ByZXZpZXcnLCB6SW5kZXg6IHpJbmRleCgpKzF9fVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCcgKyAoaWdub3JlSWNvblJlbW92ZSgpICYmICFpZ25vcmVJY29uRWRpdCgpID8gJycgOiAnICFtci1bMTJweF0nKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJPcGVuUHJldmlld0ZpbGUoaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGl0ZW0oKS50eXBlID09PSAnaW1hZ2UnICYmICFpdGVtKCkuZXJyb3IgJiYgIWlnbm9yZUljb25FZGl0KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6eyBjb250ZW50OiAnaTE4bl9lZGl0JywgekluZGV4OiB6SW5kZXgoKSsxfX1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnICsgKGlnbm9yZUljb25SZW1vdmUoKSA/ICcnIDogJyAhbXItWzEycHhdJylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdEltYWdlKCRldmVudCwgaXRlbSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaWdub3JlSWNvblJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jbG9zZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6IHtjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IHpJbmRleCgpKzF9fVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlRmlsZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmVycm9yICYmIChtdWx0aXBsZSgpIHx8ICFzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKSkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiPnt7IChpdGVtKCkuZXJyb3IgfHwgJyAnKSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy91cGxvYWQvc3JjL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ROLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBYSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25HLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcs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QyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBN2dCVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyxrd01DL0JsRCx3cFVBeUxBLG12R0RsS1ksZUFBZSw0RkFDdkIsc0NBQXNDLGloQkFDdEMsOEJBQThCLDRxQkFDOUIsMkNBQTJDLHlMQUMzQyxzQ0FBc0M7OzRGQUk3QixxQ0FBcUM7a0JBZGpELFNBQVM7K0JBRUUsa0NBQWtDLGNBR2hDLElBQUksV0FDUCxDQUFDLGVBQWU7d0JBQ3ZCLHNDQUFzQzt3QkFDdEMsOEJBQThCO3dCQUM5QiwyQ0FBMkM7d0JBQzNDLHNDQUFzQztxQkFDdkMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWdhbGxlcnknO1xuaW1wb3J0IHsgSVNhdmVGaWxlLCBMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWltYWdlLWVkaXRvcic7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1ByZXZpZXdGaWxlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wcmV2aWV3LWZpbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IElFdmVudCwgSUZpbGUsIElJc1ZhbGlkUmVxdWlyZWQsIElNZXNzYWdlVHJhbnNsYXRlIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWR5bmFtaWMtY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgQXVkaW9FeHRMaXN0LCBjb252ZXJ0QmxvYlRvRmlsZSwgY29udmVydEZpbGVUb0Jhc2U2NF9PYmplY3RVcmwsIERvY3VtZW50RXh0TGlzdCwgZG93bmxvYWRGaWxlQnlVcmwsIEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIGdldEZpbGVFeHRlbnNpb24sIGdldExhYmVsQnlTaXplRmlsZSwgSW1hZ2VFeHRMaXN0LCBpc0F1ZGlvRXh0TGlzdCwgaXNEb2N1bWVudEV4dExpc3QsIGlzSW1hZ2VFeHRMaXN0LCBpc1R5cGVBdWRpbywgaXNUeXBlSW1hZ2UsIGlzVHlwZVZpZGVvLCBpc1ZpZGVvRXh0TGlzdCwgdXVpZCwgVmlkZW9FeHRMaXN0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZURlZmF1bHQgfSBmcm9tICcuL2RlZmluZXMvaGVscGVyLmRlZmluZSc7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElVcGxvYWRDb25maWdEb3dubG9hZFNhbXBsZUZpbGUsIElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlLCBJVXBsb2FkRnVuY3Rpb25Db250cm9sRXZlbnQsIFRZUEVfRklMRV9VUExPQUQsIFRZUEVfTU9ERV9GSUxFX0RJU1BMQVkgfSBmcm9tICcuL2ludGVyZmFjZXMvdXBsb2FkLmludGVyZmFjZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZEF2YXRhckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRJRVNcbiAgcHJpdmF0ZSBpbWFnZUVkaXRvckNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQ+O1xuICBwcml2YXRlIHByZXZpZXdGaWxlQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNQcmV2aWV3RmlsZUNvbXBvbmVudD47XG4gIHByaXZhdGUgcHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudD47XG4gIHByb3RlY3RlZCBpc0RyYWdPdmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGZpbGVMaXN0ID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4+KFtdKTtcbiAgcHJvdGVjdGVkIGFjY2Vzc0ZpbGVzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgbWVzc2FnZUVycm9yID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVDb21wdXRlZCA9IGNvbXB1dGVkPEFycmF5PElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlPj4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUoKT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlKCkgYXMgdW5rbm93biBhcyBBcnJheTxJVXBsb2FkRGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZT47XG4gICAgfVxuICAgIHJldHVybiBnZXREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlRGVmYXVsdCh0aGlzLmZpbGVUeXBlKCksIHRoaXMubWF4SW1hZ2VTaXplKCksIHRoaXMubWF4VmlkZW9TaXplKCksIHRoaXMubWF4RG9jdW1lbnRTaXplKCksIHRoaXMubWF4QXVkaW9TaXplKCkpO1xuICB9KTtcblxuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUU1xuICByZWFkb25seSBvcmlnaW5GaWxlcyA9IGlucHV0PEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4sIEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4gfCB1bmRlZmluZWQ+KFtdLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgZmlsZVR5cGUgPSBpbnB1dDxUWVBFX0ZJTEVfVVBMT0FELCBUWVBFX0ZJTEVfVVBMT0FEIHwgdW5kZWZpbmVkPignaW1hZ2VfdmlkZW9fZG9jdW1lbnQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAnaW1hZ2VfdmlkZW9fZG9jdW1lbnQnIH0pO1xuICByZWFkb25seSBtdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNhblVwbG9hZElmSGFzRXhpc3RGaWxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjYW5TZXRBdmF0YXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpbWl0RmlsZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAgfSk7XG4gIHJlYWRvbmx5IG1heFRvdGFsU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhJbWFnZVNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oNSAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyA1ICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IG1heFZpZGVvU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhEb2N1bWVudFNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAgKiAxMDI0ICogMTAyNCB9KTtcbiAgcmVhZG9ubHkgbWF4QXVkaW9TaXplID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwICogMTAyNCAqIDEwMjQsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IDEwICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IGltYWdlRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oSW1hZ2VFeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBJbWFnZUV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IHZpZGVvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oVmlkZW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBWaWRlb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGRvY3VtZW50RXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oRG9jdW1lbnRFeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBEb2N1bWVudEV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGF1ZGlvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oQXVkaW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBBdWRpb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUxpc3RJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SUlzVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgYXNwZWN0UmF0aW8gPSBpbnB1dDxJQXNwZWN0UmF0aW8+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMjAwLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxMjAwIH0pO1xuICByZWFkb25seSBpZ25vcmVTaG93U2l6ZUZpbGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBtZXNzYWdlVHlwZUZpbGVFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl90aGVfZmlsZV9zdXBwb3J0X2Zvcm1hdF9pc19ub3RfY29ycmVjdCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdpMThuX3RoZV9maWxlX3N1cHBvcnRfZm9ybWF0X2lzX25vdF9jb3JyZWN0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZU1heFNpemVFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9maWxlX3NpemVfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdpMThuX2ZpbGVfc2l6ZV9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZUZpbGVVcGxvYWRFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ2kxOG5faW52YWxpZF9maWxlX3VwbG9hZCcgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fZmlsZV9udW1iZXJfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdF9wbGVhc2VfZGVsZXRlX3RoZV9maWxlJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ2kxOG5fZmlsZV9udW1iZXJfZXhjZWVkc190aGVfYWxsb3dlZF9saW1pdF9wbGVhc2VfZGVsZXRlX3RoZV9maWxlJyB9KVxuICByZWFkb25seSBjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGUsIElNZXNzYWdlVHJhbnNsYXRlIHwgdW5kZWZpbmVkPih7IG1lc3NhZ2U6ICdpMThuX2RyYWdfZmlsZV9oZXJlX3RvX3VwbG9hZF9vcl9zZWxlY3RfZmlsZScgfSwge1xuICAgIHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyB7IG1lc3NhZ2U6ICdpMThuX2RyYWdfZmlsZV9oZXJlX3RvX3VwbG9hZF9vcl9zZWxlY3RfZmlsZScgfVxuICB9KTtcblxuICByZWFkb25seSBtb2RlRGlzcGxheUZpbGUgPSBpbnB1dDxUWVBFX01PREVfRklMRV9ESVNQTEFZLCBUWVBFX01PREVfRklMRV9ESVNQTEFZIHwgdW5kZWZpbmVkPignZnVsbCcsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsIHx8ICdmdWxsJyB9KTtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZSA9IGlucHV0PFdyaXRhYmxlU2lnbmFsPEFycmF5PElVcGxvYWREZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlPj4+KCk7XG4gIHJlYWRvbmx5IHNob3dWaWRlb0R1cmF0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvblJlbW92ZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvbkVkaXQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUljb25QcmV2aWV3ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlRmlsZUNvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNob3dCb3JkZXJFcnJvckFsbEl0ZW1XaGVuRXJyb3IgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSA9IGlucHV0PElVcGxvYWRDb25maWdEb3dubG9hZFNhbXBsZUZpbGU+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFNcbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZUNoYW5nZWQgPSBvdXRwdXQ8QXJyYXk8V3JpdGFibGVTaWduYWw8SUZpbGU+Pj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZVJlbW92ZWQgPSBvdXRwdXQ8V3JpdGFibGVTaWduYWw8SUZpbGU+PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElVcGxvYWRGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVklFVyBDSElMRFJFTlxuICByZWFkb25seSB1cGxvYWRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3VwbG9hZCcpO1xuICByZWFkb25seSB1cGxvYWRJbnB1dFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndXBsb2FkSW5wdXQnKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5KRUNUSU9OU1xuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3JpZ2luRmlsZXMoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZUxpc3Quc2V0KFsuLi50aGlzLm9yaWdpbkZpbGVzKCldKTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vICNyZWdpb24gTElGRUNZQ0xFIEhPT0tTXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVBbGw6IHRoaXMucmVtb3ZlQWxsRmlsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBsb2FkaW5nOiBhc3luYyAocHJvY2VzcywgaWQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVVwbG9hZGluZyA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKGZpbGUgPT4gZmlsZSgpLmlkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKGZpbGVVcGxvYWRpbmcpIHtcbiAgICAgICAgICBmaWxlVXBsb2FkaW5nLnVwZGF0ZShmaWxlID0+ICh7IC4uLmZpbGUsIHBlcmNlbnRVcGxvYWRpbmc6IHByb2Nlc3MucGVyY2VudCwgaXNVcGxvYWRpbmc6IHByb2Nlc3MucGVyY2VudCAhPT0gMTAwIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldE1lc3NhZ2VFcnJvcjogYXN5bmMgKG1lc3NhZ2UsIGlkKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldChtZXNzYWdlKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZUVycm9yID0gdGhpcy5maWxlTGlzdCgpLmZpbmQoZmlsZSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICAgIGlmIChmaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIGZpbGVFcnJvci51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBlcnJvcjogbWVzc2FnZSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclVwbG9hZEZpbGU6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIHRoaXMudXBsb2FkSW5wdXRSZWYoKT8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIHRoaXMuYWNjZXNzRmlsZXMoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluaXRBY2Nlc3NGaWxlcygpO1xuICAgICAgaWYgKHRoaXMudXBsb2FkUmVmKCkpIHtcbiAgICAgICAgdGhpcy5pbml0VXBsb2FkRXZlbnQoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTklUSUFMSVpBVElPTlxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdEFjY2Vzc0ZpbGVzKCkge1xuICAgIGNvbnN0IGFjY2Vzc0V4dHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdHlwZVNwbGl0ID0gdGhpcy5maWxlVHlwZSgpLnNwbGl0KCdfJyk7XG5cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5pbWFnZUV4dExpc3QoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIGFjY2Vzc0V4dHMucHVzaCguLi50aGlzLmRvY3VtZW50RXh0TGlzdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMudmlkZW9FeHRMaXN0KCkpO1xuICAgIH1cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5hdWRpb0V4dExpc3QoKSk7XG4gICAgfVxuICAgIHRoaXMuYWNjZXNzRmlsZXMuc2V0KGFjY2Vzc0V4dHMubWFwKGV4dCA9PiBgLiR7ZXh0fWApLmpvaW4oJywnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdFVwbG9hZEV2ZW50KCkge1xuICAgIGNvbnN0IHVwbG9hZFJlZiA9IHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaW5wdXRVcGxvYWRSZWYgPSB0aGlzLnVwbG9hZElucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLmluaXRFdmVudChpbnB1dFVwbG9hZFJlZiwgJ2NoYW5nZScsIHRoaXMuaGFuZGxlclVwbG9hZEZpbGUuYmluZCh0aGlzKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodXBsb2FkUmVmLCAnY2xpY2snLCB0aGlzLmhhbmRsZXJVcGxvYWRGaWxlQ2xpY2suYmluZCh0aGlzKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodXBsb2FkUmVmLCAnZHJhZ292ZXInLCB0aGlzLmhhbmRsZXJEcmFnT3Zlci5iaW5kKHRoaXMpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh1cGxvYWRSZWYsICdkcmFnbGVhdmUnLCB0aGlzLmhhbmRsZXJEcmFnRW5kLmJpbmQodGhpcykpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHVwbG9hZFJlZiwgJ2Ryb3AnLCB0aGlzLmhhbmRsZXJEcmFnRHJvcC5iaW5kKHRoaXMpKS5zdWJzY3JpYmUoKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBFVkVOVCBIQU5ETElOR1xuICBwcm90ZWN0ZWQgaW5pdEV2ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbEJhY2s6IChldmVudDogSUV2ZW50KSA9PiB2b2lkKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4oZWxlbWVudCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKGUgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjYWxsQmFjayhlKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclVwbG9hZEZpbGVDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgdGhpcy5hY2Nlc3NGaWxlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyVXBsb2FkRmlsZShldmVudDogSUV2ZW50KSB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVVcGxvYWRGaWxlcyhldmVudCk7XG4gICAgY29uc3QgaW5wdXRVcGxvYWRSZWYgPSB0aGlzLnVwbG9hZElucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGlucHV0VXBsb2FkUmVmKSB7XG4gICAgICBpbnB1dFVwbG9hZFJlZi52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJEcmFnT3ZlcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZHJhZy1vdmVyJywgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRyYWdFbmQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnVwbG9hZFJlZigpPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2xpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRyYWctb3ZlcicsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRHJhZ0Ryb3AoZXZlbnQ6IElFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGxvYWRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1kcmFnLW92ZXInLCBmYWxzZSk7XG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZVVwbG9hZEZpbGVzKGV2ZW50KTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBGSUxFIE9QRVJBVElPTlNcbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVVwbG9hZEZpbGVzKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXMgfHwgZXZlbnQudGFyZ2V0Py5maWxlcztcbiAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSkge1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbCArPSBmaWxlc1tpXS5zaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSA8IHRvdGFsKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0RXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2kxOG5fc2l6ZV9ub3RfbnVtYmVyX21iJywgeyBudW1iZXI6IHRoaXMubWF4VG90YWxTaXplKCkgLyAxMDI0IC8gMTAyNCB9KSwgeyB0aW1lUmVtb3ZlOiAzMDAwIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3JFeGNlZWRzTWF4RmlsZSA9IGZhbHNlO1xuICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZW1haW5GaWxlVG90YWwgPSB0aGlzLmxpbWl0RmlsZSgpIC0gdGhpcy5maWxlTGlzdCgpLmxlbmd0aDtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gcmVtYWluRmlsZVRvdGFsKSB7XG4gICAgICBlcnJvckV4Y2VlZHNNYXhGaWxlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc1R5cGVJbWFnZShmaWxlKTtcbiAgICAgIGNvbnN0IGlzVmlkZW8gPSBpc1R5cGVWaWRlbyhmaWxlKTtcbiAgICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICAgIGNvbnN0IG5ld0ZpbGU6IElGaWxlID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShmaWxlLnNpemUpLFxuICAgICAgICB0eXBlOiBpc0ltYWdlID8gJ2ltYWdlJyA6IGlzVmlkZW8gPyAndmlkZW8nIDogaXNBdWRpbyA/ICdhdWRpbycgOiAnZG9jdW1lbnQnLFxuICAgICAgICBpZDogdXVpZCgpXG4gICAgICB9O1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkRmlsZUV4dGVuc2lvbihmaWxlKSkpIHtcbiAgICAgICAgaWYgKCFlcnJvckV4Y2VlZHNNYXhGaWxlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogdGhpcy5tZXNzYWdlVHlwZUZpbGVFcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdGaWxlLmVycm9yID0gdGhpcy5tZXNzYWdlVHlwZUZpbGVFcnJvcigpO1xuICAgICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZEZpbGVTaXplKGZpbGUpKSkge1xuICAgICAgICBpZiAoIWVycm9yRXhjZWVkc01heEZpbGUpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodGhpcy5tdWx0aXBsZSgpID8gdGhpcy5tZXNzYWdlRmlsZVVwbG9hZEVycm9yKCkgOiB0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RmlsZS5lcnJvciA9IHRoaXMubWVzc2FnZU1heFNpemVFcnJvcigpO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yKCkpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dEVycm9yKHRoaXMubWVzc2FnZU1heFNpemVFcnJvcigpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMucHVzaEZpbGVJbkxpc3QoZmlsZSwgbmV3RmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhblNldEF2YXRhcigpICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGggJiYgIXRoaXMuZmlsZUxpc3QoKS5maW5kKGZpbGUgPT4gZmlsZSgpLmlzQXZhdGFyKSkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoZmlsZUxpc3QgPT4ge1xuICAgICAgICBjb25zdCBpdGVtSW1hZ2UgPSBmaWxlTGlzdC5maW5kKGZpbGUgPT4gZmlsZSgpLnR5cGUgPT09ICdpbWFnZScpO1xuICAgICAgICBpZiAoaXRlbUltYWdlKSB7XG4gICAgICAgICAgaXRlbUltYWdlLnVwZGF0ZShmaWxlID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1c2hGaWxlSW5MaXN0KGZpbGU6IEZpbGUsIG5ld0ZpbGU6IElGaWxlKSB7XG4gICAgbmV3RmlsZS51cmwgPSBhd2FpdCBjb252ZXJ0RmlsZVRvQmFzZTY0X09iamVjdFVybChmaWxlKTtcblxuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKGZpbGVMaXN0ID0+IHtcbiAgICAgIGZpbGVMaXN0LnNwbGljZSgwLCB0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkgPyAxIDogMCwgc2lnbmFsKG5ld0ZpbGUpKTtcbiAgICAgIHJldHVybiBbLi4uZmlsZUxpc3RdO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJPcGVuUHJldmlld0ZpbGUoaXRlbTogSUZpbGUpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnZG9jdW1lbnQnKSB7XG4gICAgICB0aGlzLnByZXZpZXdGaWxlRG9jdW1lbnQoaXRlbSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZShpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJldmlld0ZpbGVEb2N1bWVudChpdGVtOiBJRmlsZSkge1xuICAgIGlmICh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNQcmV2aWV3RmlsZUNvbXBvbmVudCk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZGF0YScsIGl0ZW0pO1xuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKTtcbiAgICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXZpZXdGaWxlSW1hZ2UoaXRlbTogSUZpbGUpIHtcbiAgICBpZiAodGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgIGNvbnN0IHVybCA9IGl0ZW0udXJsIHx8IGl0ZW0ub3JpZ2luX3VybDtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ltYWdlcycsIFt7IHVybCB9XSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLnNldElucHV0KCdpbWFnZVNlbGVjdGVkJywgeyB1cmwgfSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZERpc3BsYXlTcmNJbWFnZScsICd1cmwnKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3NpbmdsZUltYWdlJywgdHJ1ZSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckVkaXRJbWFnZShldmVudDogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2hvd0VkaXRNb2RhbChpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlRmlsZShldmVudDogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlRmlsZShpdGVtKTtcbiAgICBpZiAodGhpcy5vcmlnaW5GaWxlcygpLmZpbmQoZmlsZSA9PiBmaWxlKCkudXJsID09PSBpdGVtKCkudXJsKSkge1xuICAgICAgdGhpcy5vdXRGaWxlUmVtb3ZlZC5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKCkgJiYgIXRoaXMuc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRVcGxvYWRFdmVudCgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZUZpbGUoZmlsZUl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKGZpbGVMaXN0ID0+IGZpbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0oKS5pZCAhPT0gZmlsZUl0ZW0oKS5pZCkpO1xuICAgIGlmICh0aGlzLmNhblNldEF2YXRhcigpICYmIGZpbGVJdGVtKCkuaXNBdmF0YXIgJiYgdGhpcy5maWxlTGlzdCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoZmlsZUxpc3QgPT4ge1xuICAgICAgICBmaWxlTGlzdFswXS51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBpc0F2YXRhcjogdHJ1ZSB9KSk7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5maWxlTGlzdF07XG4gICAgICB9KTtcblxuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93RWRpdE1vZGFsKGZpbGVJdGVtOiBXcml0YWJsZVNpZ25hbDxJRmlsZT4pIHtcbiAgICBpZiAodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlRGF0YVVybCA9IGZpbGVJdGVtKCkudXJsIHx8IGZpbGVJdGVtKCkub3JpZ2luX3VybCB8fCAnJztcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQpO1xuXG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1nU3JjJywgZmlsZURhdGFVcmwpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLnNldElucHV0KCduYW1lRmlsZScsIGZpbGVJdGVtKCkubmFtZSk7XG4gICAgaWYgKHRoaXMuYXNwZWN0UmF0aW8oKSkge1xuICAgICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXNwZWN0UmF0aW8nLCB0aGlzLmFzcGVjdFJhdGlvKCkpO1xuICAgIH1cbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmKTtcbiAgICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLmluc3RhbmNlLm91dFNhdmVGaWxlLnN1YnNjcmliZShhc3luYyAocmVzdWx0OiBJU2F2ZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VFcnJvciA9ICEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkRmlsZVNpemUocmVzdWx0LmZpbGUpKSA/IHRoaXMubWVzc2FnZU1heFNpemVFcnJvcigpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbmFtZUZpbGUgPSBmaWxlSXRlbSgpLmZpbGU/Lm5hbWUgfHwgZmlsZUl0ZW0oKS5uYW1lO1xuICAgICAgZmlsZUl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgZmlsZTogY29udmVydEJsb2JUb0ZpbGUocmVzdWx0LmZpbGUsIG5hbWVGaWxlKSwgbmFtZTogbmFtZUZpbGUsIG9yaWdpbl91cmw6IHVuZGVmaW5lZCwgc2l6ZTogZ2V0TGFiZWxCeVNpemVGaWxlKHJlc3VsdC5maWxlLnNpemUpLCBlcnJvcjogbWVzc2FnZUVycm9yLCB1cmw6IHJlc3VsdC51cmwsIGlzVXBkYXRlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMub3V0RmlsZUNoYW5nZWQuZW1pdCh0aGlzLmZpbGVMaXN0KCkpO1xuICAgICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZj8uaW5zdGFuY2Uub3V0Q2xvc2UuZW1pdCh7IGlzQ2xpY2tCdXR0b25DbG9zZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1ZhbGlkRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RmlsZUV4dGVuc2lvbihmaWxlKTtcblxuICAgIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdleHRlbnNpb24nLCBleHRlbnNpb24pO1xuICAgIGNvbnN0IGlzSW1hZ2UgPSBpc1R5cGVJbWFnZShmaWxlKTtcbiAgICBjb25zdCBpc1ZpZGVvID0gaXNUeXBlVmlkZW8oZmlsZSk7XG4gICAgY29uc3QgaXNBdWRpbyA9IGlzVHlwZUF1ZGlvKGZpbGUpO1xuICAgIGNvbnN0IHZhbGlkSW1hZ2UgPSBpc0ltYWdlRXh0TGlzdChleHRlbnNpb24pO1xuICAgIGNvbnN0IHZhbGlkVmlkZW8gPSBpc1ZpZGVvRXh0TGlzdChleHRlbnNpb24pO1xuICAgIGNvbnN0IHZhbGlkQXVkaW8gPSBpc0F1ZGlvRXh0TGlzdChleHRlbnNpb24pO1xuICAgIGNvbnN0IHZhbGlkRG9jdW1lbnQgPSBpc0RvY3VtZW50RXh0TGlzdChleHRlbnNpb24pO1xuXG4gICAgY29uc29sZS5sb2coJ3ZhbGlkSW1hZ2UnLCB2YWxpZEltYWdlKTtcbiAgICBjb25zb2xlLmxvZygndmFsaWRWaWRlbycsIHZhbGlkVmlkZW8pO1xuICAgIGNvbnNvbGUubG9nKCd2YWxpZEF1ZGlvJywgdmFsaWRBdWRpbyk7XG4gICAgY29uc29sZS5sb2coJ3ZhbGlkRG9jdW1lbnQnLCB2YWxpZERvY3VtZW50KTtcblxuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKGlzSW1hZ2UgJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICByZXR1cm4gdmFsaWRJbWFnZTtcbiAgICB9XG4gICAgaWYgKGlzVmlkZW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCd2aWRlbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRWaWRlbztcbiAgICB9XG4gICAgaWYgKGlzQXVkaW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRBdWRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnZG9jdW1lbnQnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrVmFsaWRGaWxlU2l6ZShmaWxlOiBGaWxlIHwgQmxvYikge1xuICAgIGNvbnN0IGlzSW1hZ2UgPSBpc1R5cGVJbWFnZShmaWxlKTtcbiAgICBjb25zdCBpc1ZpZGVvID0gaXNUeXBlVmlkZW8oZmlsZSk7XG4gICAgY29uc3QgaXNBdWRpbyA9IGlzVHlwZUF1ZGlvKGZpbGUpO1xuICAgIGNvbnN0IHZhbGlkSW1hZ2UgPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhJbWFnZVNpemUoKTtcbiAgICBjb25zdCB2YWxpZFZpZGVvID0gZmlsZS5zaXplIDw9IHRoaXMubWF4VmlkZW9TaXplKCk7XG4gICAgY29uc3QgdmFsaWRBdWRpbyA9IGZpbGUuc2l6ZSA8PSB0aGlzLm1heEF1ZGlvU2l6ZSgpO1xuICAgIGNvbnN0IHZhbGlkRG9jdW1lbnQgPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhEb2N1bWVudFNpemUoKTtcblxuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKGlzSW1hZ2UgJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gICAgICByZXR1cm4gdmFsaWRJbWFnZTtcbiAgICB9XG4gICAgaWYgKGlzVmlkZW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCd2aWRlbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRWaWRlbztcbiAgICB9XG4gICAgaWYgKGlzQXVkaW8gJiYgdHlwZVNwbGl0LmluY2x1ZGVzKCdhdWRpbycpKSB7XG4gICAgICByZXR1cm4gdmFsaWRBdWRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnZG9jdW1lbnQnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaXNSZXF1aXJlZCAmJiAhdGhpcy5maWxlTGlzdCgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpcGxlKCkgJiYgdGhpcy5maWxlTGlzdCgpLmxlbmd0aCA+IHRoaXMubGltaXRGaWxlKCkpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZUVycm9yID0gdGhpcy5maWxlTGlzdCgpLmZpbmQoaXRlbSA9PiBpdGVtKCkuZXJyb3IpO1xuXG4gICAgaWYgKGZpbGVFcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogZmlsZUVycm9yKCkuZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNldEF2YXRhcihldmVudDogRXZlbnQsIGZpbGU6IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5maWxlTGlzdCgpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbSgpLmlkID09PSBmaWxlKCkuaWQpIHtcbiAgICAgICAgaXRlbS51cGRhdGUoZmlsZSA9PiAoeyAuLi5maWxlLCBpc0F2YXRhcjogdHJ1ZSB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGZpbGUgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlQWxsRmlsZSgpIHtcbiAgICB0aGlzLmZpbGVMaXN0LnNldChbXSk7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRvd25sb2FkU2FtcGxlRmlsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb25maWc/LmNhbGxCYWNrKSB7XG4gICAgICBjb25maWcuY2FsbEJhY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy51cmwpIHtcbiAgICAgIGRvd25sb2FkRmlsZUJ5VXJsKGNvbmZpZy51cmwsIGNvbmZpZy50aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gIDxkaXY+XG4gICAgQGlmIChsYWJlbENvbmZpZygpO2FzIGxhYmVsQ29uZmlnKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnQgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKClcIlxuICAgICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICBbcG9wb3Zlcl09XCJsYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICB9XG4gICAgQGlmICgoIWNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiB8fCBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICd0b3AnKSAmJiBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKTthcyBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiJ2xpYnMtdWktZm9udC1oN20nXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1iLVs4cHhdICFwLTAnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hdHRhY2htZW50IGJlZm9yZTohdGV4dC1bMTJweF0nXCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZT8udGl0bGUgfHwgJyAnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJEb3dubG9hZFNhbXBsZUZpbGUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICAgIEBpZiAobXVsdGlwbGUoKSB8fCBzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKSB8fCAoIWZpbGVMaXN0KCkubGVuZ3RoICYmICFtdWx0aXBsZSgpKSkge1xuICAgICAgPGRpdiAjdXBsb2FkXG4gICAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWRcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgKCFtdWx0aXBsZSgpICYmIGZpbGVMaXN0KCkubGVuZ3RoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1lcnJvcl09XCJtZXNzYWdlRXJyb3IoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzE2cHhdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWljb24gbGlicy11aS1pY29uLWZpbGUtdXBsb2FkIGJlZm9yZTohdGV4dC1bMzJweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItWzRweF0gbGlicy11aS1mb250LWg2bVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiKGNvbmZpZ0Rlc2NyaXB0aW9uSW5wdXRVcGxvYWQoKS5tZXNzYWdlIHx8ICcnKSB8IHRyYW5zbGF0ZTpjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkKCkuaW50ZXJwb2xhdGVQYXJhbXNcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlQ29tcHV0ZWQoKTsgdHJhY2sgaXRlbTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg3clwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1iLVs0cHhdXT1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0ubWVzc2FnZSB8IHRyYW5zbGF0ZTppdGVtLmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChtdWx0aXBsZSgpKSB7XG4gICAgICAgICAgPGlucHV0ICN1cGxvYWRJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtaW5wdXQgaGlkZGVuXCJcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIG5hbWU9XCJmaWxlc1tdXCJcbiAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICBbYWNjZXB0XT1cImFjY2Vzc0ZpbGVzKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8aW5wdXQgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2Nlc3NGaWxlcygpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgKG11bHRpcGxlKCkgfHwgc2hvd0Jsb2NrVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkgfHwgKCFmaWxlTGlzdCgpLmxlbmd0aCAmJiAhbXVsdGlwbGUoKSkpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiPlxuICAgICAgICB7eyAobWVzc2FnZUVycm9yKCkgfHwgJycpIHwgdHJhbnNsYXRlOnsgdmFsdWU6IGxpbWl0RmlsZSgpIH0gfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO2FzIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg3bSdcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichbXQtWzhweF0gIXAtMCdcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWF0dGFjaG1lbnQgYmVmb3JlOiF0ZXh0LVsxMnB4XSdcIlxuICAgICAgICBbbGFiZWxdPVwiY29uZmlnRG93bmxvYWRTYW1wbGVGaWxlLnRpdGxlIHx8ICcgJ1wiXG4gICAgICAgIChtb0NsaWNrKT1cImhhbmRsZXJEb3dubG9hZFNhbXBsZUZpbGUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChmaWxlTGlzdCgpLmxlbmd0aCkge1xuICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBweC1bMTBweF0gbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtdmlldy1saXN0IHt7IGNsYXNzSW5jbHVkZUZpbGVDb250ZW50KCkgfHwgJycgfX1cIlxuICAgICAgW2NsYXNzLm10LVsxMnB4XV09XCJtdWx0aXBsZSgpIHx8IHNob3dCbG9ja1VwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWwtZmlsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICBAZm9yIChpdGVtIG9mIGZpbGVMaXN0KCk7IHRyYWNrIGl0ZW0oKTsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC12aWV3LWxpc3QtaXRlbSB7eyBjbGFzc0luY2x1ZGVMaXN0SXRlbSgpIHx8ICcnIH19XCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZmlsZS1mdWxsXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1maWxlLXNob3J0XT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJpdGVtKCkuZXJyb3IgfHwgKG1lc3NhZ2VFcnJvcigpICYmIHNob3dCb3JkZXJFcnJvckFsbEl0ZW1XaGVuRXJyb3IoKSlcIlxuICAgICAgICAgIFtjbGFzcy5tdC0wXT1cImZpcnN0ICYmICFtdWx0aXBsZSgpICYmICFzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQGlmIChjYW5TZXRBdmF0YXIoKSAmJiBpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInIW1yLTAnICsgKGl0ZW0oKS5pc0F2YXRhciA/ICcgbGlicy11aS1pY29uLWNoZWNrLWNpcmNsZS1zb2xpZCBiZWZvcmU6IXRleHQtWyMwMGJjNjJdJzogJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLW91dGxpbmUnKSArICgoZGlzYWJsZSgpIHx8IGl0ZW0oKS5pc1VwbG9hZGluZyB8fCAhIWl0ZW0oKS5lcnJvcikgPyAnIGxpYnMtdWktZGlzYWJsZScgOiAnJylcIlxuICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzp7IGNvbnRlbnQ6IGl0ZW0oKS5pc0F2YXRhciA/ICdpMThuX2F2YXRhcicgOiAnaTE4bl9jaG9vc2VfYXNfeW91cl9hdmF0YXInLCB6SW5kZXg6IHpJbmRleCgpfX1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1yLVsxMnB4XSAhcC0wJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8ICEhaXRlbSgpLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2V0QXZhdGFyKCRldmVudCwgaXRlbSlcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnctW2NhbGMoMTAwJS0yOHB4KV1dPVwiY2FuU2V0QXZhdGFyKClcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1mdWxsXT1cIiFjYW5TZXRBdmF0YXIoKVwiPlxuICAgICAgICAgICAgICBAaWYgKG1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCcpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtYXZhdGFyIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgW3Nob3dWaWRlb0R1cmF0aW9uXT1cInNob3dWaWRlb0R1cmF0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKG91dE9wZW5QcmV2aWV3KT1cImhhbmRsZXJPcGVuUHJldmlld0ZpbGUoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFic29sdXRlIHctZnVsbCBoLWZ1bGwgZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtY29sXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJtb2RlRGlzcGxheUZpbGUoKSA9PT0gJ3Nob3J0J1wiPlxuICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBjbGFzcz1cImZsZXggdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJpdGVtKCkubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFt6SW5kZXhQb3BvdmVyXT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCInbGlicy11aS1mb250LWg2bSAnICsgKChkaXNhYmxlKCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGl0ZW0oKS5lcnJvcikgPyAndGV4dC1bIzZhNzM4M10nIDogJ3RleHQtWyMwNzE2MzFdJylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnID8gJyFtYi0wJyA6ICcnXCIgLz5cblxuICAgICAgICAgICAgICAgICAgQGlmICghaWdub3JlU2hvd1NpemVGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtWyM5Y2EyYWRdIGxpYnMtdWktZm9udC1oN3Igc2hyaW5rLTBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tbC1bMTJweF1dPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtKCkuc2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbSgpLmlzVXBsb2FkaW5nICYmIGl0ZW0oKS5wZXJjZW50VXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1sLVsxNnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubXItWzI2cHhdXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnZnVsbCdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxMjBweF0gaC1bNHB4XSByb3VuZGVkLVs0cHhdIGJnLVsjZjhmOWZhXSByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtWzRweF0gcm91bmRlZC1bNHB4XSBiZy1bIzAwYmM2Ml1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIoaXRlbSgpLnBlcmNlbnRVcGxvYWRpbmcgPz8gMCkqMS4yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtbC1bMTZweF1cIj5cbiAgICAgICAgICAgIEBpZiAoIWlnbm9yZUljb25QcmV2aWV3KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWV5ZS1vdXRsaW5lICFtci0wJ1wiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzp7IGNvbnRlbnQ6ICdpMThuX3ByZXZpZXcnLCB6SW5kZXg6IHpJbmRleCgpKzF9fVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCcgKyAoaWdub3JlSWNvblJlbW92ZSgpICYmICFpZ25vcmVJY29uRWRpdCgpID8gJycgOiAnICFtci1bMTJweF0nKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJPcGVuUHJldmlld0ZpbGUoaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGl0ZW0oKS50eXBlID09PSAnaW1hZ2UnICYmICFpdGVtKCkuZXJyb3IgJiYgIWlnbm9yZUljb25FZGl0KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6eyBjb250ZW50OiAnaTE4bl9lZGl0JywgekluZGV4OiB6SW5kZXgoKSsxfX1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnICsgKGlnbm9yZUljb25SZW1vdmUoKSA/ICcnIDogJyAhbXItWzEycHhdJylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdEltYWdlKCRldmVudCwgaXRlbSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaWdub3JlSWNvblJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jbG9zZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6IHtjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IHpJbmRleCgpKzF9fVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlRmlsZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmVycm9yICYmIChtdWx0aXBsZSgpIHx8ICFzaG93QmxvY2tVcGxvYWRXaGVuSGFzRmlsZUFuZE1vZGVTaW5nbGUoKSkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiPnt7IChpdGVtKCkuZXJyb3IgfHwgJyAnKSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Pipe, model, input, output, Optional, Inject, ChangeDetectionStrategy, Component, signal, computed, viewChild, inject, effect, untracked } from '@angular/core';
|
|
3
3
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
4
|
+
import { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';
|
|
4
5
|
import { LibsUiComponentsImageEditorComponent } from '@libs-ui/components-image-editor';
|
|
5
6
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
7
|
+
import { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';
|
|
6
8
|
import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
|
|
7
9
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
8
10
|
import { LibsUiNotificationService } from '@libs-ui/services-notification';
|
|
9
|
-
import {
|
|
11
|
+
import { getFileExtension, ImageExtList, VideoExtList, DocumentExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, getLabelBySizeFile, AudioExtList, isTypeImage, isTypeVideo, isTypeAudio, uuid, convertFileToBase64_ObjectUrl, convertBlobToFile, isImageExtList, isVideoExtList, isAudioExtList, isDocumentExtList, ERROR_MESSAGE_EMPTY_VALID, downloadFileByUrl } from '@libs-ui/utils';
|
|
10
12
|
import * as i1 from '@ngx-translate/core';
|
|
11
13
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
12
14
|
import { Subject, fromEvent } from 'rxjs';
|
|
@@ -15,8 +17,6 @@ import { NgComponentOutlet, AsyncPipe } from '@angular/common';
|
|
|
15
17
|
import { LibsUiComponentsSpinnerComponent } from '@libs-ui/components-spinner';
|
|
16
18
|
import { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';
|
|
17
19
|
import { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';
|
|
18
|
-
import { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';
|
|
19
|
-
import { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';
|
|
20
20
|
|
|
21
21
|
class LibsUiPipesInputsUploadCalcDurationVideoPipe {
|
|
22
22
|
transform(duration) {
|
|
@@ -48,57 +48,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
48
48
|
}]
|
|
49
49
|
}] });
|
|
50
50
|
|
|
51
|
-
const getDescriptionFormatAndSizeFileDefault = (type, maxImageSize, maxVideoSize, maxDocumentSize, maxAudioSize) => {
|
|
52
|
-
const image = {
|
|
53
|
-
message: 'i18n_note_upload_image_volume',
|
|
54
|
-
interpolateParams: { value: getLabelBySizeFile(maxImageSize, 0) }
|
|
55
|
-
};
|
|
56
|
-
const video = {
|
|
57
|
-
message: 'i18n_note_upload_video_volume',
|
|
58
|
-
interpolateParams: { value: getLabelBySizeFile(maxVideoSize, 0) }
|
|
59
|
-
};
|
|
60
|
-
const document = {
|
|
61
|
-
message: 'i18n_note_upload_file_volume',
|
|
62
|
-
interpolateParams: { value: getLabelBySizeFile(maxDocumentSize, 0) }
|
|
63
|
-
};
|
|
64
|
-
const audio = {
|
|
65
|
-
message: 'i18n_note_upload_audio_volume',
|
|
66
|
-
interpolateParams: { value: getLabelBySizeFile(maxAudioSize, 0) }
|
|
67
|
-
};
|
|
68
|
-
const typeSplit = type.split('_');
|
|
69
|
-
const description = [];
|
|
70
|
-
if (typeSplit.includes('image')) {
|
|
71
|
-
description.push(image);
|
|
72
|
-
}
|
|
73
|
-
if (typeSplit.includes('audio')) {
|
|
74
|
-
description.push(audio);
|
|
75
|
-
}
|
|
76
|
-
if (typeSplit.includes('video')) {
|
|
77
|
-
description.push(video);
|
|
78
|
-
}
|
|
79
|
-
if (typeSplit.includes('document')) {
|
|
80
|
-
description.push(document);
|
|
81
|
-
}
|
|
82
|
-
return description;
|
|
83
|
-
};
|
|
84
|
-
const getFileExtension = (file) => {
|
|
85
|
-
const fileName = file.name;
|
|
86
|
-
if (!fileName) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const dots = fileName.split(".");
|
|
90
|
-
if (dots.length <= 0) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const extension = dots[dots.length - 1];
|
|
94
|
-
return extension.toLowerCase();
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
const DocumentExtList = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'json', 'xml'];
|
|
98
|
-
const ImageExtList = ['gif', 'jpg', 'jpeg', 'png'];
|
|
99
|
-
const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv'];
|
|
100
|
-
const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma'];
|
|
101
|
-
|
|
102
51
|
class LibsUiPipesInputsUploadCheckFileExtensionPipe {
|
|
103
52
|
transform(file, type) {
|
|
104
53
|
const fileExtension = getFileExtension(file);
|
|
@@ -111,13 +60,13 @@ class LibsUiPipesInputsUploadCheckFileExtensionPipe {
|
|
|
111
60
|
case 'video':
|
|
112
61
|
return VideoExtList.includes(fileExtension);
|
|
113
62
|
case 'word':
|
|
114
|
-
return ['doc', 'docx'].includes(fileExtension);
|
|
63
|
+
return ['doc', 'docx', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'].includes(fileExtension);
|
|
115
64
|
case 'xlsx':
|
|
116
|
-
return ['xls', 'xlsx'].includes(fileExtension);
|
|
65
|
+
return ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].includes(fileExtension);
|
|
117
66
|
case 'pdf':
|
|
118
|
-
return ['pdf'].includes(fileExtension);
|
|
67
|
+
return ['pdf', 'application/pdf'].includes(fileExtension);
|
|
119
68
|
case 'pptx':
|
|
120
|
-
return ['ppt', 'pptx'].includes(fileExtension);
|
|
69
|
+
return ['ppt', 'pptx', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'].includes(fileExtension);
|
|
121
70
|
case 'other':
|
|
122
71
|
return ![...ImageExtList, ...VideoExtList, ...DocumentExtList].includes(fileExtension);
|
|
123
72
|
}
|
|
@@ -173,6 +122,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
173
122
|
args: [LINK_IMAGE_ERROR_TOKEN_INJECT]
|
|
174
123
|
}] }] });
|
|
175
124
|
|
|
125
|
+
const getDescriptionFormatAndSizeFileDefault = (type, maxImageSize, maxVideoSize, maxDocumentSize, maxAudioSize) => {
|
|
126
|
+
const image = {
|
|
127
|
+
message: 'i18n_note_upload_image_volume',
|
|
128
|
+
interpolateParams: { value: getLabelBySizeFile(maxImageSize, 0) }
|
|
129
|
+
};
|
|
130
|
+
const video = {
|
|
131
|
+
message: 'i18n_note_upload_video_volume',
|
|
132
|
+
interpolateParams: { value: getLabelBySizeFile(maxVideoSize, 0) }
|
|
133
|
+
};
|
|
134
|
+
const document = {
|
|
135
|
+
message: 'i18n_note_upload_file_volume',
|
|
136
|
+
interpolateParams: { value: getLabelBySizeFile(maxDocumentSize, 0) }
|
|
137
|
+
};
|
|
138
|
+
const audio = {
|
|
139
|
+
message: 'i18n_note_upload_audio_volume',
|
|
140
|
+
interpolateParams: { value: getLabelBySizeFile(maxAudioSize, 0) }
|
|
141
|
+
};
|
|
142
|
+
const typeSplit = type.split('_');
|
|
143
|
+
const description = [];
|
|
144
|
+
if (typeSplit.includes('image')) {
|
|
145
|
+
description.push(image);
|
|
146
|
+
}
|
|
147
|
+
if (typeSplit.includes('audio')) {
|
|
148
|
+
description.push(audio);
|
|
149
|
+
}
|
|
150
|
+
if (typeSplit.includes('video')) {
|
|
151
|
+
description.push(video);
|
|
152
|
+
}
|
|
153
|
+
if (typeSplit.includes('document')) {
|
|
154
|
+
description.push(document);
|
|
155
|
+
}
|
|
156
|
+
return description;
|
|
157
|
+
};
|
|
158
|
+
|
|
176
159
|
class LibsUiComponentsInputsUploadComponent {
|
|
177
160
|
// #region PROPERTIES
|
|
178
161
|
imageEditorComponentRef;
|
|
@@ -385,9 +368,9 @@ class LibsUiComponentsInputsUploadComponent {
|
|
|
385
368
|
}
|
|
386
369
|
for (let i = 0; i < files.length; i++) {
|
|
387
370
|
const file = files[i];
|
|
388
|
-
const isImage = file
|
|
389
|
-
const isVideo = file
|
|
390
|
-
const isAudio = file
|
|
371
|
+
const isImage = isTypeImage(file);
|
|
372
|
+
const isVideo = isTypeVideo(file);
|
|
373
|
+
const isAudio = isTypeAudio(file);
|
|
391
374
|
const newFile = {
|
|
392
375
|
name: file.name,
|
|
393
376
|
file: file,
|
|
@@ -507,7 +490,7 @@ class LibsUiComponentsInputsUploadComponent {
|
|
|
507
490
|
this.imageEditorComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsImageEditorComponent);
|
|
508
491
|
this.imageEditorComponentRef.setInput('imgSrc', fileDataUrl);
|
|
509
492
|
this.imageEditorComponentRef.setInput('zIndex', this.zIndex() + 1);
|
|
510
|
-
this.imageEditorComponentRef.setInput('nameFile', fileItem.name);
|
|
493
|
+
this.imageEditorComponentRef.setInput('nameFile', fileItem().name);
|
|
511
494
|
if (this.aspectRatio()) {
|
|
512
495
|
this.imageEditorComponentRef.setInput('aspectRatio', this.aspectRatio());
|
|
513
496
|
}
|
|
@@ -529,13 +512,18 @@ class LibsUiComponentsInputsUploadComponent {
|
|
|
529
512
|
if (!extension) {
|
|
530
513
|
return false;
|
|
531
514
|
}
|
|
532
|
-
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
const
|
|
536
|
-
const
|
|
537
|
-
const
|
|
538
|
-
const
|
|
515
|
+
console.log('extension', extension);
|
|
516
|
+
const isImage = isTypeImage(file);
|
|
517
|
+
const isVideo = isTypeVideo(file);
|
|
518
|
+
const isAudio = isTypeAudio(file);
|
|
519
|
+
const validImage = isImageExtList(extension);
|
|
520
|
+
const validVideo = isVideoExtList(extension);
|
|
521
|
+
const validAudio = isAudioExtList(extension);
|
|
522
|
+
const validDocument = isDocumentExtList(extension);
|
|
523
|
+
console.log('validImage', validImage);
|
|
524
|
+
console.log('validVideo', validVideo);
|
|
525
|
+
console.log('validAudio', validAudio);
|
|
526
|
+
console.log('validDocument', validDocument);
|
|
539
527
|
const typeSplit = this.fileType().split('_');
|
|
540
528
|
if (isImage && typeSplit.includes('image')) {
|
|
541
529
|
return validImage;
|
|
@@ -552,9 +540,9 @@ class LibsUiComponentsInputsUploadComponent {
|
|
|
552
540
|
return false;
|
|
553
541
|
}
|
|
554
542
|
async checkValidFileSize(file) {
|
|
555
|
-
const isImage = file
|
|
556
|
-
const isVideo = file
|
|
557
|
-
const isAudio = file
|
|
543
|
+
const isImage = isTypeImage(file);
|
|
544
|
+
const isVideo = isTypeVideo(file);
|
|
545
|
+
const isAudio = isTypeAudio(file);
|
|
558
546
|
const validImage = file.size <= this.maxImageSize();
|
|
559
547
|
const validVideo = file.size <= this.maxVideoSize();
|
|
560
548
|
const validAudio = file.size <= this.maxAudioSize();
|
|
@@ -642,5 +630,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
642
630
|
* Generated bundle index. Do not edit.
|
|
643
631
|
*/
|
|
644
632
|
|
|
645
|
-
export {
|
|
633
|
+
export { LibsUiComponentsInputsUploadComponent };
|
|
646
634
|
//# sourceMappingURL=libs-ui-components-inputs-upload.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-upload.mjs","sources":["../../../../../../libs-ui/components/inputs/upload/src/pipes/calc-duration-video.pipe.ts","../../../../../../libs-ui/components/inputs/upload/src/defines/helper.define.ts","../../../../../../libs-ui/components/inputs/upload/src/defines/upload.define.ts","../../../../../../libs-ui/components/inputs/upload/src/pipes/check-file-extension.pipe.ts","../../../../../../libs-ui/components/inputs/upload/src/avatar/avatar.component.ts","../../../../../../libs-ui/components/inputs/upload/src/avatar/avatar.component.html","../../../../../../libs-ui/components/inputs/upload/src/upload.component.ts","../../../../../../libs-ui/components/inputs/upload/src/upload.component.html","../../../../../../libs-ui/components/inputs/upload/src/libs-ui-components-inputs-upload.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LibsUiPipesInputsUploadCalcDurationVideoPipe',\n standalone: true\n})\nexport class LibsUiPipesInputsUploadCalcDurationVideoPipe implements PipeTransform {\n\n transform(duration: number) {\n if (!duration) {\n return '0:0';\n }\n duration = Math.round(duration);\n if (duration >= 3600) {\n const hour = Math.floor(duration / 3600);\n const minute = Math.floor((duration - (hour * 3600)) / 60);\n const second = duration - (hour * 3600 + minute * 60);\n\n return `${hour}:${minute < 10 ? `0${minute}` : minute}:${second < 10 ? `0${second}` : second}`;\n }\n if (duration >= 60) {\n const minute = Math.floor(duration / 60);\n const second = duration - (minute * 60);\n\n return `${minute}:${second < 10 ? `0${second}` : second}`;\n }\n\n return `0:${duration}`;\n }\n\n}\n","import { getLabelBySizeFile } from '@libs-ui/utils';\nimport { IUploadDescriptionFormatAndSizeFile, TYPE_FILE_UPLOAD } from '../interfaces/upload.interface';\nimport { IFile } from '@libs-ui/interfaces-types';\n\nexport const getDescriptionFormatAndSizeFileDefault = (type: TYPE_FILE_UPLOAD, maxImageSize: number, maxVideoSize: number, maxDocumentSize: number, maxAudioSize: number): IUploadDescriptionFormatAndSizeFile[] => {\n const image = {\n message: 'i18n_note_upload_image_volume',\n interpolateParams: { value: getLabelBySizeFile(maxImageSize, 0) }\n };\n const video = {\n message: 'i18n_note_upload_video_volume',\n interpolateParams: { value: getLabelBySizeFile(maxVideoSize, 0) }\n };\n const document = {\n message: 'i18n_note_upload_file_volume',\n interpolateParams: { value: getLabelBySizeFile(maxDocumentSize, 0) }\n };\n const audio = {\n message: 'i18n_note_upload_audio_volume',\n interpolateParams: { value: getLabelBySizeFile(maxAudioSize, 0) }\n };\n\n const typeSplit = type.split('_');\n const description = [];\n\n if (typeSplit.includes('image')) {\n description.push(image);\n }\n if (typeSplit.includes('audio')) {\n description.push(audio);\n }\n if (typeSplit.includes('video')) {\n description.push(video);\n }\n if (typeSplit.includes('document')) {\n description.push(document);\n }\n\n return description;\n};\n\nexport const getFileExtension = (file: IFile | File) => {\n const fileName = file.name;\n\n if (!fileName) {\n return;\n }\n const dots = fileName.split(\".\");\n\n if (dots.length <= 0) {\n return;\n }\n const extension = dots[dots.length - 1];\n\n return extension.toLowerCase();\n};","export const DocumentExtList = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'json', 'xml'];\nexport const ImageExtList = ['gif', 'jpg', 'jpeg', 'png'];\nexport const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv'];\nexport const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma'];","import { Pipe, PipeTransform } from '@angular/core';\nimport { getFileExtension } from '../defines/helper.define';\nimport { DocumentExtList, ImageExtList, VideoExtList } from '../defines/upload.define';\nimport { IFile } from '@libs-ui/interfaces-types';\n\n@Pipe({\n name: 'LibsUiPipesInputsUploadCheckFileExtensionPipe',\n standalone: true\n})\nexport class LibsUiPipesInputsUploadCheckFileExtensionPipe implements PipeTransform {\n\n transform(file: IFile, type: 'image' | 'video' | 'word' | 'xlsx' | 'pdf' | 'pptx' | 'other') {\n const fileExtension = getFileExtension(file);\n\n if (!fileExtension) {\n return false;\n }\n switch (type) {\n case 'image':\n\n return ImageExtList.includes(fileExtension);\n\n case 'video':\n\n return VideoExtList.includes(fileExtension);\n\n case 'word':\n\n return ['doc', 'docx'].includes(fileExtension);\n\n case 'xlsx':\n\n return ['xls', 'xlsx'].includes(fileExtension);\n\n case 'pdf':\n\n return ['pdf'].includes(fileExtension);\n\n case 'pptx':\n return ['ppt', 'pptx'].includes(fileExtension);\n\n case 'other':\n return ![...ImageExtList, ...VideoExtList, ...DocumentExtList].includes(fileExtension);\n }\n }\n\n}\n","import { AsyncPipe, NgComponentOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, Inject, input, model, Optional, output } from \"@angular/core\";\nimport { LibsUiComponentsSpinnerComponent } from \"@libs-ui/components-spinner\";\nimport { LibsUiIconsGetIconComponentPipe } from \"@libs-ui/icons\";\nimport { IEvent, IFile } from \"@libs-ui/interfaces-types\";\nimport { LibsUiPipesSecurityTrustPipe } from \"@libs-ui/pipes-security-trust\";\nimport { LINK_IMAGE_ERROR_TOKEN_INJECT } from \"@libs-ui/utils\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { LibsUiPipesInputsUploadCalcDurationVideoPipe } from \"../pipes/calc-duration-video.pipe\";\nimport { LibsUiPipesInputsUploadCheckFileExtensionPipe } from \"../pipes/check-file-extension.pipe\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-upload-avatar',\n templateUrl: './avatar.component.html',\n standalone: true,\n imports: [\n NgComponentOutlet, AsyncPipe, TranslateModule,\n LibsUiComponentsSpinnerComponent,\n LibsUiPipesSecurityTrustPipe,\n LibsUiPipesInputsUploadCalcDurationVideoPipe,\n LibsUiPipesInputsUploadCheckFileExtensionPipe,\n LibsUiIconsGetIconComponentPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsInputsUploadAvatarComponent {\n readonly item = model.required<IFile>();\n readonly showVideoDuration = input<boolean>();\n readonly disable = input<boolean>();\n readonly size = input<number>();\n readonly outOpenPreview = output<IFile>();\n\n constructor(@Optional() @Inject(LINK_IMAGE_ERROR_TOKEN_INJECT) private linkImageError: string) {\n }\n\n protected async handlerImageError(event: Event) {\n if (!this.linkImageError) {\n return;\n }\n (event as IEvent).target.src = this.linkImageError;\n }\n\n protected handlerImageClick(event: Event) {\n event.stopPropagation();\n this.outOpenPreview.emit(this.item());\n }\n}\n","<div class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px]\"\n [class.mo-lib-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'image') {\n <div [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'video') {\n <div class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n <video #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"(item().url || item().origin_url || '') | LibsUiPipesSecurityTrustPipe:'resourceUrl'\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\">\n </div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div\n class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'word') {\n <ng-container *ngComponentOutlet=\"'word'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else {\n <div [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, computed, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { ISaveFile, LibsUiComponentsImageEditorComponent } from '@libs-ui/components-image-editor';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IEvent, IFile, IIsValidRequired, IMessageTranslate } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { convertBlobToFile, convertFileToBase64_ObjectUrl, downloadFileByUrl, ERROR_MESSAGE_EMPTY_VALID, getLabelBySizeFile, uuid } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { LibsUiComponentsInputsUploadAvatarComponent } from './avatar/avatar.component';\nimport { getDescriptionFormatAndSizeFileDefault, getFileExtension } from './defines/helper.define';\nimport { AudioExtList, DocumentExtList, ImageExtList, VideoExtList } from './defines/upload.define';\nimport { IAspectRatio, IUploadConfigDownloadSampleFile, IUploadDescriptionFormatAndSizeFile, IUploadFunctionControlEvent, TYPE_FILE_UPLOAD, TYPE_MODE_FILE_DISPLAY } from './interfaces/upload.interface';\nimport { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';\nimport { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-upload',\n templateUrl: './upload.component.html',\n styleUrls: ['./upload.component.scss'],\n standalone: true,\n imports: [TranslateModule,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsInputsUploadAvatarComponent,\n LibsUiComponentsScrollOverlayDirective\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsInputsUploadComponent implements OnInit, AfterViewInit, OnDestroy {\n // #region PROPERTIES\n private imageEditorComponentRef?: ComponentRef<LibsUiComponentsImageEditorComponent>;\n private previewFileComponentRef?: ComponentRef<LibsUiComponentsPreviewFileComponent>;\n private previewFileImageComponentRef?: ComponentRef<LibsUiComponentsGalleryViewerComponent>;\n protected isDragOver = signal(false);\n protected fileList = signal<Array<WritableSignal<IFile>>>([]);\n protected accessFiles = signal<string>('');\n protected messageError = signal<string | undefined>(undefined);\n protected descriptionFormatAndSizeFileComputed = computed<Array<IUploadDescriptionFormatAndSizeFile>>(() => {\n if (this.descriptionFormatAndSizeFile()?.length) {\n return this.descriptionFormatAndSizeFile() as unknown as Array<IUploadDescriptionFormatAndSizeFile>;\n }\n return getDescriptionFormatAndSizeFileDefault(this.fileType(), this.maxImageSize(), this.maxVideoSize(), this.maxDocumentSize(), this.maxAudioSize());\n });\n\n private onDestroy = new Subject<void>();\n // #endregion\n\n // #region INPUTS\n readonly originFiles = input<Array<WritableSignal<IFile>>, Array<WritableSignal<IFile>> | undefined>([], { transform: val => val ?? [] });\n readonly fileType = input<TYPE_FILE_UPLOAD, TYPE_FILE_UPLOAD | undefined>('image_video_document', { transform: val => val ?? 'image_video_document' });\n readonly multiple = input<boolean>();\n readonly canUploadIfHasExistFile = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly canSetAvatar = input<boolean | undefined>(false);\n readonly limitFile = input<number, number | undefined>(10, { transform: val => val ?? 10 });\n readonly maxTotalSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxImageSize = input<number, number | undefined>(5 * 1024 * 1024, { transform: val => val ?? 5 * 1024 * 1024 });\n readonly maxVideoSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxDocumentSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxAudioSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly imageExtList = input<string[], string[] | undefined>(ImageExtList, { transform: val => val ?? ImageExtList });\n readonly videoExtList = input<string[], string[] | undefined>(VideoExtList, { transform: val => val ?? VideoExtList });\n readonly documentExtList = input<string[], string[] | undefined>(DocumentExtList, { transform: val => val ?? DocumentExtList });\n readonly audioExtList = input<string[], string[] | undefined>(AudioExtList, { transform: val => val ?? AudioExtList });\n readonly classIncludeListItem = input<string>();\n readonly validRequired = input<IIsValidRequired>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly aspectRatio = input<IAspectRatio>();\n readonly zIndex = input<number, number | undefined>(1200, { transform: val => val ?? 1200 });\n readonly ignoreShowSizeFile = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly allowShowPushMessageMaxSizeError = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly messageTypeFileError = input<string, string | undefined>('i18n_the_file_support_format_is_not_correct', { transform: val => val || 'i18n_the_file_support_format_is_not_correct' });\n readonly messageMaxSizeError = input<string, string | undefined>('i18n_file_size_exceeds_the_allowed_limit', { transform: val => val || 'i18n_file_size_exceeds_the_allowed_limit' });\n readonly messageFileUploadError = input<string, string | undefined>('i18n_invalid_file_upload', { transform: val => val || 'i18n_invalid_file_upload' });\n readonly messageTotalFileExceedsError = input<string, string | undefined>('i18n_file_number_exceeds_the_allowed_limit_please_delete_the_file', { transform: val => val || 'i18n_file_number_exceeds_the_allowed_limit_please_delete_the_file' })\n readonly configDescriptionInputUpload = input<IMessageTranslate, IMessageTranslate | undefined>({ message: 'i18n_drag_file_here_to_upload_or_select_file' }, {\n transform: val => val ?? { message: 'i18n_drag_file_here_to_upload_or_select_file' }\n });\n\n readonly modeDisplayFile = input<TYPE_MODE_FILE_DISPLAY, TYPE_MODE_FILE_DISPLAY | undefined>('full', { transform: val => val || 'full' });\n readonly descriptionFormatAndSizeFile = input<WritableSignal<Array<IUploadDescriptionFormatAndSizeFile>>>();\n readonly showVideoDuration = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly labelConfig = input<ILabel>();\n readonly showBlockUploadWhenHasFileAndModeSingle = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n readonly ignoreIconRemove = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly ignoreIconEdit = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly ignoreIconPreview = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n readonly classIncludeFileContent = input<string>();\n readonly showBorderErrorAllItemWhenError = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly configDownloadSampleFile = input<IUploadConfigDownloadSampleFile>();\n // #endregion\n\n // #region OUTPUTS\n readonly outClose = output<boolean>();\n readonly outFileChanged = output<Array<WritableSignal<IFile>>>();\n readonly outFileRemoved = output<WritableSignal<IFile>>();\n readonly outFunctionsControl = output<IUploadFunctionControlEvent>();\n // #endregion\n\n // #region VIEW CHILDREN\n readonly uploadRef = viewChild<ElementRef>('upload');\n readonly uploadInputRef = viewChild<ElementRef>('uploadInput');\n // #endregion\n\n // #region INJECTIONS\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n private translateService = inject(TranslateService);\n private notificationService = inject(LibsUiNotificationService);\n // #endregion\n\n constructor() {\n effect(() => {\n if (this.originFiles()) {\n untracked(() => {\n this.fileList.set([...this.originFiles()]);\n })\n }\n });\n }\n\n // #region LIFECYCLE HOOKS\n ngOnInit() {\n this.outFunctionsControl.emit({\n valid: this.validate.bind(this),\n removeAll: this.removeAllFile.bind(this),\n uploading: async (process, id) => {\n const fileUploading = this.fileList().find(file => file().id === id);\n\n if (fileUploading) {\n fileUploading.update(file => ({ ...file, percentUploading: process.percent, isUploading: process.percent !== 100 }));\n }\n },\n setMessageError: async (message, id) => {\n this.messageError.set(message);\n if (id) {\n const fileError = this.fileList().find(file => file().id === id);\n\n if (fileError) {\n fileError.update(file => ({ ...file, error: message }));\n }\n }\n },\n handlerUploadFile: async () => {\n this.uploadInputRef()?.nativeElement.click();\n this.uploadInputRef()?.nativeElement.setAttribute('accept', this.accessFiles());\n }\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.initAccessFiles();\n if (this.uploadRef()) {\n this.initUploadEvent();\n }\n }, 0);\n }\n // #endregion\n\n // #region INITIALIZATION\n protected async initAccessFiles() {\n const accessExts: string[] = [];\n const typeSplit = this.fileType().split('_');\n\n if (typeSplit.includes('image')) {\n accessExts.push(...this.imageExtList());\n }\n if (typeSplit.includes('document')) {\n accessExts.push(...this.documentExtList());\n }\n if (typeSplit.includes('video')) {\n accessExts.push(...this.videoExtList());\n }\n if (typeSplit.includes('audio')) {\n accessExts.push(...this.audioExtList());\n }\n this.accessFiles.set(accessExts.map(ext => `.${ext}`).join(','));\n }\n\n protected async initUploadEvent() {\n const uploadRef = this.uploadRef()?.nativeElement;\n const inputUploadRef = this.uploadInputRef()?.nativeElement;\n\n this.initEvent(inputUploadRef, 'change', this.handlerUploadFile.bind(this)).subscribe();\n this.initEvent(uploadRef, 'click', this.handlerUploadFileClick.bind(this)).subscribe();\n this.initEvent(uploadRef, 'dragover', this.handlerDragOver.bind(this)).subscribe();\n this.initEvent(uploadRef, 'dragleave', this.handlerDragEnd.bind(this)).subscribe();\n this.initEvent(uploadRef, 'drop', this.handlerDragDrop.bind(this)).subscribe();\n }\n // #endregion\n\n // #region EVENT HANDLING\n protected initEvent(element: HTMLElement, eventName: string, callBack: (event: IEvent) => void): Observable<IEvent> {\n return fromEvent<IEvent>(element, eventName).pipe(\n tap(e => {\n e.stopPropagation();\n callBack(e);\n }),\n takeUntil(this.onDestroy)\n );\n }\n\n protected async handlerUploadFileClick(event: Event) {\n event.stopPropagation();\n if (!this.multiple() && this.fileList().length && !this.canUploadIfHasExistFile()) {\n return;\n }\n this.uploadInputRef()?.nativeElement.click();\n this.uploadInputRef()?.nativeElement.setAttribute('accept', this.accessFiles());\n }\n\n protected async handlerUploadFile(event: IEvent) {\n await this.handleUploadFiles(event);\n const inputUploadRef = this.uploadInputRef()?.nativeElement;\n if (inputUploadRef) {\n inputUploadRef.value = null;\n }\n }\n\n protected async handlerDragOver(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', true);\n }\n\n protected async handlerDragEnd(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', false);\n }\n\n protected async handlerDragDrop(event: IEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', false);\n\n await this.handleUploadFiles(event);\n }\n // #endregion\n\n // #region FILE OPERATIONS\n protected async handleUploadFiles(event: IEvent) {\n const files = event.dataTransfer?.files || event.target?.files;\n if (this.maxTotalSize()) {\n let total = 0;\n\n for (let i = 0; i < files.length; i++) {\n total += files[i].size;\n }\n\n if (this.maxTotalSize() < total) {\n this.notificationService.showCompTypeTextError(this.translateService.instant('i18n_size_not_number_mb', { number: this.maxTotalSize() / 1024 / 1024 }), { timeRemove: 3000 });\n\n return;\n }\n }\n\n let errorExceedsMaxFile = false;\n if (!files || !files.length) {\n return;\n }\n if (!this.multiple() && this.fileList().length && !this.canUploadIfHasExistFile()) {\n return;\n }\n\n const remainFileTotal = this.limitFile() - this.fileList().length;\n if (files.length > remainFileTotal) {\n errorExceedsMaxFile = true;\n this.messageError.set(this.messageTotalFileExceedsError());\n }\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const isImage = file.type.match(/image.*/) ? true : false;\n const isVideo = file.type.match(/video.*/) ? true : false;\n const isAudio = file.type.match(/audio.*/) ? true : false;\n const newFile: IFile = {\n name: file.name,\n file: file,\n size: getLabelBySizeFile(file.size),\n type: isImage ? 'image' : isVideo ? 'video' : isAudio ? 'audio' : 'document',\n id: uuid()\n };\n if (!(await this.checkValidFileExtension(file))) {\n if (!errorExceedsMaxFile) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : this.messageTypeFileError());\n }\n newFile.error = this.messageTypeFileError();\n await this.pushFileInList(file, newFile);\n continue;\n }\n if (!(await this.checkValidFileSize(file))) {\n if (!errorExceedsMaxFile) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : this.messageMaxSizeError());\n }\n newFile.error = this.messageMaxSizeError();\n if (!this.multiple() && this.allowShowPushMessageMaxSizeError()) {\n this.notificationService.showCompTypeTextError(this.messageMaxSizeError());\n\n return;\n }\n await this.pushFileInList(file, newFile);\n continue;\n }\n await this.pushFileInList(file, newFile);\n }\n if (this.canSetAvatar() && this.fileList().length && !this.fileList().find(file => file().isAvatar)) {\n this.fileList.update(fileList => {\n const itemImage = fileList.find(file => file().type === 'image');\n if (itemImage) {\n itemImage.update(file => ({ ...file, isAvatar: true }));\n }\n return [...fileList];\n });\n }\n this.outFileChanged.emit(this.fileList());\n this.validate();\n }\n\n private async pushFileInList(file: File, newFile: IFile) {\n newFile.url = await convertFileToBase64_ObjectUrl(file);\n\n this.fileList.update(fileList => {\n fileList.splice(0, this.canUploadIfHasExistFile() ? 1 : 0, signal(newFile));\n return [...fileList];\n });\n }\n\n protected async handlerOpenPreviewFile(item: IFile) {\n if (item.type === 'document') {\n this.previewFileDocument(item);\n return;\n }\n this.previewFileImage(item);\n }\n\n private async previewFileDocument(item: IFile) {\n if (this.previewFileComponentRef) {\n return;\n }\n this.previewFileComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsPreviewFileComponent);\n this.previewFileComponentRef.setInput('data', item);\n this.previewFileComponentRef.setInput('zIndex', this.zIndex() + 1);\n this.previewFileComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.previewFileComponentRef);\n this.previewFileComponentRef = undefined;\n });\n this.dynamicComponentService.addToBody(this.previewFileComponentRef);\n }\n\n private async previewFileImage(item: IFile) {\n if (this.previewFileImageComponentRef) {\n return;\n }\n this.previewFileImageComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsGalleryViewerComponent);\n const url = item.url || item.origin_url;\n this.previewFileImageComponentRef.setInput('images', [{ url }]);\n this.previewFileImageComponentRef.setInput('imageSelected', { url });\n this.previewFileImageComponentRef.setInput('fieldDisplaySrcImage', 'url');\n this.previewFileImageComponentRef.setInput('singleImage', true);\n this.previewFileImageComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.previewFileImageComponentRef);\n this.previewFileImageComponentRef = undefined;\n });\n this.dynamicComponentService.addToBody(this.previewFileImageComponentRef);\n }\n\n protected async handlerEditImage(event: Event, item: WritableSignal<IFile>) {\n event.stopPropagation();\n this.showEditModal(item);\n }\n\n protected async handlerRemoveFile(event: Event, item: WritableSignal<IFile>) {\n event.stopPropagation();\n this.removeFile(item);\n if (this.originFiles().find(file => file().url === item().url)) {\n this.outFileRemoved.emit(item);\n }\n this.validate();\n if (!this.multiple() && !this.showBlockUploadWhenHasFileAndModeSingle()) {\n setTimeout(() => {\n this.initUploadEvent();\n }, 0);\n }\n }\n\n protected async removeFile(fileItem: WritableSignal<IFile>) {\n this.fileList.update(fileList => fileList.filter(item => item().id !== fileItem().id));\n if (this.canSetAvatar() && fileItem().isAvatar && this.fileList().length) {\n this.fileList.update(fileList => {\n fileList[0].update(file => ({ ...file, isAvatar: true }));\n\n return [...fileList];\n });\n\n }\n this.outFileChanged.emit(this.fileList());\n }\n\n protected async showEditModal(fileItem: WritableSignal<IFile>) {\n if (this.imageEditorComponentRef) {\n return;\n }\n const fileDataUrl = fileItem().url || fileItem().origin_url || '';\n this.imageEditorComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsImageEditorComponent);\n\n this.imageEditorComponentRef.setInput('imgSrc', fileDataUrl);\n this.imageEditorComponentRef.setInput('zIndex', this.zIndex() + 1);\n this.imageEditorComponentRef.setInput('nameFile', fileItem.name);\n if (this.aspectRatio()) {\n this.imageEditorComponentRef.setInput('aspectRatio', this.aspectRatio());\n }\n this.imageEditorComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.imageEditorComponentRef);\n this.imageEditorComponentRef = undefined;\n });\n\n this.imageEditorComponentRef.instance.outSaveFile.subscribe(async (result: ISaveFile) => {\n const messageError = !(await this.checkValidFileSize(result.file)) ? this.messageMaxSizeError() : undefined;\n const nameFile = fileItem().file?.name || fileItem().name;\n fileItem.update(data => ({ ...data, file: convertBlobToFile(result.file, nameFile), name: nameFile, origin_url: undefined, size: getLabelBySizeFile(result.file.size), error: messageError, url: result.url, isUpdate: true }));\n this.outFileChanged.emit(this.fileList());\n this.imageEditorComponentRef?.instance.outClose.emit({ isClickButtonClose: true });\n });\n this.dynamicComponentService.addToBody(this.imageEditorComponentRef);\n }\n\n protected async checkValidFileExtension(file: File) {\n const extension = getFileExtension(file);\n\n if (!extension) {\n return false;\n }\n const isImage = file.type.match(/image.*/) ? true : false;\n const isVideo = file.type.match(/video.*/) ? true : false;\n const isAudio = file.type.match(/audio.*/) ? true : false;\n const validImage = this.imageExtList().indexOf(extension) >= 0;\n const validVideo = this.videoExtList().indexOf(extension) >= 0;\n const validAudio = this.audioExtList().indexOf(extension) >= 0;\n const validDocument = this.documentExtList().indexOf(extension) >= 0;\n\n const typeSplit = this.fileType().split('_');\n\n if (isImage && typeSplit.includes('image')) {\n return validImage;\n }\n if (isVideo && typeSplit.includes('video')) {\n return validVideo;\n }\n if (isAudio && typeSplit.includes('audio')) {\n return validAudio;\n }\n if (typeSplit.includes('document')) {\n return validDocument;\n }\n\n return false;\n }\n\n protected async checkValidFileSize(file: File | Blob) {\n const isImage = file.type.match(/image.*/) ? true : false;\n const isVideo = file.type.match(/video.*/) ? true : false;\n const isAudio = file.type.match(/audio.*/) ? true : false;\n const validImage = file.size <= this.maxImageSize();\n const validVideo = file.size <= this.maxVideoSize();\n const validAudio = file.size <= this.maxAudioSize();\n const validDocument = file.size <= this.maxDocumentSize();\n\n const typeSplit = this.fileType().split('_');\n\n if (isImage && typeSplit.includes('image')) {\n return validImage;\n }\n if (isVideo && typeSplit.includes('video')) {\n return validVideo;\n }\n if (isAudio && typeSplit.includes('audio')) {\n return validAudio;\n }\n if (typeSplit.includes('document')) {\n return validDocument;\n }\n\n return false;\n }\n\n protected async validate() {\n if (this.validRequired()?.isRequired && !this.fileList().length) {\n this.messageError.set(this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID);\n\n return false;\n }\n if (this.multiple() && this.fileList().length > this.limitFile()) {\n this.messageError.set(this.messageTotalFileExceedsError());\n\n return false;\n }\n const fileError = this.fileList().find(item => item().error);\n\n if (fileError) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : fileError().error);\n\n return false;\n }\n this.messageError.set(undefined);\n\n return true;\n }\n\n protected async handlerSetAvatar(event: Event, file: WritableSignal<IFile>) {\n event.stopPropagation();\n\n this.fileList().forEach(item => {\n if (item().id === file().id) {\n item.update(file => ({ ...file, isAvatar: true }));\n return;\n }\n item.update(file => ({ ...file, isAvatar: false }));\n });\n this.outFileChanged.emit(this.fileList());\n }\n\n private async removeAllFile() {\n this.fileList.set([]);\n this.messageError.set(undefined);\n }\n\n protected async handlerDownloadSampleFile(event: Event) {\n event.stopPropagation();\n const config = this.configDownloadSampleFile();\n if (!config) {\n return;\n }\n if (config?.callBack) {\n config.callBack();\n\n return;\n }\n if (config?.url) {\n downloadFileByUrl(config.url, config.title);\n }\n }\n\n // #endregion\n\n\n ngOnDestroy() {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","<div class=\"flex flex-col w-full h-full\">\n <div>\n @if (labelConfig();as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if ((!configDownloadSampleFile()?.position || configDownloadSampleFile()?.position === 'top') && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mb-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile?.title || ' '\"\n (outClick)=\"handlerDownloadSampleFile($event)\" />\n }\n @if (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple())) {\n <div #upload\n class=\"libs-ui-components-inputs-upload\"\n [class.libs-ui-components-inputs-upload-disable]=\"disable() || (!multiple() && fileList().length)\"\n [class.libs-ui-components-inputs-upload-error]=\"messageError()\">\n <div class=\"flex items-center\">\n <div class=\"mr-[16px]\">\n <i class=\"libs-ui-components-inputs-upload-icon libs-ui-icon-file-upload before:!text-[32px]\"></i>\n </div>\n <div class=\"libs-ui-components-inputs-upload-description\">\n <div class=\"mb-[4px] libs-ui-font-h6m\"\n [innerHTML]=\"(configDescriptionInputUpload().message || '') | translate:configDescriptionInputUpload().interpolateParams\">\n </div>\n @for (item of descriptionFormatAndSizeFileComputed(); track item; let last = $last) {\n <div class=\"libs-ui-font-h7r\"\n [class.mb-[4px]]=\"!last\"\n [innerHTML]=\"item.message | translate:item.interpolateParams\">\n </div>\n }\n </div>\n </div>\n @if (multiple()) {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n multiple\n [accept]=\"accessFiles()\" />\n } @else {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n [accept]=\"accessFiles()\" />\n }\n </div>\n }\n @if (messageError() && (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple()))) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">\n {{ (messageError() || '') | translate:{ value: limitFile() } }}\n </div>\n }\n @if (configDownloadSampleFile()?.position === 'bottom' && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mt-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile.title || ' '\"\n (moClick)=\"handlerDownloadSampleFile($event)\" />\n }\n </div>\n @if (fileList().length) {\n <div LibsUiComponentsScrollOverlayDirective\n class=\"relative w-full h-full px-[10px] libs-ui-components-inputs-upload-view-list {{ classIncludeFileContent() || '' }}\"\n [class.mt-[12px]]=\"multiple() || showBlockUploadWhenHasFileAndModeSingle()\">\n <ng-content select=\"[label-file]\"></ng-content>\n @for (item of fileList(); track item(); let first = $first) {\n <div class=\"libs-ui-components-inputs-upload-view-list-item {{ classIncludeListItem() || '' }}\"\n [class.libs-ui-components-inputs-upload-file-full]=\"modeDisplayFile() === 'full'\"\n [class.libs-ui-components-inputs-upload-file-short]=\"modeDisplayFile() === 'short'\"\n [class.libs-ui-border-error-general]=\"item().error || (messageError() && showBorderErrorAllItemWhenError())\"\n [class.mt-0]=\"first && !multiple() && !showBlockUploadWhenHasFileAndModeSingle()\">\n\n <div class=\"flex w-full\">\n <div class=\"flex items-center\">\n @if (canSetAvatar() && item().type === 'image') {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'!mr-0' + (item().isAvatar ? ' libs-ui-icon-check-circle-solid before:!text-[#00bc62]': ' libs-ui-icon-check-circle-outline') + ((disable() || item().isUploading || !!item().error) ? ' libs-ui-disable' : '')\"\n [popover]=\"{config:{ content: item().isAvatar ? 'i18n_avatar' : 'i18n_choose_as_your_avatar', zIndex: zIndex()}}\"\n [classInclude]=\"'!mr-[12px] !p-0'\"\n [disable]=\"disable() || item().isUploading || !!item().error\"\n (outClick)=\"handlerSetAvatar($event, item)\" />\n }\n </div>\n <div class=\"flex\"\n [class.w-[calc(100%-28px)]]=\"canSetAvatar()\"\n [class.w-full]=\"!canSetAvatar()\">\n @if (modeDisplayFile() === 'full') {\n <libs_ui-components-inputs-upload-avatar [disable]=\"disable()\"\n [(item)]=\"item\"\n [showVideoDuration]=\"showVideoDuration()\"\n (outOpenPreview)=\"handlerOpenPreviewFile($event)\" />\n }\n <div class=\"relative w-full\">\n <div class=\"flex absolute w-full h-full flex-col\"\n [class.flex-col]=\"modeDisplayFile() === 'full'\"\n [class.justify-center]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\">\n <libs_ui-components-label class=\"flex w-full\"\n [labelLeft]=\"item().name\"\n [zIndexPopover]=\"zIndex() + 1\"\n [labelLeftClass]=\"'libs-ui-font-h6m ' + ((disable() || item().isUploading || item().error) ? 'text-[#6a7383]' : 'text-[#071631]')\"\n [classInclude]=\"modeDisplayFile() === 'short' ? '!mb-0' : ''\" />\n\n @if (!ignoreShowSizeFile()) {\n <div class=\"text-[#9ca2ad] libs-ui-font-h7r shrink-0\"\n [class.flex]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\"\n [class.ml-[12px]]=\"modeDisplayFile() === 'short'\">\n {{ item().size }}\n </div>\n }\n </div>\n </div>\n @if (item().isUploading && item().percentUploading) {\n <div class=\"flex items-center ml-[16px]\"\n [class.mr-[26px]]=\"modeDisplayFile() === 'full'\">\n <div class=\"w-[120px] h-[4px] rounded-[4px] bg-[#f8f9fa] relative\">\n <div class=\"absolute top-0 left-0 h-[4px] rounded-[4px] bg-[#00bc62]\"\n [style.width.px]=\"(item().percentUploading ?? 0)*1.2\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex ml-[16px]\">\n @if (!ignoreIconPreview()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-eye-outline !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_preview', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() && !ignoreIconEdit() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerOpenPreviewFile(item())\" />\n }\n @if (item().type === 'image' && !item().error && !ignoreIconEdit()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-edit-line !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_edit', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerEditImage($event, item)\" />\n }\n @if (!ignoreIconRemove()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-close !mr-0'\"\n [popover]=\"{config: {content: 'i18n_delete', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0'\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerRemoveFile($event, item)\" />\n }\n </div>\n </div>\n @if (item().error && (multiple() || !showBlockUploadWhenHasFileAndModeSingle())) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">{{ (item().error || ' ') | translate }}</div>\n }\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-upload.mjs","sources":["../../../../../../libs-ui/components/inputs/upload/src/pipes/calc-duration-video.pipe.ts","../../../../../../libs-ui/components/inputs/upload/src/pipes/check-file-extension.pipe.ts","../../../../../../libs-ui/components/inputs/upload/src/avatar/avatar.component.ts","../../../../../../libs-ui/components/inputs/upload/src/avatar/avatar.component.html","../../../../../../libs-ui/components/inputs/upload/src/defines/helper.define.ts","../../../../../../libs-ui/components/inputs/upload/src/upload.component.ts","../../../../../../libs-ui/components/inputs/upload/src/upload.component.html","../../../../../../libs-ui/components/inputs/upload/src/libs-ui-components-inputs-upload.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LibsUiPipesInputsUploadCalcDurationVideoPipe',\n standalone: true\n})\nexport class LibsUiPipesInputsUploadCalcDurationVideoPipe implements PipeTransform {\n\n transform(duration: number) {\n if (!duration) {\n return '0:0';\n }\n duration = Math.round(duration);\n if (duration >= 3600) {\n const hour = Math.floor(duration / 3600);\n const minute = Math.floor((duration - (hour * 3600)) / 60);\n const second = duration - (hour * 3600 + minute * 60);\n\n return `${hour}:${minute < 10 ? `0${minute}` : minute}:${second < 10 ? `0${second}` : second}`;\n }\n if (duration >= 60) {\n const minute = Math.floor(duration / 60);\n const second = duration - (minute * 60);\n\n return `${minute}:${second < 10 ? `0${second}` : second}`;\n }\n\n return `0:${duration}`;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IFile } from '@libs-ui/interfaces-types';\nimport { DocumentExtList, getFileExtension, ImageExtList, VideoExtList } from '@libs-ui/utils';\n\n@Pipe({\n name: 'LibsUiPipesInputsUploadCheckFileExtensionPipe',\n standalone: true\n})\nexport class LibsUiPipesInputsUploadCheckFileExtensionPipe implements PipeTransform {\n\n transform(file: IFile, type: 'image' | 'video' | 'word' | 'xlsx' | 'pdf' | 'pptx' | 'other') {\n const fileExtension = getFileExtension(file);\n\n if (!fileExtension) {\n return false;\n }\n switch (type) {\n case 'image':\n\n return ImageExtList.includes(fileExtension);\n\n case 'video':\n\n return VideoExtList.includes(fileExtension);\n\n case 'word':\n return ['doc', 'docx', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'].includes(fileExtension)\n\n case 'xlsx':\n return ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].includes(fileExtension)\n\n case 'pdf':\n return ['pdf', 'application/pdf'].includes(fileExtension)\n\n case 'pptx':\n return ['ppt', 'pptx', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'].includes(fileExtension)\n\n case 'other':\n return ![...ImageExtList, ...VideoExtList, ...DocumentExtList].includes(fileExtension);\n }\n }\n\n}\n","import { AsyncPipe, NgComponentOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, Inject, input, model, Optional, output } from \"@angular/core\";\nimport { LibsUiComponentsSpinnerComponent } from \"@libs-ui/components-spinner\";\nimport { LibsUiIconsGetIconComponentPipe } from \"@libs-ui/icons\";\nimport { IEvent, IFile } from \"@libs-ui/interfaces-types\";\nimport { LibsUiPipesSecurityTrustPipe } from \"@libs-ui/pipes-security-trust\";\nimport { LINK_IMAGE_ERROR_TOKEN_INJECT } from \"@libs-ui/utils\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { LibsUiPipesInputsUploadCalcDurationVideoPipe } from \"../pipes/calc-duration-video.pipe\";\nimport { LibsUiPipesInputsUploadCheckFileExtensionPipe } from \"../pipes/check-file-extension.pipe\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-upload-avatar',\n templateUrl: './avatar.component.html',\n standalone: true,\n imports: [\n NgComponentOutlet, AsyncPipe, TranslateModule,\n LibsUiComponentsSpinnerComponent,\n LibsUiPipesSecurityTrustPipe,\n LibsUiPipesInputsUploadCalcDurationVideoPipe,\n LibsUiPipesInputsUploadCheckFileExtensionPipe,\n LibsUiIconsGetIconComponentPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsInputsUploadAvatarComponent {\n readonly item = model.required<IFile>();\n readonly showVideoDuration = input<boolean>();\n readonly disable = input<boolean>();\n readonly size = input<number>();\n readonly outOpenPreview = output<IFile>();\n\n constructor(@Optional() @Inject(LINK_IMAGE_ERROR_TOKEN_INJECT) private linkImageError: string) {\n }\n\n protected async handlerImageError(event: Event) {\n if (!this.linkImageError) {\n return;\n }\n (event as IEvent).target.src = this.linkImageError;\n }\n\n protected handlerImageClick(event: Event) {\n event.stopPropagation();\n this.outOpenPreview.emit(this.item());\n }\n}\n","<div class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px]\"\n [class.mo-lib-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'image') {\n <div [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'video') {\n <div class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n <video #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"(item().url || item().origin_url || '') | LibsUiPipesSecurityTrustPipe:'resourceUrl'\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\">\n </div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div\n class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'word') {\n <ng-container *ngComponentOutlet=\"'word'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe:'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx'|LibsUiIconsGetIconComponentPipe|async\" />\n }\n @else {\n <div [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n","import { getLabelBySizeFile } from '@libs-ui/utils';\nimport { IUploadDescriptionFormatAndSizeFile, TYPE_FILE_UPLOAD } from '../interfaces/upload.interface';\n\nexport const getDescriptionFormatAndSizeFileDefault = (type: TYPE_FILE_UPLOAD, maxImageSize: number, maxVideoSize: number, maxDocumentSize: number, maxAudioSize: number): IUploadDescriptionFormatAndSizeFile[] => {\n const image = {\n message: 'i18n_note_upload_image_volume',\n interpolateParams: { value: getLabelBySizeFile(maxImageSize, 0) }\n };\n const video = {\n message: 'i18n_note_upload_video_volume',\n interpolateParams: { value: getLabelBySizeFile(maxVideoSize, 0) }\n };\n const document = {\n message: 'i18n_note_upload_file_volume',\n interpolateParams: { value: getLabelBySizeFile(maxDocumentSize, 0) }\n };\n const audio = {\n message: 'i18n_note_upload_audio_volume',\n interpolateParams: { value: getLabelBySizeFile(maxAudioSize, 0) }\n };\n\n const typeSplit = type.split('_');\n const description = [];\n\n if (typeSplit.includes('image')) {\n description.push(image);\n }\n if (typeSplit.includes('audio')) {\n description.push(audio);\n }\n if (typeSplit.includes('video')) {\n description.push(video);\n }\n if (typeSplit.includes('document')) {\n description.push(document);\n }\n\n return description;\n};","import { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, computed, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';\nimport { ISaveFile, LibsUiComponentsImageEditorComponent } from '@libs-ui/components-image-editor';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IEvent, IFile, IIsValidRequired, IMessageTranslate } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { AudioExtList, convertBlobToFile, convertFileToBase64_ObjectUrl, DocumentExtList, downloadFileByUrl, ERROR_MESSAGE_EMPTY_VALID, getFileExtension, getLabelBySizeFile, ImageExtList, isAudioExtList, isDocumentExtList, isImageExtList, isTypeAudio, isTypeImage, isTypeVideo, isVideoExtList, uuid, VideoExtList } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { LibsUiComponentsInputsUploadAvatarComponent } from './avatar/avatar.component';\nimport { getDescriptionFormatAndSizeFileDefault } from './defines/helper.define';\nimport { IAspectRatio, IUploadConfigDownloadSampleFile, IUploadDescriptionFormatAndSizeFile, IUploadFunctionControlEvent, TYPE_FILE_UPLOAD, TYPE_MODE_FILE_DISPLAY } from './interfaces/upload.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-upload',\n templateUrl: './upload.component.html',\n styleUrls: ['./upload.component.scss'],\n standalone: true,\n imports: [TranslateModule,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsInputsUploadAvatarComponent,\n LibsUiComponentsScrollOverlayDirective\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsInputsUploadComponent implements OnInit, AfterViewInit, OnDestroy {\n // #region PROPERTIES\n private imageEditorComponentRef?: ComponentRef<LibsUiComponentsImageEditorComponent>;\n private previewFileComponentRef?: ComponentRef<LibsUiComponentsPreviewFileComponent>;\n private previewFileImageComponentRef?: ComponentRef<LibsUiComponentsGalleryViewerComponent>;\n protected isDragOver = signal(false);\n protected fileList = signal<Array<WritableSignal<IFile>>>([]);\n protected accessFiles = signal<string>('');\n protected messageError = signal<string | undefined>(undefined);\n protected descriptionFormatAndSizeFileComputed = computed<Array<IUploadDescriptionFormatAndSizeFile>>(() => {\n if (this.descriptionFormatAndSizeFile()?.length) {\n return this.descriptionFormatAndSizeFile() as unknown as Array<IUploadDescriptionFormatAndSizeFile>;\n }\n return getDescriptionFormatAndSizeFileDefault(this.fileType(), this.maxImageSize(), this.maxVideoSize(), this.maxDocumentSize(), this.maxAudioSize());\n });\n\n private onDestroy = new Subject<void>();\n // #endregion\n\n // #region INPUTS\n readonly originFiles = input<Array<WritableSignal<IFile>>, Array<WritableSignal<IFile>> | undefined>([], { transform: val => val ?? [] });\n readonly fileType = input<TYPE_FILE_UPLOAD, TYPE_FILE_UPLOAD | undefined>('image_video_document', { transform: val => val ?? 'image_video_document' });\n readonly multiple = input<boolean>();\n readonly canUploadIfHasExistFile = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly canSetAvatar = input<boolean | undefined>(false);\n readonly limitFile = input<number, number | undefined>(10, { transform: val => val ?? 10 });\n readonly maxTotalSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxImageSize = input<number, number | undefined>(5 * 1024 * 1024, { transform: val => val ?? 5 * 1024 * 1024 });\n readonly maxVideoSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxDocumentSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly maxAudioSize = input<number, number | undefined>(10 * 1024 * 1024, { transform: val => val ?? 10 * 1024 * 1024 });\n readonly imageExtList = input<string[], string[] | undefined>(ImageExtList, { transform: val => val ?? ImageExtList });\n readonly videoExtList = input<string[], string[] | undefined>(VideoExtList, { transform: val => val ?? VideoExtList });\n readonly documentExtList = input<string[], string[] | undefined>(DocumentExtList, { transform: val => val ?? DocumentExtList });\n readonly audioExtList = input<string[], string[] | undefined>(AudioExtList, { transform: val => val ?? AudioExtList });\n readonly classIncludeListItem = input<string>();\n readonly validRequired = input<IIsValidRequired>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly aspectRatio = input<IAspectRatio>();\n readonly zIndex = input<number, number | undefined>(1200, { transform: val => val ?? 1200 });\n readonly ignoreShowSizeFile = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly allowShowPushMessageMaxSizeError = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly messageTypeFileError = input<string, string | undefined>('i18n_the_file_support_format_is_not_correct', { transform: val => val || 'i18n_the_file_support_format_is_not_correct' });\n readonly messageMaxSizeError = input<string, string | undefined>('i18n_file_size_exceeds_the_allowed_limit', { transform: val => val || 'i18n_file_size_exceeds_the_allowed_limit' });\n readonly messageFileUploadError = input<string, string | undefined>('i18n_invalid_file_upload', { transform: val => val || 'i18n_invalid_file_upload' });\n readonly messageTotalFileExceedsError = input<string, string | undefined>('i18n_file_number_exceeds_the_allowed_limit_please_delete_the_file', { transform: val => val || 'i18n_file_number_exceeds_the_allowed_limit_please_delete_the_file' })\n readonly configDescriptionInputUpload = input<IMessageTranslate, IMessageTranslate | undefined>({ message: 'i18n_drag_file_here_to_upload_or_select_file' }, {\n transform: val => val ?? { message: 'i18n_drag_file_here_to_upload_or_select_file' }\n });\n\n readonly modeDisplayFile = input<TYPE_MODE_FILE_DISPLAY, TYPE_MODE_FILE_DISPLAY | undefined>('full', { transform: val => val || 'full' });\n readonly descriptionFormatAndSizeFile = input<WritableSignal<Array<IUploadDescriptionFormatAndSizeFile>>>();\n readonly showVideoDuration = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly labelConfig = input<ILabel>();\n readonly showBlockUploadWhenHasFileAndModeSingle = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n readonly ignoreIconRemove = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly ignoreIconEdit = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly ignoreIconPreview = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n readonly classIncludeFileContent = input<string>();\n readonly showBorderErrorAllItemWhenError = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly configDownloadSampleFile = input<IUploadConfigDownloadSampleFile>();\n // #endregion\n\n // #region OUTPUTS\n readonly outClose = output<boolean>();\n readonly outFileChanged = output<Array<WritableSignal<IFile>>>();\n readonly outFileRemoved = output<WritableSignal<IFile>>();\n readonly outFunctionsControl = output<IUploadFunctionControlEvent>();\n // #endregion\n\n // #region VIEW CHILDREN\n readonly uploadRef = viewChild<ElementRef>('upload');\n readonly uploadInputRef = viewChild<ElementRef>('uploadInput');\n // #endregion\n\n // #region INJECTIONS\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n private translateService = inject(TranslateService);\n private notificationService = inject(LibsUiNotificationService);\n // #endregion\n\n constructor() {\n effect(() => {\n if (this.originFiles()) {\n untracked(() => {\n this.fileList.set([...this.originFiles()]);\n })\n }\n });\n }\n\n // #region LIFECYCLE HOOKS\n ngOnInit() {\n this.outFunctionsControl.emit({\n valid: this.validate.bind(this),\n removeAll: this.removeAllFile.bind(this),\n uploading: async (process, id) => {\n const fileUploading = this.fileList().find(file => file().id === id);\n\n if (fileUploading) {\n fileUploading.update(file => ({ ...file, percentUploading: process.percent, isUploading: process.percent !== 100 }));\n }\n },\n setMessageError: async (message, id) => {\n this.messageError.set(message);\n if (id) {\n const fileError = this.fileList().find(file => file().id === id);\n\n if (fileError) {\n fileError.update(file => ({ ...file, error: message }));\n }\n }\n },\n handlerUploadFile: async () => {\n this.uploadInputRef()?.nativeElement.click();\n this.uploadInputRef()?.nativeElement.setAttribute('accept', this.accessFiles());\n }\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.initAccessFiles();\n if (this.uploadRef()) {\n this.initUploadEvent();\n }\n }, 0);\n }\n // #endregion\n\n // #region INITIALIZATION\n protected async initAccessFiles() {\n const accessExts: string[] = [];\n const typeSplit = this.fileType().split('_');\n\n if (typeSplit.includes('image')) {\n accessExts.push(...this.imageExtList());\n }\n if (typeSplit.includes('document')) {\n accessExts.push(...this.documentExtList());\n }\n if (typeSplit.includes('video')) {\n accessExts.push(...this.videoExtList());\n }\n if (typeSplit.includes('audio')) {\n accessExts.push(...this.audioExtList());\n }\n this.accessFiles.set(accessExts.map(ext => `.${ext}`).join(','));\n }\n\n protected async initUploadEvent() {\n const uploadRef = this.uploadRef()?.nativeElement;\n const inputUploadRef = this.uploadInputRef()?.nativeElement;\n\n this.initEvent(inputUploadRef, 'change', this.handlerUploadFile.bind(this)).subscribe();\n this.initEvent(uploadRef, 'click', this.handlerUploadFileClick.bind(this)).subscribe();\n this.initEvent(uploadRef, 'dragover', this.handlerDragOver.bind(this)).subscribe();\n this.initEvent(uploadRef, 'dragleave', this.handlerDragEnd.bind(this)).subscribe();\n this.initEvent(uploadRef, 'drop', this.handlerDragDrop.bind(this)).subscribe();\n }\n // #endregion\n\n // #region EVENT HANDLING\n protected initEvent(element: HTMLElement, eventName: string, callBack: (event: IEvent) => void): Observable<IEvent> {\n return fromEvent<IEvent>(element, eventName).pipe(\n tap(e => {\n e.stopPropagation();\n callBack(e);\n }),\n takeUntil(this.onDestroy)\n );\n }\n\n protected async handlerUploadFileClick(event: Event) {\n event.stopPropagation();\n if (!this.multiple() && this.fileList().length && !this.canUploadIfHasExistFile()) {\n return;\n }\n this.uploadInputRef()?.nativeElement.click();\n this.uploadInputRef()?.nativeElement.setAttribute('accept', this.accessFiles());\n }\n\n protected async handlerUploadFile(event: IEvent) {\n await this.handleUploadFiles(event);\n const inputUploadRef = this.uploadInputRef()?.nativeElement;\n if (inputUploadRef) {\n inputUploadRef.value = null;\n }\n }\n\n protected async handlerDragOver(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', true);\n }\n\n protected async handlerDragEnd(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', false);\n }\n\n protected async handlerDragDrop(event: IEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.uploadRef()?.nativeElement.classList.toggle('libs-ui-components-inputs-upload-drag-over', false);\n\n await this.handleUploadFiles(event);\n }\n // #endregion\n\n // #region FILE OPERATIONS\n protected async handleUploadFiles(event: IEvent) {\n const files = event.dataTransfer?.files || event.target?.files;\n if (this.maxTotalSize()) {\n let total = 0;\n\n for (let i = 0; i < files.length; i++) {\n total += files[i].size;\n }\n\n if (this.maxTotalSize() < total) {\n this.notificationService.showCompTypeTextError(this.translateService.instant('i18n_size_not_number_mb', { number: this.maxTotalSize() / 1024 / 1024 }), { timeRemove: 3000 });\n\n return;\n }\n }\n\n let errorExceedsMaxFile = false;\n if (!files || !files.length) {\n return;\n }\n if (!this.multiple() && this.fileList().length && !this.canUploadIfHasExistFile()) {\n return;\n }\n\n const remainFileTotal = this.limitFile() - this.fileList().length;\n if (files.length > remainFileTotal) {\n errorExceedsMaxFile = true;\n this.messageError.set(this.messageTotalFileExceedsError());\n }\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const isImage = isTypeImage(file);\n const isVideo = isTypeVideo(file);\n const isAudio = isTypeAudio(file);\n const newFile: IFile = {\n name: file.name,\n file: file,\n size: getLabelBySizeFile(file.size),\n type: isImage ? 'image' : isVideo ? 'video' : isAudio ? 'audio' : 'document',\n id: uuid()\n };\n if (!(await this.checkValidFileExtension(file))) {\n if (!errorExceedsMaxFile) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : this.messageTypeFileError());\n }\n newFile.error = this.messageTypeFileError();\n await this.pushFileInList(file, newFile);\n continue;\n }\n if (!(await this.checkValidFileSize(file))) {\n if (!errorExceedsMaxFile) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : this.messageMaxSizeError());\n }\n newFile.error = this.messageMaxSizeError();\n if (!this.multiple() && this.allowShowPushMessageMaxSizeError()) {\n this.notificationService.showCompTypeTextError(this.messageMaxSizeError());\n\n return;\n }\n await this.pushFileInList(file, newFile);\n continue;\n }\n await this.pushFileInList(file, newFile);\n }\n if (this.canSetAvatar() && this.fileList().length && !this.fileList().find(file => file().isAvatar)) {\n this.fileList.update(fileList => {\n const itemImage = fileList.find(file => file().type === 'image');\n if (itemImage) {\n itemImage.update(file => ({ ...file, isAvatar: true }));\n }\n return [...fileList];\n });\n }\n this.outFileChanged.emit(this.fileList());\n this.validate();\n }\n\n private async pushFileInList(file: File, newFile: IFile) {\n newFile.url = await convertFileToBase64_ObjectUrl(file);\n\n this.fileList.update(fileList => {\n fileList.splice(0, this.canUploadIfHasExistFile() ? 1 : 0, signal(newFile));\n return [...fileList];\n });\n }\n\n protected async handlerOpenPreviewFile(item: IFile) {\n if (item.type === 'document') {\n this.previewFileDocument(item);\n return;\n }\n this.previewFileImage(item);\n }\n\n private async previewFileDocument(item: IFile) {\n if (this.previewFileComponentRef) {\n return;\n }\n this.previewFileComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsPreviewFileComponent);\n this.previewFileComponentRef.setInput('data', item);\n this.previewFileComponentRef.setInput('zIndex', this.zIndex() + 1);\n this.previewFileComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.previewFileComponentRef);\n this.previewFileComponentRef = undefined;\n });\n this.dynamicComponentService.addToBody(this.previewFileComponentRef);\n }\n\n private async previewFileImage(item: IFile) {\n if (this.previewFileImageComponentRef) {\n return;\n }\n this.previewFileImageComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsGalleryViewerComponent);\n const url = item.url || item.origin_url;\n this.previewFileImageComponentRef.setInput('images', [{ url }]);\n this.previewFileImageComponentRef.setInput('imageSelected', { url });\n this.previewFileImageComponentRef.setInput('fieldDisplaySrcImage', 'url');\n this.previewFileImageComponentRef.setInput('singleImage', true);\n this.previewFileImageComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.previewFileImageComponentRef);\n this.previewFileImageComponentRef = undefined;\n });\n this.dynamicComponentService.addToBody(this.previewFileImageComponentRef);\n }\n\n protected async handlerEditImage(event: Event, item: WritableSignal<IFile>) {\n event.stopPropagation();\n this.showEditModal(item);\n }\n\n protected async handlerRemoveFile(event: Event, item: WritableSignal<IFile>) {\n event.stopPropagation();\n this.removeFile(item);\n if (this.originFiles().find(file => file().url === item().url)) {\n this.outFileRemoved.emit(item);\n }\n this.validate();\n if (!this.multiple() && !this.showBlockUploadWhenHasFileAndModeSingle()) {\n setTimeout(() => {\n this.initUploadEvent();\n }, 0);\n }\n }\n\n protected async removeFile(fileItem: WritableSignal<IFile>) {\n this.fileList.update(fileList => fileList.filter(item => item().id !== fileItem().id));\n if (this.canSetAvatar() && fileItem().isAvatar && this.fileList().length) {\n this.fileList.update(fileList => {\n fileList[0].update(file => ({ ...file, isAvatar: true }));\n\n return [...fileList];\n });\n\n }\n this.outFileChanged.emit(this.fileList());\n }\n\n protected async showEditModal(fileItem: WritableSignal<IFile>) {\n if (this.imageEditorComponentRef) {\n return;\n }\n const fileDataUrl = fileItem().url || fileItem().origin_url || '';\n this.imageEditorComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsImageEditorComponent);\n\n this.imageEditorComponentRef.setInput('imgSrc', fileDataUrl);\n this.imageEditorComponentRef.setInput('zIndex', this.zIndex() + 1);\n this.imageEditorComponentRef.setInput('nameFile', fileItem().name);\n if (this.aspectRatio()) {\n this.imageEditorComponentRef.setInput('aspectRatio', this.aspectRatio());\n }\n this.imageEditorComponentRef.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.imageEditorComponentRef);\n this.imageEditorComponentRef = undefined;\n });\n\n this.imageEditorComponentRef.instance.outSaveFile.subscribe(async (result: ISaveFile) => {\n const messageError = !(await this.checkValidFileSize(result.file)) ? this.messageMaxSizeError() : undefined;\n const nameFile = fileItem().file?.name || fileItem().name;\n fileItem.update(data => ({ ...data, file: convertBlobToFile(result.file, nameFile), name: nameFile, origin_url: undefined, size: getLabelBySizeFile(result.file.size), error: messageError, url: result.url, isUpdate: true }));\n this.outFileChanged.emit(this.fileList());\n this.imageEditorComponentRef?.instance.outClose.emit({ isClickButtonClose: true });\n });\n this.dynamicComponentService.addToBody(this.imageEditorComponentRef);\n }\n\n protected async checkValidFileExtension(file: File) {\n const extension = getFileExtension(file);\n\n if (!extension) {\n return false;\n }\n console.log('extension', extension);\n const isImage = isTypeImage(file);\n const isVideo = isTypeVideo(file);\n const isAudio = isTypeAudio(file);\n const validImage = isImageExtList(extension);\n const validVideo = isVideoExtList(extension);\n const validAudio = isAudioExtList(extension);\n const validDocument = isDocumentExtList(extension);\n\n console.log('validImage', validImage);\n console.log('validVideo', validVideo);\n console.log('validAudio', validAudio);\n console.log('validDocument', validDocument);\n\n const typeSplit = this.fileType().split('_');\n\n if (isImage && typeSplit.includes('image')) {\n return validImage;\n }\n if (isVideo && typeSplit.includes('video')) {\n return validVideo;\n }\n if (isAudio && typeSplit.includes('audio')) {\n return validAudio;\n }\n if (typeSplit.includes('document')) {\n return validDocument;\n }\n\n return false;\n }\n\n protected async checkValidFileSize(file: File | Blob) {\n const isImage = isTypeImage(file);\n const isVideo = isTypeVideo(file);\n const isAudio = isTypeAudio(file);\n const validImage = file.size <= this.maxImageSize();\n const validVideo = file.size <= this.maxVideoSize();\n const validAudio = file.size <= this.maxAudioSize();\n const validDocument = file.size <= this.maxDocumentSize();\n\n const typeSplit = this.fileType().split('_');\n\n if (isImage && typeSplit.includes('image')) {\n return validImage;\n }\n if (isVideo && typeSplit.includes('video')) {\n return validVideo;\n }\n if (isAudio && typeSplit.includes('audio')) {\n return validAudio;\n }\n if (typeSplit.includes('document')) {\n return validDocument;\n }\n\n return false;\n }\n\n protected async validate() {\n if (this.validRequired()?.isRequired && !this.fileList().length) {\n this.messageError.set(this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID);\n\n return false;\n }\n if (this.multiple() && this.fileList().length > this.limitFile()) {\n this.messageError.set(this.messageTotalFileExceedsError());\n\n return false;\n }\n const fileError = this.fileList().find(item => item().error);\n\n if (fileError) {\n this.messageError.set(this.multiple() ? this.messageFileUploadError() : fileError().error);\n\n return false;\n }\n this.messageError.set(undefined);\n\n return true;\n }\n\n protected async handlerSetAvatar(event: Event, file: WritableSignal<IFile>) {\n event.stopPropagation();\n\n this.fileList().forEach(item => {\n if (item().id === file().id) {\n item.update(file => ({ ...file, isAvatar: true }));\n return;\n }\n item.update(file => ({ ...file, isAvatar: false }));\n });\n this.outFileChanged.emit(this.fileList());\n }\n\n private async removeAllFile() {\n this.fileList.set([]);\n this.messageError.set(undefined);\n }\n\n protected async handlerDownloadSampleFile(event: Event) {\n event.stopPropagation();\n const config = this.configDownloadSampleFile();\n if (!config) {\n return;\n }\n if (config?.callBack) {\n config.callBack();\n\n return;\n }\n if (config?.url) {\n downloadFileByUrl(config.url, config.title);\n }\n }\n\n // #endregion\n\n\n ngOnDestroy() {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","<div class=\"flex flex-col w-full h-full\">\n <div>\n @if (labelConfig();as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if ((!configDownloadSampleFile()?.position || configDownloadSampleFile()?.position === 'top') && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mb-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile?.title || ' '\"\n (outClick)=\"handlerDownloadSampleFile($event)\" />\n }\n @if (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple())) {\n <div #upload\n class=\"libs-ui-components-inputs-upload\"\n [class.libs-ui-components-inputs-upload-disable]=\"disable() || (!multiple() && fileList().length)\"\n [class.libs-ui-components-inputs-upload-error]=\"messageError()\">\n <div class=\"flex items-center\">\n <div class=\"mr-[16px]\">\n <i class=\"libs-ui-components-inputs-upload-icon libs-ui-icon-file-upload before:!text-[32px]\"></i>\n </div>\n <div class=\"libs-ui-components-inputs-upload-description\">\n <div class=\"mb-[4px] libs-ui-font-h6m\"\n [innerHTML]=\"(configDescriptionInputUpload().message || '') | translate:configDescriptionInputUpload().interpolateParams\">\n </div>\n @for (item of descriptionFormatAndSizeFileComputed(); track item; let last = $last) {\n <div class=\"libs-ui-font-h7r\"\n [class.mb-[4px]]=\"!last\"\n [innerHTML]=\"item.message | translate:item.interpolateParams\">\n </div>\n }\n </div>\n </div>\n @if (multiple()) {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n multiple\n [accept]=\"accessFiles()\" />\n } @else {\n <input #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n [accept]=\"accessFiles()\" />\n }\n </div>\n }\n @if (messageError() && (multiple() || showBlockUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple()))) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">\n {{ (messageError() || '') | translate:{ value: limitFile() } }}\n </div>\n }\n @if (configDownloadSampleFile()?.position === 'bottom' && configDownloadSampleFile();as configDownloadSampleFile) {\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mt-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile.title || ' '\"\n (moClick)=\"handlerDownloadSampleFile($event)\" />\n }\n </div>\n @if (fileList().length) {\n <div LibsUiComponentsScrollOverlayDirective\n class=\"relative w-full h-full px-[10px] libs-ui-components-inputs-upload-view-list {{ classIncludeFileContent() || '' }}\"\n [class.mt-[12px]]=\"multiple() || showBlockUploadWhenHasFileAndModeSingle()\">\n <ng-content select=\"[label-file]\"></ng-content>\n @for (item of fileList(); track item(); let first = $first) {\n <div class=\"libs-ui-components-inputs-upload-view-list-item {{ classIncludeListItem() || '' }}\"\n [class.libs-ui-components-inputs-upload-file-full]=\"modeDisplayFile() === 'full'\"\n [class.libs-ui-components-inputs-upload-file-short]=\"modeDisplayFile() === 'short'\"\n [class.libs-ui-border-error-general]=\"item().error || (messageError() && showBorderErrorAllItemWhenError())\"\n [class.mt-0]=\"first && !multiple() && !showBlockUploadWhenHasFileAndModeSingle()\">\n\n <div class=\"flex w-full\">\n <div class=\"flex items-center\">\n @if (canSetAvatar() && item().type === 'image') {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'!mr-0' + (item().isAvatar ? ' libs-ui-icon-check-circle-solid before:!text-[#00bc62]': ' libs-ui-icon-check-circle-outline') + ((disable() || item().isUploading || !!item().error) ? ' libs-ui-disable' : '')\"\n [popover]=\"{config:{ content: item().isAvatar ? 'i18n_avatar' : 'i18n_choose_as_your_avatar', zIndex: zIndex()}}\"\n [classInclude]=\"'!mr-[12px] !p-0'\"\n [disable]=\"disable() || item().isUploading || !!item().error\"\n (outClick)=\"handlerSetAvatar($event, item)\" />\n }\n </div>\n <div class=\"flex\"\n [class.w-[calc(100%-28px)]]=\"canSetAvatar()\"\n [class.w-full]=\"!canSetAvatar()\">\n @if (modeDisplayFile() === 'full') {\n <libs_ui-components-inputs-upload-avatar [disable]=\"disable()\"\n [(item)]=\"item\"\n [showVideoDuration]=\"showVideoDuration()\"\n (outOpenPreview)=\"handlerOpenPreviewFile($event)\" />\n }\n <div class=\"relative w-full\">\n <div class=\"flex absolute w-full h-full flex-col\"\n [class.flex-col]=\"modeDisplayFile() === 'full'\"\n [class.justify-center]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\">\n <libs_ui-components-label class=\"flex w-full\"\n [labelLeft]=\"item().name\"\n [zIndexPopover]=\"zIndex() + 1\"\n [labelLeftClass]=\"'libs-ui-font-h6m ' + ((disable() || item().isUploading || item().error) ? 'text-[#6a7383]' : 'text-[#071631]')\"\n [classInclude]=\"modeDisplayFile() === 'short' ? '!mb-0' : ''\" />\n\n @if (!ignoreShowSizeFile()) {\n <div class=\"text-[#9ca2ad] libs-ui-font-h7r shrink-0\"\n [class.flex]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\"\n [class.ml-[12px]]=\"modeDisplayFile() === 'short'\">\n {{ item().size }}\n </div>\n }\n </div>\n </div>\n @if (item().isUploading && item().percentUploading) {\n <div class=\"flex items-center ml-[16px]\"\n [class.mr-[26px]]=\"modeDisplayFile() === 'full'\">\n <div class=\"w-[120px] h-[4px] rounded-[4px] bg-[#f8f9fa] relative\">\n <div class=\"absolute top-0 left-0 h-[4px] rounded-[4px] bg-[#00bc62]\"\n [style.width.px]=\"(item().percentUploading ?? 0)*1.2\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex ml-[16px]\">\n @if (!ignoreIconPreview()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-eye-outline !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_preview', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() && !ignoreIconEdit() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerOpenPreviewFile(item())\" />\n }\n @if (item().type === 'image' && !item().error && !ignoreIconEdit()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-edit-line !mr-0'\"\n [popover]=\"{config:{ content: 'i18n_edit', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerEditImage($event, item)\" />\n }\n @if (!ignoreIconRemove()) {\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-close !mr-0'\"\n [popover]=\"{config: {content: 'i18n_delete', zIndex: zIndex()+1}}\"\n [classInclude]=\"'!p-0'\"\n [disable]=\"item().isUploading || disable()\"\n (outClick)=\"handlerRemoveFile($event, item)\" />\n }\n </div>\n </div>\n @if (item().error && (multiple() || !showBlockUploadWhenHasFileAndModeSingle())) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">{{ (item().error || ' ') | translate }}</div>\n }\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export const DocumentExtList = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'json', 'xml'];
|
|
2
|
-
export const ImageExtList = ['gif', 'jpg', 'jpeg', 'png'];
|
|
3
|
-
export const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv'];
|
|
4
|
-
export const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma'];
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9kZWZpbmVzL3VwbG9hZC5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRG9jdW1lbnRFeHRMaXN0ID0gWydkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwcHQnLCAncHB0eCcsICdwZGYnLCAnanNvbicsICd4bWwnXTtcbmV4cG9ydCBjb25zdCBJbWFnZUV4dExpc3QgPSBbJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnXTtcbmV4cG9ydCBjb25zdCBWaWRlb0V4dExpc3QgPSBbJ21wNCcsICdtb3YnLCAnbXBnJywgJ2F2aScsICd3bXYnXTtcbmV4cG9ydCBjb25zdCBBdWRpb0V4dExpc3QgPSBbJ21wMycsICd3YXYnLCAnb2dnJywgJ2FhYycsICdtNGEnLCAnZmxhYycsICd3bWEnXTsiXX0=
|