@dignite-ng/expand.file-explorer 3.0.0-rc.40 → 3.0.0-rc.43
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.
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
3
|
+
import { Component, EventEmitter, Input, Output, inject, } from '@angular/core';
|
|
2
4
|
import * as FileService from '../../proxy/dignite/file-explorer/files';
|
|
3
5
|
import { ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
|
|
4
6
|
import { ListService, RestService, LocalizationService, LIST_QUERY_DEBOUNCE_TIME, } from '@abp/ng.core';
|
|
@@ -187,31 +189,33 @@ export class FileModalComponent {
|
|
|
187
189
|
}
|
|
188
190
|
/**图片上传-获取文件信息改变 */
|
|
189
191
|
async getFileChange(event) {
|
|
192
|
+
const _that = this;
|
|
190
193
|
const files = new Array(...event.target.files);
|
|
191
194
|
this.uploadPictureStatusList = files;
|
|
195
|
+
const uploadPromises = [];
|
|
192
196
|
for (const file of files) {
|
|
193
197
|
if (file.size > this.sizeLimit) {
|
|
194
198
|
this.setuploadPictureStatus(file, 2);
|
|
195
199
|
continue;
|
|
196
200
|
}
|
|
197
|
-
|
|
201
|
+
uploadPromises.push(this.uploadingFile(file)
|
|
198
202
|
.then(res => {
|
|
199
|
-
this.selectedTable.push(res);
|
|
200
203
|
this.setuploadPictureStatus(file, 1);
|
|
201
|
-
// this.list.get()
|
|
202
204
|
})
|
|
203
|
-
.catch(()
|
|
205
|
+
.catch(function (err) {
|
|
204
206
|
this.setuploadPictureStatus(file, 2);
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
this.list.get();
|
|
208
|
-
const isSubmit = !this.uploadPictureStatusList.some(el => el.status == 2);
|
|
209
|
-
if (isSubmit) {
|
|
210
|
-
// this.toaster.success("上传完成");
|
|
211
|
-
setTimeout(() => {
|
|
212
|
-
this.uploadPictureStatusList = [];
|
|
213
|
-
}, 4000);
|
|
207
|
+
return err;
|
|
208
|
+
}));
|
|
214
209
|
}
|
|
210
|
+
Promise.all(uploadPromises).then((results) => {
|
|
211
|
+
_that.list.get();
|
|
212
|
+
const isSubmit = !_that.uploadPictureStatusList.some(el => el.status == 2);
|
|
213
|
+
if (isSubmit) {
|
|
214
|
+
setTimeout(() => {
|
|
215
|
+
_that.uploadPictureStatusList = [];
|
|
216
|
+
}, 4000);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
215
219
|
}
|
|
216
220
|
/**图片上传-设置uploadPictureStatusList的状态 */
|
|
217
221
|
setuploadPictureStatus(file, type) {
|
|
@@ -231,9 +235,9 @@ export class FileModalComponent {
|
|
|
231
235
|
directoryId: this._theSelectedTreeNode?.key || '',
|
|
232
236
|
entityId: '',
|
|
233
237
|
}).subscribe(res => {
|
|
234
|
-
resolve(res);
|
|
238
|
+
resolve({ file: file.name, status: 'success', response: res });
|
|
235
239
|
}, err => {
|
|
236
|
-
rejects(
|
|
240
|
+
rejects({ file: file.name, status: 'fail', error: err });
|
|
237
241
|
});
|
|
238
242
|
});
|
|
239
243
|
}
|
|
@@ -262,6 +266,8 @@ export class FileModalComponent {
|
|
|
262
266
|
this._FileService.delete(file.id).subscribe(res => {
|
|
263
267
|
this.toaster.success(this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`));
|
|
264
268
|
this.list.get();
|
|
269
|
+
const selectedTables = this.selectedTable;
|
|
270
|
+
this.selectedTable = selectedTables.filter(el => el.id != file.id);
|
|
265
271
|
});
|
|
266
272
|
}
|
|
267
273
|
/**删除所有选中图片 */
|
|
@@ -276,15 +282,18 @@ export class FileModalComponent {
|
|
|
276
282
|
const selectedTable = this.selectedTable;
|
|
277
283
|
try {
|
|
278
284
|
const result = await this.batchDeleteItems(selectedTable);
|
|
285
|
+
console.log(result, 'resultresultresult');
|
|
279
286
|
if (result.success) {
|
|
280
287
|
this.toaster.success(result.message);
|
|
281
288
|
this.list.get();
|
|
289
|
+
this.selectedTable = [];
|
|
282
290
|
// 可能需要刷新表格或更新UI
|
|
283
291
|
}
|
|
284
292
|
else {
|
|
285
293
|
//删除失败的项
|
|
286
294
|
this.list.get();
|
|
287
295
|
// 可以选择展示失败项或重试
|
|
296
|
+
this.selectedTable = result.failedItems;
|
|
288
297
|
}
|
|
289
298
|
}
|
|
290
299
|
catch (error) {
|
|
@@ -399,7 +408,7 @@ export class FileModalComponent {
|
|
|
399
408
|
this.isloading = true;
|
|
400
409
|
this._FileService
|
|
401
410
|
.update(input.id, {
|
|
402
|
-
name: input.fileName
|
|
411
|
+
name: input.fileName,
|
|
403
412
|
})
|
|
404
413
|
.pipe(finalize(() => {
|
|
405
414
|
this.isloading = false;
|
|
@@ -470,4 +479,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
470
479
|
}], selectPickerFile: [{
|
|
471
480
|
type: Input
|
|
472
481
|
}] } });
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1vZGFsL2ZpbGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEtBQUssV0FBVyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUdMLFdBQVcsRUFFWCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLHdCQUF3QixHQUN6QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBRUwscUJBQXFCLEdBRXRCLE1BQU0seUNBQXlDLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBZWhDLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDVSxZQUErQyxFQUMvQyxPQUF1QixFQUNmLElBQWlCLEVBQzFCLGVBQStCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQWlDLEVB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Qzs4R0FsZFUsa0JBQWtCO2tHQUFsQixrQkFBa0IsdVFBVGxCO1lBQ1QsYUFBYTtZQUNiLFdBQVc7WUFDWCxhQUFhO1lBQ2IsNERBQTREO1lBQzVELHVFQUF1RTtZQUN2RSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1NBQ3JELCtDQ2pDSCw0aVJBK0lZOzsyRkQ1R0Msa0JBQWtCO2tCQWQ5QixTQUFTOytCQUVFLGVBQWUsYUFHZDt3QkFDVCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYiw0REFBNEQ7d0JBQzVELHVFQUF1RTt3QkFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtxQkFDckQ7NFFBZ0NVLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFXSyxRQUFRO3NCQURsQixLQUFLO2dCQVVLLEtBQUs7c0JBRGYsS0FBSztnQkFNSyxPQUFPO3NCQURqQixLQUFLO2dCQVNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBOEpHLFlBQVk7c0JBQXJCLE1BQU07Z0JBc0lFLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBpbmplY3QsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNlcnZpY2UgZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQge1xuICBQYWdlZFJlc3VsdER0byxcbiAgQUJQLFxuICBMaXN0U2VydmljZSxcbiAgUmVzdCxcbiAgUmVzdFNlcnZpY2UsXG4gIExvY2FsaXphdGlvblNlcnZpY2UsXG4gIExJU1RfUVVFUllfREVCT1VOQ0VfVElNRSxcbn0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7XG4gIEZpbGVEZXNjcmlwdG9yRHRvLFxuICBGaWxlRGVzY3JpcHRvclNlcnZpY2UsXG4gIEdldEZpbGVzSW5wdXQsXG59IGZyb20gJy4uLy4uL3Byb3h5L2RpZ25pdGUvZmlsZS1leHBsb3Jlci9maWxlcyc7XG5pbXBvcnQgeyBGaWxlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZmUtZmlsZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBbUmVxdWlyZWRdXG4gICAgTGlzdFNlcnZpY2UsXG4gICAgLy8gW09wdGlvbmFsXVxuICAgIC8vIFByb3ZpZGUgdGhpcyB0b2tlbiBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBkZWJvdW5jZSB0aW1lLlxuICAgIC8vIERlZmF1bHQgaXMgMzAwLiBDYW5ub3QgYmUgMC4gQW55IHZhbHVlIGJlbG93IDEwMCBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgeyBwcm92aWRlOiBMSVNUX1FVRVJZX0RFQk9VTkNFX1RJTUUsIHVzZVZhbHVlOiA1MDAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLkZpbGVEZXNjcmlwdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBsaXN0OiBMaXN0U2VydmljZSxcbiAgICBwdWJsaWMgX0ZpbGVBcGlTZXJ2aWNlOiBGaWxlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9Mb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgcHJpdmF0ZSBfRmlsZURlc2NyaXB0b3JTZXJ2aWNlID0gaW5qZWN0KEZpbGVEZXNjcmlwdG9yU2VydmljZSk7XG4gIC8qKuiOt+WPluebruW9lemFjee9riAqL1xuICBnZXRGaWxlc0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX0ZpbGVEZXNjcmlwdG9yU2VydmljZVxuICAgICAgICAuZ2V0RmlsZUNvbnRhaW5lckNvbmZpZ3VyYXRpb24odGhpcy5fZmlsZUNvbnRhaW5lck5hbWUpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpcmVjdG9yeVBlcm1pc3Npb25OYW1lID0gcmVzPy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTtcbiAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKuebruW9leeahOadg+mZkOWQjeensCAqL1xuICBjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTogc3RyaW5nID0gbnVsbDtcblxuICAvKirlm77niYflrrnlmaggKi9cbiAgX2ZpbGVDb250YWluZXJOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZmlsZUNvbnRhaW5lck5hbWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgICAgIC8vIHRoaXMubG9hZERhdGEoKVxuICAgIH1cbiAgfVxuXG4gIC8qKuaYr+WQpuWkmumAiSAqL1xuICBfbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtdWx0aXBsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSB2O1xuICB9XG5cbiAgLyoq5paH5Lu25aSn5bCP6ZmQ5Yi2XG4gICAqIEBwYXJhbSAxbWJcbiAgICovXG4gIHNpemVMaW1pdCA9IDEwNDg1NzY7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGltaXQodjogbnVtYmVyKSB7XG4gICAgdGhpcy5zaXplTGltaXQgPSB2O1xuICB9XG4gIC8qKueItue7hOS7tuS8oOmAkueahOaooeaAgeahhueKtuaAgSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpc2libGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuTW9kYWxPcGVuID0gdjtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKuaooeaAgeahhueKtuaAgeWbnuiwgyAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKirmqKHmgIHmoYYt54q25oCBLeaYr+WQpuaJk+W8gCAqL1xuICBNb2RhbE9wZW4gPSBmYWxzZTtcblxuICAvKirmqKHmgIHmoYYt57mB5b+Z54q25oCBLeeUqOS6juehruWumuaooeaAgeeahOe5geW/meeKtuaAgeaYr+WQpuS4uuecnyAqL1xuICBNb2RhbEJ1c3kgPSBmYWxzZTtcblxuICAvKirmqKHmgIHmoYYt54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIE1vZGFsVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLk1vZGFsQnVzeSA9IGZhbHNlO1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZSA9ICcnO1xuICAgICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9ICcnO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gW107XG4gICAgICB0aGlzLnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0ID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoq5qih5oCB5qGG5L+d5a2YICovXG4gIG1vZGFsU2F2ZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0ZWRUYWJsZSk7XG4gICAgdGhpcy5zZWxlY3RGaWxlZm4uZW1pdChzZWxlY3RlZFRhYmxlYXJyKTtcbiAgICB0aGlzLk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSk7XG4gIH1cbiAgLyoqZGlnbml0ZS1maWxlLW1vZGFsLXRyZWUgKi9cbiAgLyoq6YCJ5oup55qEdHJlZeiKgueCuSAqL1xuICBfdGhlU2VsZWN0ZWRUcmVlTm9kZTogYW55ID0gJyc7XG4gIGlzQ3JlYXRlTGlzdCA9IGZhbHNlO1xuICAvKirliJ3lp4vljJbmlbDmja4gKi9cbiAgbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuTW9kYWxPcGVuICYmIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lKSB7XG4gICAgICB0aGlzLmxpc3QubWF4UmVzdWx0Q291bnQgPSAxMDA7XG4gICAgICAvLyB0aGlzLmZpbHRlcnMuc2tpcENvdW50ID0gMDtcbiAgICAgIHRoaXMuZ2V0RmlsZXNDb25maWd1cmF0aW9uKCk7XG4gICAgICBpZiAoIXRoaXMuaXNDcmVhdGVMaXN0KSB7XG4gICAgICAgIHRoaXMuaG9va1RvUXVlcnkoKTtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZUxpc3QgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0LmdldCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKiog5LuOdHJlZeiOt+WPluadpeeahOaVsOaNriAqL1xuICBmaWxlR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuICAvKiog5LuOdHJlZeiOt+WPluaVsOaNriAqL1xuICB0cmVlTm9kZURhdGEoZXZlbnQpIHtcbiAgICB0aGlzLmZpbGVHcm91cExpc3QgPSB0aGlzLmZsYXR0ZW5OZXN0ZWRBcnJheShldmVudCk7XG4gIH1cbiAgLyoqXG4gICAqIOWwhuW1jOWll+aVsOe7hOaJgeW5s+WMllxuICAgKiBAcGFyYW0ge0FycmF5fSBuZXN0ZWRBcnJheSAtIOWMheWQq+W1jOWll2NoaWxkcmVu55qE5pWw57uEXG4gICAqIEByZXR1cm5zIHtBcnJheX0gLSDmiYHlubPljJblkI7nmoTmlbDnu4RcbiAgICovXG4gIGZsYXR0ZW5OZXN0ZWRBcnJheShuZXN0ZWRBcnJheSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgICAgaWYgKCFpdGVtcykgcmV0dXJuO1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgLy8g5bCG5b2T5YmN6aG55re75Yqg5Yiw57uT5p6c5pWw57uEXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgLi4uaXRlbSB9KTtcblxuICAgICAgICAvLyDlpoLmnpzmnIljaGlsZHJlbuWxnuaAp+S4lOaYr+aVsOe7hO+8jOmAkuW9kuWkhOeQhlxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZmxhdHRlbihpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXR0ZW4obmVzdGVkQXJyYXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKip0cmVlLeiKgueCuemAieaLqSAqL1xuICBfbm9kZUNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5maWx0ZXJzLnNraXBDb3VudCA9IDA7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9IGV2ZW50O1xuICAgIHRoaXMubGlzdC5nZXQoKTtcbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3opoHkuIrkvKDlm77niYfnmoTnirbmgIHmlofku7bliJfooaggKi9cbiAgdXBsb2FkUGljdHVyZVN0YXR1c0xpc3Q6IGFueVtdID0gW107XG5cbiAgLyoq5Zu+54mH5LiK5LygLeiOt+WPluaWh+S7tuS/oeaBr+aUueWPmCAqL1xuICBhc3luYyBnZXRGaWxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgZmlsZXMgPSBuZXcgQXJyYXkoLi4uZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICB0aGlzLnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0ID0gZmlsZXM7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5zaXplTGltaXQpIHtcbiAgICAgICAgdGhpcy5zZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIDIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkaW5nRmlsZShmaWxlKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5wdXNoKHJlcyk7XG4gICAgICAgICAgdGhpcy5zZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIDEpO1xuICAgICAgICAgIC8vIHRoaXMubGlzdC5nZXQoKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCAyKTtcbiAgICAgICAgfSk7IC8vIOetieW+heavj+S4quaWh+S7tuS4iuS8oOWujOaIkFxuICAgIH1cbiAgICB0aGlzLmxpc3QuZ2V0KCk7XG4gICAgY29uc3QgaXNTdWJtaXQgPSAhdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5zb21lKGVsID0+IGVsLnN0YXR1cyA9PSAyKTtcbiAgICBpZiAoaXNTdWJtaXQpIHtcbiAgICAgIC8vIHRoaXMudG9hc3Rlci5zdWNjZXNzKFwi5LiK5Lyg5a6M5oiQXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBbXTtcbiAgICAgIH0sIDQwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3orr7nva51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdOeahOeKtuaAgSAqL1xuICBzZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIHR5cGUpIHtcbiAgICB0aGlzLnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0Lm1hcChlbCA9PiB7XG4gICAgICBpZiAoZWwgPT0gZmlsZSkgZWwuc3RhdHVzID0gdHlwZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3pgJLlvZLmjInpobrluo/kuIrkvKAgKi9cbiAgdXBsb2FkaW5nRmlsZShmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICAgIHRoaXMuY3JlYXRlRmlsZSh7XG4gICAgICAgIGZpbGU6IGZvcm1EYXRhLFxuICAgICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgICAgZGlyZWN0b3J5SWQ6IHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGU/LmtleSB8fCAnJyxcbiAgICAgICAgZW50aXR5SWQ6ICcnLFxuICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICByZWplY3RzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuaWh+S7tuihqOagvC3mlbDmja4qL1xuICBkYXRhOiBQYWdlZFJlc3VsdER0bzxGaWxlRGVzY3JpcHRvckR0bz4gPSB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHRvdGFsQ291bnQ6IDAsXG4gIH07XG5cbiAgLyoq5paH5Lu26KGo5qC8LeadoeS7tiovXG4gIGZpbHRlcnMgPSB7fSBhcyBHZXRGaWxlc0lucHV0O1xuXG4gIC8qKuaWh+S7tuihqOagvC3ooajmoLzoh6rluKbpgInmi6nnsbvlnosgKi9cbiAgU2VsZWN0aW9uVHlwZSA9IFNlbGVjdGlvblR5cGU7XG5cbiAgLyoq6YCJ5oup5paH5Lu25Zue6LCDICovXG4gIEBPdXRwdXQoKSBzZWxlY3RGaWxlZm4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKuaWh+S7tuihqOagvC3ojrflj5booajmoLzmlbDmja4gKi9cbiAgaG9va1RvUXVlcnkoKSB7XG4gICAgY29uc3QgZ2V0RGF0YSA9IChxdWVyeTogQUJQLlBhZ2VRdWVyeVBhcmFtcykgPT5cbiAgICAgIHRoaXMuX0ZpbGVTZXJ2aWNlLmdldExpc3Qoe1xuICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgLi4udGhpcy5maWx0ZXJzLFxuICAgICAgICBjb250YWluZXJOYW1lOiB0aGlzLl9maWxlQ29udGFpbmVyTmFtZSxcbiAgICAgICAgZGlyZWN0b3J5SWQ6IHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGUua2V5LFxuICAgICAgfSk7XG4gICAgY29uc3Qgc2V0RGF0YSA9IChsaXN0OiBQYWdlZFJlc3VsdER0bzxGaWxlRGVzY3JpcHRvckR0bz4pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IGxpc3Q7XG4gICAgICB0aGlzLm9uUGFnZUNoYW5nZShsaXN0Lml0ZW1zKTtcbiAgICB9O1xuICAgIHRoaXMubGlzdC5ob29rVG9RdWVyeShnZXREYXRhKS5zdWJzY3JpYmUoc2V0RGF0YSk7XG4gIH1cblxuICAvKirmlofku7booajmoLwt5p+l55yL5omA5pyJ5YiG57uE55qE5paH5Lu25pWw5o2uICovXG4gIGxvb2tBbGxGaWxlKCkge1xuICAgIHRoaXMuZmlsdGVycy5za2lwQ291bnQgPSAwO1xuICAgIHRoaXMuX3RoZVNlbGVjdGVkVHJlZU5vZGUgPSAnJztcbiAgICB0aGlzLmxpc3QuZ2V0KCk7XG4gIH1cblxuICAvKirliKDpmaTlm77niYcgKi9cbiAgZGVsZXRlRmlsZShmaWxlKSB7XG4gICAgdGhpcy5fRmlsZVNlcnZpY2UuZGVsZXRlKGZpbGUuaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBGaWxlRXhwbG9yZXI6OkRlbGV0ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICB0aGlzLmxpc3QuZ2V0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKirliKDpmaTmiYDmnInpgInkuK3lm77niYcgKi9cbiAgb25EZWxldGVBbGxTZWxlY3RGaWxlKCkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAud2FybignJywge1xuICAgICAgICBrZXk6ICcnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpBcmVZb3VTdXJlYCksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoc3RhdHVzOiBDb25maXJtYXRpb24uU3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzdGF0dXMgPT0gJ2NvbmZpcm0nKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJsZSA9IHRoaXMuc2VsZWN0ZWRUYWJsZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5iYXRjaERlbGV0ZUl0ZW1zKHNlbGVjdGVkVGFibGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmdldCgpO1xuICAgICAgICAgICAgICAvLyDlj6/og73pnIDopoHliLfmlrDooajmoLzmiJbmm7TmlrBVSVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy/liKDpmaTlpLHotKXnmoTpoblcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmdldCgpO1xuICAgICAgICAgICAgICAvLyDlj6/ku6XpgInmi6nlsZXnpLrlpLHotKXpobnmiJbph43or5VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy/mibnph4/liKDpmaTov4fnqIvkuK3lj5HnlJ/plJnor69cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaJuemHj+WIoOmZpOihqOagvOmhuVxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUYWJsZSDpnIDopoHliKDpmaTnmoTooajmoLzpobnmlbDnu4RcbiAgICogQHJldHVybnMg5YyF5ZCr5oiQ5Yqf54q25oCB5ZKM5aSx6LSl6aG555qE57uT5p6c5a+56LGhXG4gICAqL1xuICBhc3luYyBiYXRjaERlbGV0ZUl0ZW1zKHNlbGVjdGVkVGFibGU6IGFueVtdKSB7XG4gICAgLy8g5a2Y5YKo5omA5pyJ5Yig6Zmk6K+35rGC55qEUHJvbWlzZVxuICAgIGNvbnN0IGRlbGV0ZVByb21pc2VzID0gc2VsZWN0ZWRUYWJsZS5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLl9GaWxlU2VydmljZS5kZWxldGUoaXRlbS5pZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyDnrYnlvoXmiYDmnInor7fmsYLlrozmiJBcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGRlbGV0ZVByb21pc2VzKTtcbiAgICAvLyDmlLbpm4blpLHotKXnmoTpoblcbiAgICBjb25zdCBmYWlsZWRJdGVtczogYW55W10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGZhaWxlZEl0ZW1zLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFpbGVkSXRlbXMubGVuZ3RoID09PSAwLFxuICAgICAgZmFpbGVkSXRlbXMsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBmYWlsZWRJdGVtcy5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpEZWxldGVkU3VjY2Vzc2Z1bGx5YClcbiAgICAgICAgICA6IGAke2ZhaWxlZEl0ZW1zLmxlbmd0aH3kuKrpobnliKDpmaTlpLHotKVgLFxuICAgIH07XG4gIH1cblxuICAvLyDkvb/nlKjnpLrkvotcbiAgYXN5bmMgaGFuZGxlQmF0Y2hEZWxldGUoKSB7fVxuXG4gIC8qKuWFs+mXreaWh+S7tueKtuaAgeW8ueeqlyAqL1xuICBjbG9zZUZpbGVTdGF0dXNNb2RhbCgpIHtcbiAgICB0aGlzLnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0ID0gW107XG4gIH1cblxuICAvKirliJvlu7rlm77niYfnmoTmjqXlj6PvvIzku6PnkIbkuK3nmoRmaWxl57G75Z6L5LiN5Yy56YWN77yM5YiH5o2i5Li6YW5557G75Z6LICovXG4gIGNyZWF0ZUZpbGUgPSAoaW5wdXQ6IGFueSwgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgRmlsZURlc2NyaXB0b3JEdG8+KFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiAnL2FwaS9maWxlLWV4cGxvcmVyL2ZpbGVzJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgY29udGFpbmVyTmFtZTogaW5wdXQuY29udGFpbmVyTmFtZSxcbiAgICAgICAgICBjZWxsTmFtZTogaW5wdXQuY2VsbE5hbWUsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGlucHV0LmRpcmVjdG9yeUlkLFxuICAgICAgICAgIGVudGl0eUlkOiBpbnB1dC5lbnRpdHlJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogaW5wdXQuZmlsZSxcbiAgICAgIH0sXG4gICAgICB7IGFwaU5hbWU6ICdGaWxlRXhwbG9yZXInLCAuLi5jb25maWcgfVxuICAgICk7XG5cbiAgLyoq5paH5Lu26KGo5qC8LemAieaLqeeahOihqOagvOaVsOaNrumhuSAqL1xuICBzZWxlY3RlZFRhYmxlID0gW107XG4gIC8qKuW9k+WJjemAieaLqeeahHRhYmxl6aG5IGlkICovXG4gIG5vd1NlbGVjdElkOiBhbnkgPSAnJztcbiAgLyoq5piv5ZCm5YWo6YCJICovXG4gIGlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0UGlja2VyRmlsZTogYW55W107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbGlmZWN5Y2xlIGhvb2suIFVzZSBpdCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLCBidXQgYXZvaWQgYW55IHNlcmlvdXMgd29yayBoZXJlLlxuICAgIC8vQWRkICcke2ltcGxlbWVudHMgT25DaGFuZ2VzfScgdG8gdGhlIGNsYXNzLlxuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHRoaXMuX0ZpbGVBcGlTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnNlbGVjdFBpY2tlckZpbGUpO1xuICB9XG4gIC8qKuihqOagvOWIhumhteWIh+aNoiAqL1xuICBvblBhZ2VDaGFuZ2UobmV3QXJyYXkpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsU2VsZWN0ZWRGbihuZXdBcnJheSwgdGhpcy5zZWxlY3RlZFRhYmxlKTtcbiAgfVxuICAvKirooYzpgInmi6nmoYbmlLnlj5ggKi9cbiAgb25DaGVja2JveENoYW5nZUZuKGV2ZW50LCByb3csIGFycmF5OiBhbnlbXSkge1xuICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIGxldCBzZWxlY3RlZFRhYmxlQXJyYXkgPSBbLi4udGhpcy5zZWxlY3RlZFRhYmxlXTtcbiAgICBpZiAodGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIHNlbGVjdGVkVGFibGVBcnJheS5wdXNoKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFRhYmxlQXJyYXkgPSBzZWxlY3RlZFRhYmxlQXJyYXkuZmlsdGVyKGVsID0+IGVsLmlkICE9IHJvdy5pZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsU2VsZWN0ZWRGbihhcnJheSwgc2VsZWN0ZWRUYWJsZUFycmF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRUYWJsZUFycmF5Lmxlbmd0aCA9IDA7XG4gICAgICBzZWxlY3RlZFRhYmxlQXJyYXkgPSBjaGVja2VkID8gW3Jvd10gOiBbXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzQnlJZChzZWxlY3RlZFRhYmxlQXJyYXkpO1xuICB9XG4gIC8qKuWmguaenHNlbGVjdGVkVGFibGVBcnJheeS4jeWQq2FycmF55Lit55qE5omA5pyJ6aG577yM5YiZ5bCGaXNBbGxTZWxlY3RlZOiuvuS4unRydWUs5ZCm5YiZ6K6+5Li6ZmFsc2UgKi9cbiAgaXNBbGxTZWxlY3RlZEZuKHRvbGFsQXJyYXk6IGFueVtdLCBzZWxlY3RlZEFycmF5OiBhbnlbXSA9IFtdKSB7XG4gICAgaWYodG9sYWxBcnJheS5sZW5ndGggPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0b2xhbEFycmF5LmV2ZXJ5KGl0ZW0gPT4gc2VsZWN0ZWRBcnJheS5zb21lKGVsID0+IGVsLmlkID09PSBpdGVtLmlkKSk7XG4gIH1cbiAgLyoq6YCJ5oup5b2T5YmN6aG15YWo6YOoICovXG4gIG9uU2VsZWN0QWxsRm4oZXZlbnQ6IGFueSwgYXJyYXk6IGFueVtdKSB7XG4gICAgbGV0IHNlbGVjdGVkVGFibGVBcnJheSA9IHRoaXMuc2VsZWN0ZWRUYWJsZTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIHNlbGVjdGVkVGFibGVBcnJheSA9IHRoaXMucmVtb3ZlRHVwbGljYXRlc0J5SWQoWy4uLnNlbGVjdGVkVGFibGVBcnJheSwgLi4uYXJyYXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRUYWJsZUFycmF5ID0gc2VsZWN0ZWRUYWJsZUFycmF5LmZpbHRlcihlbCA9PiAhYXJyYXkuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGVsLmlkKSk7XG4gICAgfVxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHNlbGVjdGVkVGFibGVBcnJheTtcbiAgfVxuXG4gIC8qKuWIpOaWrXJvd+aYr+WQpumAieS4rSAqL1xuICBzZWxlY3RlZGNoZWNrYm94ID0gaWQgPT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFibGUuc29tZShlbCA9PiBlbC5pZCA9PT0gaWQpO1xuICB9O1xuICAvKirliKDpmaTmlbDnu4TkuK3ph43lpI3nmoTpobkgKi9cbiAgcmVtb3ZlRHVwbGljYXRlc0J5SWQoYXJyYXkpIHtcbiAgICBjb25zdCBzZWVuSWRzID0ge307XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGlmICghc2Vlbklkc1tpdGVtLmlkXSkge1xuICAgICAgICBzZWVuSWRzW2l0ZW0uaWRdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cbiAgLyoq55So5LqO57yW6L6R55qE6KGo5Y2V77yM5ZCM5pe25Y+q6IO95pi+56S657yW6L6R5LiA5LiqICovXG4gIEZpbGVOYW1lRm9ybTogRm9ybUdyb3VwIHwgYW55O1xuICAvKirlvZPliY3nvJbovpHnmoRyb3cgKi9cbiAgbmV3RWRpdFJvdzogYW55ID0gJyc7XG4gIC8qKuaYr+WQpuato+WcqOWKoOi9vSAqL1xuICBpc2xvYWRpbmcgPSBmYWxzZTtcbiAgLyoq5o+Q5LqkRmlsZU5hbWXnvJbovpEgKi9cbiAgb25TdWJtaXRGaWxlTmFtZShldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5GaWxlTmFtZUZvcm0udmFsdWU7XG4gICAgaWYgKCF0aGlzLkZpbGVOYW1lRm9ybS52YWxpZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzbG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9GaWxlU2VydmljZVxuICAgICAgLnVwZGF0ZShpbnB1dC5pZCwge1xuICAgICAgICBuYW1lOmlucHV0LmZpbGVOYW1lXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAvL+mAmui/h+W9k+WJjW5ld0VkaXRSb3fnmoRpZCzkv67mlLlkYXRhLml0ZW1z5Lit5a+55bqU6aG555qEbmFtZVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5kYXRhLml0ZW1zKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gdGhpcy5uZXdFZGl0Um93LmlkKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm5hbWUgPSBpbnB1dC5maWxlTmFtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuRmlsZU5hbWVGb3JtID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5ld0VkaXRSb3cgPSAnJztcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBGaWxlRXhwbG9yZXI6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgICAvLyB0aGlzLmxpc3QuZ2V0KCk7XG4gICAgICB9KTtcbiAgfVxuICAvKirmiZPlvIDnvJbovpEgKi9cbiAgb25FZGl0RmlsZU5hbWUocm93KSB7XG4gICAgdGhpcy5GaWxlTmFtZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGZpbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBpZDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgIH0pO1xuICAgIHRoaXMuRmlsZU5hbWVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgZmlsZU5hbWU6IHJvdy5uYW1lLFxuICAgICAgaWQ6IHJvdy5pZCxcbiAgICB9KTtcbiAgICB0aGlzLm5ld0VkaXRSb3cgPSByb3c7XG4gIH1cbiAgLyoq5YWz6Zet57yW6L6RICovXG4gIG9uQ2FuY2VsRmlsZU5hbWUocm93KSB7XG4gICAgdGhpcy5uZXdFZGl0Um93ID0gJyc7XG4gICAgdGhpcy5GaWxlTmFtZUZvcm0gPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJNb2RhbE9wZW5cIiAodmlzaWJsZUNoYW5nZSk9XCJNb2RhbFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtvcHRpb25zXT1cInsgc2l6ZTogJ3hsJywgc2Nyb2xsYWJsZTogZmFsc2UgfVwiPlxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICA8aDM+e3snRmlsZUV4cGxvcmVyOjpGaWxlRXhwbG9yZXInIHwgYWJwTG9jYWxpemF0aW9ufX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBmaWxlLWV4cGxvcmVyLW1vZGFsLWJvZHkgZmlsZS1tb2RhbFwiICpuZ0lmPVwiTW9kYWxPcGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIiAqbmdJZj1cImNyZWF0ZURpcmVjdG9yeVBlcm1pc3Npb25OYW1lXCIgc3R5bGU9XCJvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpXCI+XG4gICAgICAgIDxmZS1maWxlLW1vZGFsLXRyZWUgW3RoZVNlbGVjdGVkVHJlZU5vZGVdPVwiX3RoZVNlbGVjdGVkVHJlZU5vZGVcIiAobm9kZUNsaWNrKT1cIl9ub2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgKGxvb2tBbGxCdG4pPVwibG9va0FsbEZpbGUoKVwiICh0cmVlTm9kZURhdGEpPVwidHJlZU5vZGVEYXRhKCRldmVudClcIlxuICAgICAgICAgIFtmaWxlQ29udGFpbmVyTmFtZV09XCJfZmlsZUNvbnRhaW5lck5hbWVcIj48L2ZlLWZpbGUtbW9kYWwtdHJlZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbY2xhc3NdPVwiY3JlYXRlRGlyZWN0b3J5UGVybWlzc2lvbk5hbWU/J2NvbC05JzonY29sLTEyJ1wiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMlwiPjxzcGFuICpuZ0lmPVwic2VsZWN0ZWRUYWJsZS5sZW5ndGg+MVwiIGNsYXNzPVwiYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJvbkRlbGV0ZUFsbFNlbGVjdEZpbGUoKVwiIHJvbGU9XCJidXR0b25cIj57eydGaWxlRXhwbG9yZXI6OkRlbGV0ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZm9ybS1maWxlXCIgc3R5bGU9XCJmbGV4OiAyXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiICNmaWxlRWRpdCBbbXVsdGlwbGVdPVwiX211bHRpcGxlXCIgKGNoYW5nZSk9XCJnZXRGaWxlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8IS0tIFtzZWxlY3Rpb25UeXBlXT1cIl9tdWx0aXBsZT9TZWxlY3Rpb25UeXBlLmNoZWNrYm94OlNlbGVjdGlvblR5cGUuc2luZ2xlXCIgLS0+XG4gICAgICAgICAgPCEtLSBbc2VsZWN0Q2hlY2tdPVwic2VsZWN0Q2hlY2tcIiAtLT5cbiAgICAgICAgICA8bmd4LWRhdGF0YWJsZSBjbGFzcz1cIm1hdGVyaWFsIGNvbnRhaW5lci1oZWlnaHRcIiBbcm93c109XCJkYXRhLml0ZW1zXCIgW2xpc3RdPVwibGlzdFwiIGNvbHVtbk1vZGU9XCJmbGV4XCJcbiAgICAgICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiNTBcIiBbZm9vdGVySGVpZ2h0XT1cIjUwXCIgcm93SGVpZ2h0PVwiYXV0b1wiIFtzY3JvbGxiYXJWXT1cInRydWVcIiBbdmlydHVhbGl6YXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2V4dGVybmFsUGFnaW5nXT1cInRydWVcIiBbY291bnRdPVwiZGF0YS50b3RhbENvdW50XCI+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW3dpZHRoXT1cIjUwXCIgcHJvcD1cImlkXCIgW3NvcnRhYmxlXT1cImZhbHNlXCIgW2NhbkF1dG9SZXNpemVdPVwiZmFsc2VcIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Jlc2l6ZWFibGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LWFsbFJvd3NTZWxlY3RlZD1cImFsbFJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgbGV0LXNlbGVjdEZuPVwic2VsZWN0Rm5cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgKm5nSWY9XCJfbXVsdGlwbGVcIiBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGxGbigkZXZlbnQsZGF0YS5pdGVtcylcIiAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJzZWxlY3RlZGNoZWNrYm94KHZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2VGbigkZXZlbnQscm93LGRhdGEuaXRlbXMpXCIgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW3NvcnRhYmxlXT1cImZhbHNlXCIgW2ZsZXhHcm93XT1cIjJcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmUtZmlsZS1wcmV2aWV3IFt3aWR0aF09XCInODBweCdcIiBbc3JjXT1cInJvdy51cmxcIiBbbmFtZV09XCJyb3cubmFtZVwiIFt0eXBlXT1cInJvdy5taW1lVHlwZVwiXG4gICAgICAgICAgICAgICAgICBbcHJldmlld109XCJ0cnVlXCI+PC9mZS1maWxlLXByZXZpZXc+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtuYW1lXT1cIidGaWxlRXhwbG9yZXI6OkZpbGVOYW1lJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJuYW1lXCIgW3NvcnRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cIjRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IHRpdGxlaG92ZXJcIiAqbmdJZj1cIm5ld0VkaXRSb3cuaWQhPT1yb3cuaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPnt7IHZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrLnN0b3ApPVwib25FZGl0RmlsZU5hbWUocm93KVwiIHN0eWxlPVwibGluZS1oZWlnaHQ6MjtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIkZpbGVOYW1lRm9ybSYmbmV3RWRpdFJvdy5pZD09PXJvdy5pZFwiPlxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJGaWxlTmFtZUZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXRGaWxlTmFtZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIFwiIHR5cGU9XCJ0ZXh0XCIgIGZvcm1Db250cm9sTmFtZT1cImZpbGVOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIiBidG4gYnRuLXNtXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zcGluIGZhIGZhLXNwaW5uZXJcIiAqbmdJZj1cImlzbG9hZGluZ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFpc2xvYWRpbmdcIj48L2k+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIiBidG4gYnRuLXNtXCIgKGNsaWNrLnN0b3ApPVwib25DYW5jZWxGaWxlTmFtZShyb3cpXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiIHR5cGU9XCJyZXNldFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtuYW1lXT1cIidGaWxlRXhwbG9yZXI6OkZpbGVTaXplJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJzaXplXCIgW2ZsZXhHcm93XT1cIjEuNVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIHt7IF9GaWxlQXBpU2VydmljZS5mb3JtYXRGaWxlU2l6ZSh2YWx1ZSkgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW25hbWVdPVwiJ0ZpbGVFeHBsb3Jlcjo6RGlyZWN0b3J5JyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJkaXJlY3RvcnlJZFwiXG4gICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJmYWxzZVwiIFtmbGV4R3Jvd109XCIxXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgdmFsdWV8Z2V0RGlyZWN0b3J5TmFtZTpmaWxlR3JvdXBMaXN0IH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtuYW1lXT1cIidGaWxlRXhwbG9yZXI6OkNyZWF0aW9uVGltZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwiY3JlYXRpb25UaW1lXCJcbiAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cIjJcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgOiAnWVlZWS9NTS9kZCBISDptbTpzJyB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbZmxleEdyb3ddPVwiMVwiIFtzb3J0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodCBwLTBcIiAoY2xpY2suc3RvcCk9XCJkZWxldGVGaWxlKHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoIHRleHQtcHJpbWFyeSBwLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWZpeGVkIGJvdHRvbS0wIGVuZC0wIHNoYWRvdy1sZyBmaWxlLXN0YXR1cy1tb2RhbCAgIG0tNVwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMTBweFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHAtMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0wIHB5LTEgYm9yZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2Pnt7J0ZpbGVFeHBsb3Jlcjo6VXBsb2FkRmlsZXMnIHwgYWJwTG9jYWxpemF0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2suc3RvcCk9XCJjbG9zZUZpbGVTdGF0dXNNb2RhbCgpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVTaXplJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaXRlbS5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJpdGVtLnNpemUgPiBzaXplTGltaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snRmlsZUV4cGxvcmVyOjpFeGNlZWRzTWF4aW11bVNpemUnIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9uOl9GaWxlQXBpU2VydmljZS5mb3JtYXRGaWxlU2l6ZShzaXplTGltaXQpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZmlsZVNpemUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09IDFcIiBjbGFzcz1cImZhcyBmYS1jaGVjayB0ZXh0LXByaW1hcnlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAyXCIgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIHRleHQtZGFuZ2VyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIChjbGljayk9XCJtb2RhbFNhdmUoKVwiPnt7J0ZpbGVFeHBsb3Jlcjo6Q29uZmlybScgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgQGlmKHNlbGVjdGVkVGFibGUubGVuZ3RoPjApe1xuICAgICAgKHt7c2VsZWN0ZWRUYWJsZS5sZW5ndGh9fSlcbiAgICAgIH1cbiAgICA8L2FicC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9maWxlLWV4cGxvcmVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1vZGFsL2ZpbGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmlsZS1leHBsb3Jlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tb2RhbC9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxzREFBc0Q7QUFDdEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLFdBQVcsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFHTCxXQUFXLEVBRVgsV0FBVyxFQUNYLG1CQUFtQixFQUNuQix3QkFBd0IsR0FDekIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUVMLHFCQUFxQixHQUV0QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQWVoQyxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsWUFBK0MsRUFDL0MsT0FBdUIsRUFDZixJQUFpQixFQUMxQixlQUErQixFQUM5QixXQUF3QixFQUN4QixZQUFpQyxFQUNqQyxvQkFBeUM7UUFOekMsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBQy9DLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFHM0MsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFZL0QsYUFBYTtRQUNiLGtDQUE2QixHQUFXLElBQUksQ0FBQztRQVk3QyxVQUFVO1FBQ1YsY0FBUyxHQUFHLEtBQUssQ0FBQztRQU1sQjs7V0FFRztRQUNILGNBQVMsR0FBRyxPQUFPLENBQUM7UUFjcEIsYUFBYTtRQUNILGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3QyxpQkFBaUI7UUFDakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQiw4QkFBOEI7UUFDOUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQXNCbEIsNkJBQTZCO1FBQzdCLGVBQWU7UUFDZix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFlckIsa0JBQWtCO1FBQ2xCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBc0MxQix1QkFBdUI7UUFDdkIsNEJBQXVCLEdBQVUsRUFBRSxDQUFDO1FBZ0VwQyxZQUFZO1FBQ1osU0FBSSxHQUFzQztZQUN4QyxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQztRQUVGLFlBQVk7UUFDWixZQUFPLEdBQUcsRUFBbUIsQ0FBQztRQUU5QixtQkFBbUI7UUFDbkIsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFFOUIsWUFBWTtRQUNGLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQW1IbkQsb0NBQW9DO1FBQ3BDLGVBQVUsR0FBRyxDQUFDLEtBQVUsRUFBRSxNQUE2QixFQUFFLEVBQUUsQ0FDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQ3RCO1lBQ0UsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsMEJBQTBCO1lBQy9CLE1BQU0sRUFBRTtnQkFDTixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7Z0JBQ2xDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7YUFDekI7WUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsRUFDRCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FDdkMsQ0FBQztRQUVKLG1CQUFtQjtRQUNuQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixvQkFBb0I7UUFDcEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsVUFBVTtRQUNWLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBZ0R0QixlQUFlO1FBQ2YscUJBQWdCLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDO1FBY0YsY0FBYztRQUNkLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsWUFBWTtRQUNaLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFwYWYsQ0FBQztJQUdKLFlBQVk7SUFDWixxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsc0JBQXNCO2lCQUN4Qiw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7aUJBQ3RELFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsNkJBQTZCLEdBQUcsR0FBRyxFQUFFLDZCQUE2QixDQUFDO2dCQUN4RSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1ELElBQ1csaUJBQWlCLENBQUMsQ0FBUztRQUNwQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUM1QixrQkFBa0I7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFJRCxJQUNXLFFBQVEsQ0FBQyxDQUFVO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFNRCxJQUNXLEtBQUssQ0FBQyxDQUFTO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUI7SUFDakIsSUFDVyxPQUFPLENBQUMsQ0FBVTtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBV0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztJQUNYLFNBQVM7UUFDUCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBS0QsV0FBVztJQUNYLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQy9CLDhCQUE4QjtZQUM5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELGdCQUFnQjtJQUNoQixZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLFdBQVc7UUFDNUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLFNBQVMsT0FBTyxDQUFDLEtBQUs7WUFDcEIsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUVuQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixjQUFjO2dCQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRXpCLHlCQUF5QjtnQkFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZTtJQUNmLFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBS0QsbUJBQW1CO0lBQ25CLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSztRQUN2QixNQUFNLEtBQUssR0FBQyxJQUFJLENBQUM7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDckMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckMsU0FBUztZQUNYLENBQUM7WUFDRCxjQUFjLENBQUMsSUFBSSxDQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztpQkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxVQUFVLEdBQUc7Z0JBQ2xCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBRSxDQUFDLE9BQU8sRUFBQyxFQUFFO1lBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzRSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztnQkFDckMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksRUFBRSxJQUFJLElBQUk7Z0JBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxJQUFJO1FBQ2hCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsYUFBYSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLEVBQUU7Z0JBQ2pELFFBQVEsRUFBRSxFQUFFO2FBQ2IsQ0FBQyxDQUFDLFNBQVMsQ0FDVixHQUFHLENBQUMsRUFBRTtnQkFDSixPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtnQkFDSixPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBaUJELGlCQUFpQjtJQUNqQixXQUFXO1FBQ1QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEVBQUUsQ0FDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDeEIsR0FBRyxLQUFLO1lBQ1IsR0FBRyxJQUFJLENBQUMsT0FBTztZQUNmLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRztTQUMzQyxDQUFDLENBQUM7UUFDTCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQXVDLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVTtJQUNWLFVBQVUsQ0FBQyxJQUFJO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sY0FBYyxHQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLHFCQUFxQjtRQUNuQixJQUFJLENBQUMsWUFBWTthQUNkLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUixHQUFHLEVBQUUsRUFBRTtZQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO1NBQzVFLENBQUM7YUFDRCxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQTJCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDekMsSUFBSSxDQUFDO29CQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBQyxvQkFBb0IsQ0FBQyxDQUFBO29CQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsYUFBYSxHQUFDLEVBQUUsQ0FBQzt3QkFDdEIsZ0JBQWdCO29CQUNsQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sUUFBUTt3QkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixlQUFlO3dCQUNmLElBQUksQ0FBQyxhQUFhLEdBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQztvQkFFekMsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsYUFBYTtnQkFDZixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBb0I7UUFDekMsbUJBQW1CO1FBQ25CLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FDekMsR0FBRyxFQUFFO29CQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxFQUNELEdBQUcsRUFBRTtvQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBVztRQUNYLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxTQUFTO1FBQ1QsTUFBTSxXQUFXLEdBQVUsRUFBRSxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNqQyxXQUFXO1lBQ1gsT0FBTyxFQUNMLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUM7Z0JBQ3hFLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLFFBQVE7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO0lBQ1AsS0FBSyxDQUFDLGlCQUFpQixLQUFJLENBQUM7SUFFNUIsY0FBYztJQUNkLG9CQUFvQjtRQUNsQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUE2QkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLHlHQUF5RztRQUN6Ryw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsWUFBWTtJQUNaLFlBQVksQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxZQUFZO0lBQ1osa0JBQWtCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFZO1FBQ3pDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztZQUNOLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDOUIsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELHNFQUFzRTtJQUN0RSxlQUFlLENBQUMsVUFBaUIsRUFBRSxnQkFBdUIsRUFBRTtRQUMxRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxhQUFhO0lBQ2IsYUFBYSxDQUFDLEtBQVUsRUFBRSxLQUFZO1FBQ3BDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQzthQUFNLENBQUM7WUFDTixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7SUFDMUMsQ0FBQztJQU1ELGVBQWU7SUFDZixvQkFBb0IsQ0FBQyxLQUFLO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBT0Qsa0JBQWtCO0lBQ2xCLGdCQUFnQixDQUFDLEtBQUs7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztZQUFFLE9BQU87UUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVk7YUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDckIsQ0FBQzthQUNELElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZix5Q0FBeUM7WUFDekMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUM5QixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7WUFDM0YsbUJBQW1CO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELFVBQVU7SUFDVixjQUFjLENBQUMsR0FBRztRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsRUFBRSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUMzQixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDbEIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUNELFVBQVU7SUFDVixnQkFBZ0IsQ0FBQyxHQUFHO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7OEdBNWRVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHVRQVRsQjtZQUNULGFBQWE7WUFDYixXQUFXO1lBQ1gsYUFBYTtZQUNiLDREQUE0RDtZQUM1RCx1RUFBdUU7WUFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtTQUNyRCwrQ0MzQ0gsNGlSQStJWTs7MkZEbEdDLGtCQUFrQjtrQkFkOUIsU0FBUzsrQkFFRSxlQUFlLGFBR2Q7d0JBQ1QsYUFBYTt3QkFDYixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsNERBQTREO3dCQUM1RCx1RUFBdUU7d0JBQ3ZFLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7cUJBQ3JEOzRRQStCVSxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBV0ssUUFBUTtzQkFEbEIsS0FBSztnQkFVSyxLQUFLO3NCQURmLEtBQUs7Z0JBTUssT0FBTztzQkFEakIsS0FBSztnQkFTSSxhQUFhO3NCQUF0QixNQUFNO2dCQW1LRyxZQUFZO3NCQUFyQixNQUFNO2dCQTRJRSxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgaW5qZWN0LFxuICBPbkNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNlcnZpY2UgZnJvbSAnLi4vLi4vcHJveHkvZGlnbml0ZS9maWxlLWV4cGxvcmVyL2ZpbGVzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQge1xuICBQYWdlZFJlc3VsdER0byxcbiAgQUJQLFxuICBMaXN0U2VydmljZSxcbiAgUmVzdCxcbiAgUmVzdFNlcnZpY2UsXG4gIExvY2FsaXphdGlvblNlcnZpY2UsXG4gIExJU1RfUVVFUllfREVCT1VOQ0VfVElNRSxcbn0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7XG4gIEZpbGVEZXNjcmlwdG9yRHRvLFxuICBGaWxlRGVzY3JpcHRvclNlcnZpY2UsXG4gIEdldEZpbGVzSW5wdXQsXG59IGZyb20gJy4uLy4uL3Byb3h5L2RpZ25pdGUvZmlsZS1leHBsb3Jlci9maWxlcyc7XG5pbXBvcnQgeyBGaWxlQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZmUtZmlsZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBbUmVxdWlyZWRdXG4gICAgTGlzdFNlcnZpY2UsXG4gICAgLy8gW09wdGlvbmFsXVxuICAgIC8vIFByb3ZpZGUgdGhpcyB0b2tlbiBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBkZWJvdW5jZSB0aW1lLlxuICAgIC8vIERlZmF1bHQgaXMgMzAwLiBDYW5ub3QgYmUgMC4gQW55IHZhbHVlIGJlbG93IDEwMCBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgeyBwcm92aWRlOiBMSVNUX1FVRVJZX0RFQk9VTkNFX1RJTUUsIHVzZVZhbHVlOiA1MDAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfRmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLkZpbGVEZXNjcmlwdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBsaXN0OiBMaXN0U2VydmljZSxcbiAgICBwdWJsaWMgX0ZpbGVBcGlTZXJ2aWNlOiBGaWxlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9Mb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICApIHt9XG5cbiAgcHJpdmF0ZSBfRmlsZURlc2NyaXB0b3JTZXJ2aWNlID0gaW5qZWN0KEZpbGVEZXNjcmlwdG9yU2VydmljZSk7XG4gIC8qKuiOt+WPluebruW9lemFjee9riAqL1xuICBnZXRGaWxlc0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX0ZpbGVEZXNjcmlwdG9yU2VydmljZVxuICAgICAgICAuZ2V0RmlsZUNvbnRhaW5lckNvbmZpZ3VyYXRpb24odGhpcy5fZmlsZUNvbnRhaW5lck5hbWUpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpcmVjdG9yeVBlcm1pc3Npb25OYW1lID0gcmVzPy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTtcbiAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKuebruW9leeahOadg+mZkOWQjeensCAqL1xuICBjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZTogc3RyaW5nID0gbnVsbDtcblxuICAvKirlm77niYflrrnlmaggKi9cbiAgX2ZpbGVDb250YWluZXJOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZmlsZUNvbnRhaW5lck5hbWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lID0gdjtcbiAgICAgIC8vIHRoaXMubG9hZERhdGEoKVxuICAgIH1cbiAgfVxuXG4gIC8qKuaYr+WQpuWkmumAiSAqL1xuICBfbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtdWx0aXBsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSB2O1xuICB9XG5cbiAgLyoq5paH5Lu25aSn5bCP6ZmQ5Yi2XG4gICAqIEBwYXJhbSAxbWJcbiAgICovXG4gIHNpemVMaW1pdCA9IDEwNDg1NzY7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGltaXQodjogbnVtYmVyKSB7XG4gICAgdGhpcy5zaXplTGltaXQgPSB2O1xuICB9XG4gIC8qKueItue7hOS7tuS8oOmAkueahOaooeaAgeahhueKtuaAgSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpc2libGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuTW9kYWxPcGVuID0gdjtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKuaooeaAgeahhueKtuaAgeWbnuiwgyAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKirmqKHmgIHmoYYt54q25oCBLeaYr+WQpuaJk+W8gCAqL1xuICBNb2RhbE9wZW4gPSBmYWxzZTtcblxuICAvKirmqKHmgIHmoYYt57mB5b+Z54q25oCBLeeUqOS6juehruWumuaooeaAgeeahOe5geW/meeKtuaAgeaYr+WQpuS4uuecnyAqL1xuICBNb2RhbEJ1c3kgPSBmYWxzZTtcblxuICAvKirmqKHmgIHmoYYt54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIE1vZGFsVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLk1vZGFsQnVzeSA9IGZhbHNlO1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5jcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZSA9ICcnO1xuICAgICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9ICcnO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gW107XG4gICAgICB0aGlzLnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0ID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoq5qih5oCB5qGG5L+d5a2YICovXG4gIG1vZGFsU2F2ZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFRhYmxlYXJyID0gdGhpcy5fRmlsZUFwaVNlcnZpY2UuZGVlcENsb25lKHRoaXMuc2VsZWN0ZWRUYWJsZSk7XG4gICAgdGhpcy5zZWxlY3RGaWxlZm4uZW1pdChzZWxlY3RlZFRhYmxlYXJyKTtcbiAgICB0aGlzLk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSk7XG4gIH1cbiAgLyoqZGlnbml0ZS1maWxlLW1vZGFsLXRyZWUgKi9cbiAgLyoq6YCJ5oup55qEdHJlZeiKgueCuSAqL1xuICBfdGhlU2VsZWN0ZWRUcmVlTm9kZTogYW55ID0gJyc7XG4gIGlzQ3JlYXRlTGlzdCA9IGZhbHNlO1xuICAvKirliJ3lp4vljJbmlbDmja4gKi9cbiAgbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuTW9kYWxPcGVuICYmIHRoaXMuX2ZpbGVDb250YWluZXJOYW1lKSB7XG4gICAgICB0aGlzLmxpc3QubWF4UmVzdWx0Q291bnQgPSAxMDA7XG4gICAgICAvLyB0aGlzLmZpbHRlcnMuc2tpcENvdW50ID0gMDtcbiAgICAgIHRoaXMuZ2V0RmlsZXNDb25maWd1cmF0aW9uKCk7XG4gICAgICBpZiAoIXRoaXMuaXNDcmVhdGVMaXN0KSB7XG4gICAgICAgIHRoaXMuaG9va1RvUXVlcnkoKTtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZUxpc3QgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0LmdldCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKiog5LuOdHJlZeiOt+WPluadpeeahOaVsOaNriAqL1xuICBmaWxlR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuICAvKiog5LuOdHJlZeiOt+WPluaVsOaNriAqL1xuICB0cmVlTm9kZURhdGEoZXZlbnQpIHtcbiAgICB0aGlzLmZpbGVHcm91cExpc3QgPSB0aGlzLmZsYXR0ZW5OZXN0ZWRBcnJheShldmVudCk7XG4gIH1cbiAgLyoqXG4gICAqIOWwhuW1jOWll+aVsOe7hOaJgeW5s+WMllxuICAgKiBAcGFyYW0ge0FycmF5fSBuZXN0ZWRBcnJheSAtIOWMheWQq+W1jOWll2NoaWxkcmVu55qE5pWw57uEXG4gICAqIEByZXR1cm5zIHtBcnJheX0gLSDmiYHlubPljJblkI7nmoTmlbDnu4RcbiAgICovXG4gIGZsYXR0ZW5OZXN0ZWRBcnJheShuZXN0ZWRBcnJheSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgICAgaWYgKCFpdGVtcykgcmV0dXJuO1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgLy8g5bCG5b2T5YmN6aG55re75Yqg5Yiw57uT5p6c5pWw57uEXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgLi4uaXRlbSB9KTtcblxuICAgICAgICAvLyDlpoLmnpzmnIljaGlsZHJlbuWxnuaAp+S4lOaYr+aVsOe7hO+8jOmAkuW9kuWkhOeQhlxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZmxhdHRlbihpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXR0ZW4obmVzdGVkQXJyYXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKip0cmVlLeiKgueCuemAieaLqSAqL1xuICBfbm9kZUNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5maWx0ZXJzLnNraXBDb3VudCA9IDA7XG4gICAgdGhpcy5fdGhlU2VsZWN0ZWRUcmVlTm9kZSA9IGV2ZW50O1xuICAgIHRoaXMubGlzdC5nZXQoKTtcbiAgfVxuXG4gIC8qKuWbvueJh+S4iuS8oC3opoHkuIrkvKDlm77niYfnmoTnirbmgIHmlofku7bliJfooaggKi9cbiAgdXBsb2FkUGljdHVyZVN0YXR1c0xpc3Q6IGFueVtdID0gW107XG5cbiAgLyoq5Zu+54mH5LiK5LygLeiOt+WPluaWh+S7tuS/oeaBr+aUueWPmCAqL1xuICBhc3luYyBnZXRGaWxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgX3RoYXQ9dGhpcztcbiAgICBjb25zdCBmaWxlcyA9IG5ldyBBcnJheSguLi5ldmVudC50YXJnZXQuZmlsZXMpO1xuICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBmaWxlcztcbiAgICBjb25zdCB1cGxvYWRQcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMuc2l6ZUxpbWl0KSB7XG4gICAgICAgIHRoaXMuc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCAyKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1cGxvYWRQcm9taXNlcy5wdXNoKFxuICAgICAgICB0aGlzLnVwbG9hZGluZ0ZpbGUoZmlsZSlcbiAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXR1cGxvYWRQaWN0dXJlU3RhdHVzKGZpbGUsIDEpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgfSksIC8vIOS/neivgeaJgOaciVByb21pc2Xpg71yZXNvbHZlXG4gICAgICApO1xuICAgIH1cbiAgICBQcm9taXNlLmFsbCh1cGxvYWRQcm9taXNlcykudGhlbiggKHJlc3VsdHMpPT4ge1xuICAgICAgX3RoYXQubGlzdC5nZXQoKTtcbiAgICAgIGNvbnN0IGlzU3VibWl0ID0gIV90aGF0LnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0LnNvbWUoZWwgPT4gZWwuc3RhdHVzID09IDIpO1xuICAgICAgaWYgKGlzU3VibWl0KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIF90aGF0LnVwbG9hZFBpY3R1cmVTdGF0dXNMaXN0ID0gW107XG4gICAgICAgIH0sIDQwMDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICAvKirlm77niYfkuIrkvKAt6K6+572udXBsb2FkUGljdHVyZVN0YXR1c0xpc3TnmoTnirbmgIEgKi9cbiAgc2V0dXBsb2FkUGljdHVyZVN0YXR1cyhmaWxlLCB0eXBlKSB7XG4gICAgdGhpcy51cGxvYWRQaWN0dXJlU3RhdHVzTGlzdC5tYXAoZWwgPT4ge1xuICAgICAgaWYgKGVsID09IGZpbGUpIGVsLnN0YXR1cyA9IHR5cGU7XG4gICAgfSk7XG4gIH1cblxuICAvKirlm77niYfkuIrkvKAt6YCS5b2S5oyJ6aG65bqP5LiK5LygICovXG4gIHVwbG9hZGluZ0ZpbGUoZmlsZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgICB0aGlzLmNyZWF0ZUZpbGUoe1xuICAgICAgICBmaWxlOiBmb3JtRGF0YSxcbiAgICAgICAgY29udGFpbmVyTmFtZTogdGhpcy5fZmlsZUNvbnRhaW5lck5hbWUsXG4gICAgICAgIGRpcmVjdG9yeUlkOiB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlPy5rZXkgfHwgJycsXG4gICAgICAgIGVudGl0eUlkOiAnJyxcbiAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZTogZmlsZS5uYW1lLCBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlcyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICByZWplY3RzKHsgZmlsZTogZmlsZS5uYW1lLCBzdGF0dXM6ICdmYWlsJywgZXJyb3I6IGVyciB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKirmlofku7booajmoLwt5pWw5o2uKi9cbiAgZGF0YTogUGFnZWRSZXN1bHREdG88RmlsZURlc2NyaXB0b3JEdG8+ID0ge1xuICAgIGl0ZW1zOiBbXSxcbiAgICB0b3RhbENvdW50OiAwLFxuICB9O1xuXG4gIC8qKuaWh+S7tuihqOagvC3mnaHku7YqL1xuICBmaWx0ZXJzID0ge30gYXMgR2V0RmlsZXNJbnB1dDtcblxuICAvKirmlofku7booajmoLwt6KGo5qC86Ieq5bim6YCJ5oup57G75Z6LICovXG4gIFNlbGVjdGlvblR5cGUgPSBTZWxlY3Rpb25UeXBlO1xuXG4gIC8qKumAieaLqeaWh+S7tuWbnuiwgyAqL1xuICBAT3V0cHV0KCkgc2VsZWN0RmlsZWZuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvKirmlofku7booajmoLwt6I635Y+W6KGo5qC85pWw5o2uICovXG4gIGhvb2tUb1F1ZXJ5KCkge1xuICAgIGNvbnN0IGdldERhdGEgPSAocXVlcnk6IEFCUC5QYWdlUXVlcnlQYXJhbXMpID0+XG4gICAgICB0aGlzLl9GaWxlU2VydmljZS5nZXRMaXN0KHtcbiAgICAgICAgLi4ucXVlcnksXG4gICAgICAgIC4uLnRoaXMuZmlsdGVycyxcbiAgICAgICAgY29udGFpbmVyTmFtZTogdGhpcy5fZmlsZUNvbnRhaW5lck5hbWUsXG4gICAgICAgIGRpcmVjdG9yeUlkOiB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlLmtleSxcbiAgICAgIH0pO1xuICAgIGNvbnN0IHNldERhdGEgPSAobGlzdDogUGFnZWRSZXN1bHREdG88RmlsZURlc2NyaXB0b3JEdG8+KSA9PiB7XG4gICAgICB0aGlzLmRhdGEgPSBsaXN0O1xuICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UobGlzdC5pdGVtcyk7XG4gICAgfTtcbiAgICB0aGlzLmxpc3QuaG9va1RvUXVlcnkoZ2V0RGF0YSkuc3Vic2NyaWJlKHNldERhdGEpO1xuICB9XG5cbiAgLyoq5paH5Lu26KGo5qC8Leafpeeci+aJgOacieWIhue7hOeahOaWh+S7tuaVsOaNriAqL1xuICBsb29rQWxsRmlsZSgpIHtcbiAgICB0aGlzLmZpbHRlcnMuc2tpcENvdW50ID0gMDtcbiAgICB0aGlzLl90aGVTZWxlY3RlZFRyZWVOb2RlID0gJyc7XG4gICAgdGhpcy5saXN0LmdldCgpO1xuICB9XG5cbiAgLyoq5Yig6Zmk5Zu+54mHICovXG4gIGRlbGV0ZUZpbGUoZmlsZSkge1xuICAgIHRoaXMuX0ZpbGVTZXJ2aWNlLmRlbGV0ZShmaWxlLmlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpEZWxldGVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgdGhpcy5saXN0LmdldCgpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJsZXM9dGhpcy5zZWxlY3RlZFRhYmxlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlPXNlbGVjdGVkVGFibGVzLmZpbHRlcihlbCA9PiBlbC5pZCAhPSBmaWxlLmlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuWIoOmZpOaJgOaciemAieS4reWbvueJhyAqL1xuICBvbkRlbGV0ZUFsbFNlbGVjdEZpbGUoKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25cbiAgICAgIC53YXJuKCcnLCB7XG4gICAgICAgIGtleTogJycsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBGaWxlRXhwbG9yZXI6OkFyZVlvdVN1cmVgKSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzdGF0dXM6IENvbmZpcm1hdGlvbi5TdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAnY29uZmlybScpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFRhYmxlID0gdGhpcy5zZWxlY3RlZFRhYmxlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJhdGNoRGVsZXRlSXRlbXMoc2VsZWN0ZWRUYWJsZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQsJ3Jlc3VsdHJlc3VsdHJlc3VsdCcpXG4gICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICB0aGlzLmxpc3QuZ2V0KCk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZT1bXTtcbiAgICAgICAgICAgICAgLy8g5Y+v6IO96ZyA6KaB5Yi35paw6KGo5qC85oiW5pu05pawVUlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8v5Yig6Zmk5aSx6LSl55qE6aG5XG4gICAgICAgICAgICAgIHRoaXMubGlzdC5nZXQoKTtcbiAgICAgICAgICAgICAgLy8g5Y+v5Lul6YCJ5oup5bGV56S65aSx6LSl6aG55oiW6YeN6K+VXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZT0gcmVzdWx0LmZhaWxlZEl0ZW1zO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8v5om56YeP5Yig6Zmk6L+H56iL5Lit5Y+R55Sf6ZSZ6K+vXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmibnph4/liKDpmaTooajmoLzpoblcbiAgICogQHBhcmFtIHNlbGVjdGVkVGFibGUg6ZyA6KaB5Yig6Zmk55qE6KGo5qC86aG55pWw57uEXG4gICAqIEByZXR1cm5zIOWMheWQq+aIkOWKn+eKtuaAgeWSjOWksei0pemhueeahOe7k+aenOWvueixoVxuICAgKi9cbiAgYXN5bmMgYmF0Y2hEZWxldGVJdGVtcyhzZWxlY3RlZFRhYmxlOiBhbnlbXSkge1xuICAgIC8vIOWtmOWCqOaJgOacieWIoOmZpOivt+axgueahFByb21pc2VcbiAgICBjb25zdCBkZWxldGVQcm9taXNlcyA9IHNlbGVjdGVkVGFibGUubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fRmlsZVNlcnZpY2UuZGVsZXRlKGl0ZW0uaWQpLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGl0ZW0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIOetieW+heaJgOacieivt+axguWujOaIkFxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoZGVsZXRlUHJvbWlzZXMpO1xuICAgIC8vIOaUtumbhuWksei0peeahOmhuVxuICAgIGNvbnN0IGZhaWxlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgZmFpbGVkSXRlbXMucHVzaChyZXN1bHQucmVhc29uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWlsZWRJdGVtcy5sZW5ndGggPT09IDAsXG4gICAgICBmYWlsZWRJdGVtcyxcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIGZhaWxlZEl0ZW1zLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBGaWxlRXhwbG9yZXI6OkRlbGV0ZWRTdWNjZXNzZnVsbHlgKVxuICAgICAgICAgIDogYCR7ZmFpbGVkSXRlbXMubGVuZ3RofeS4qumhueWIoOmZpOWksei0pWAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIOS9v+eUqOekuuS+i1xuICBhc3luYyBoYW5kbGVCYXRjaERlbGV0ZSgpIHt9XG5cbiAgLyoq5YWz6Zet5paH5Lu254q25oCB5by556qXICovXG4gIGNsb3NlRmlsZVN0YXR1c01vZGFsKCkge1xuICAgIHRoaXMudXBsb2FkUGljdHVyZVN0YXR1c0xpc3QgPSBbXTtcbiAgfVxuXG4gIC8qKuWIm+W7uuWbvueJh+eahOaOpeWPo++8jOS7o+eQhuS4reeahGZpbGXnsbvlnovkuI3ljLnphY3vvIzliIfmjaLkuLphbnnnsbvlnosgKi9cbiAgY3JlYXRlRmlsZSA9IChpbnB1dDogYW55LCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBGaWxlRGVzY3JpcHRvckR0bz4oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6ICcvYXBpL2ZpbGUtZXhwbG9yZXIvZmlsZXMnLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBjb250YWluZXJOYW1lOiBpbnB1dC5jb250YWluZXJOYW1lLFxuICAgICAgICAgIGNlbGxOYW1lOiBpbnB1dC5jZWxsTmFtZSxcbiAgICAgICAgICBkaXJlY3RvcnlJZDogaW5wdXQuZGlyZWN0b3J5SWQsXG4gICAgICAgICAgZW50aXR5SWQ6IGlucHV0LmVudGl0eUlkLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBpbnB1dC5maWxlLFxuICAgICAgfSxcbiAgICAgIHsgYXBpTmFtZTogJ0ZpbGVFeHBsb3JlcicsIC4uLmNvbmZpZyB9LFxuICAgICk7XG5cbiAgLyoq5paH5Lu26KGo5qC8LemAieaLqeeahOihqOagvOaVsOaNrumhuSAqL1xuICBzZWxlY3RlZFRhYmxlID0gW107XG4gIC8qKuW9k+WJjemAieaLqeeahHRhYmxl6aG5IGlkICovXG4gIG5vd1NlbGVjdElkOiBhbnkgPSAnJztcbiAgLyoq5piv5ZCm5YWo6YCJICovXG4gIGlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAvKirlt7LpgInlrprnmoTmlofku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0UGlja2VyRmlsZTogYW55W107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbGlmZWN5Y2xlIGhvb2suIFVzZSBpdCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLCBidXQgYXZvaWQgYW55IHNlcmlvdXMgd29yayBoZXJlLlxuICAgIC8vQWRkICcke2ltcGxlbWVudHMgT25DaGFuZ2VzfScgdG8gdGhlIGNsYXNzLlxuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHRoaXMuX0ZpbGVBcGlTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnNlbGVjdFBpY2tlckZpbGUpO1xuICB9XG4gIC8qKuihqOagvOWIhumhteWIh+aNoiAqL1xuICBvblBhZ2VDaGFuZ2UobmV3QXJyYXkpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsU2VsZWN0ZWRGbihuZXdBcnJheSwgdGhpcy5zZWxlY3RlZFRhYmxlKTtcbiAgfVxuICAvKirooYzpgInmi6nmoYbmlLnlj5ggKi9cbiAgb25DaGVja2JveENoYW5nZUZuKGV2ZW50LCByb3csIGFycmF5OiBhbnlbXSkge1xuICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIGxldCBzZWxlY3RlZFRhYmxlQXJyYXkgPSBbLi4udGhpcy5zZWxlY3RlZFRhYmxlXTtcbiAgICBpZiAodGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIHNlbGVjdGVkVGFibGVBcnJheS5wdXNoKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFRhYmxlQXJyYXkgPSBzZWxlY3RlZFRhYmxlQXJyYXkuZmlsdGVyKGVsID0+IGVsLmlkICE9IHJvdy5pZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsU2VsZWN0ZWRGbihhcnJheSwgc2VsZWN0ZWRUYWJsZUFycmF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRUYWJsZUFycmF5Lmxlbmd0aCA9IDA7XG4gICAgICBzZWxlY3RlZFRhYmxlQXJyYXkgPSBjaGVja2VkID8gW3Jvd10gOiBbXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzQnlJZChzZWxlY3RlZFRhYmxlQXJyYXkpO1xuICB9XG4gIC8qKuWmguaenHNlbGVjdGVkVGFibGVBcnJheeS4jeWQq2FycmF55Lit55qE5omA5pyJ6aG577yM5YiZ5bCGaXNBbGxTZWxlY3RlZOiuvuS4unRydWUs5ZCm5YiZ6K6+5Li6ZmFsc2UgKi9cbiAgaXNBbGxTZWxlY3RlZEZuKHRvbGFsQXJyYXk6IGFueVtdLCBzZWxlY3RlZEFycmF5OiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRvbGFsQXJyYXkubGVuZ3RoID09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdG9sYWxBcnJheS5ldmVyeShpdGVtID0+IHNlbGVjdGVkQXJyYXkuc29tZShlbCA9PiBlbC5pZCA9PT0gaXRlbS5pZCkpO1xuICB9XG4gIC8qKumAieaLqeW9k+WJjemhteWFqOmDqCAqL1xuICBvblNlbGVjdEFsbEZuKGV2ZW50OiBhbnksIGFycmF5OiBhbnlbXSkge1xuICAgIGxldCBzZWxlY3RlZFRhYmxlQXJyYXkgPSB0aGlzLnNlbGVjdGVkVGFibGU7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBzZWxlY3RlZFRhYmxlQXJyYXkgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZXNCeUlkKFsuLi5zZWxlY3RlZFRhYmxlQXJyYXksIC4uLmFycmF5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkVGFibGVBcnJheSA9IHNlbGVjdGVkVGFibGVBcnJheS5maWx0ZXIoZWwgPT4gIWFycmF5LnNvbWUoaXRlbSA9PiBpdGVtLmlkID09PSBlbC5pZCkpO1xuICAgIH1cbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcbiAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBzZWxlY3RlZFRhYmxlQXJyYXk7XG4gIH1cblxuICAvKirliKTmlq1yb3fmmK/lkKbpgInkuK0gKi9cbiAgc2VsZWN0ZWRjaGVja2JveCA9IGlkID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYmxlLnNvbWUoZWwgPT4gZWwuaWQgPT09IGlkKTtcbiAgfTtcbiAgLyoq5Yig6Zmk5pWw57uE5Lit6YeN5aSN55qE6aG5ICovXG4gIHJlbW92ZUR1cGxpY2F0ZXNCeUlkKGFycmF5KSB7XG4gICAgY29uc3Qgc2VlbklkcyA9IHt9O1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIXNlZW5JZHNbaXRlbS5pZF0pIHtcbiAgICAgICAgc2Vlbklkc1tpdGVtLmlkXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIC8qKueUqOS6jue8lui+keeahOihqOWNle+8jOWQjOaXtuWPquiDveaYvuekuue8lui+keS4gOS4qiAqL1xuICBGaWxlTmFtZUZvcm06IEZvcm1Hcm91cCB8IGFueTtcbiAgLyoq5b2T5YmN57yW6L6R55qEcm93ICovXG4gIG5ld0VkaXRSb3c6IGFueSA9ICcnO1xuICAvKirmmK/lkKbmraPlnKjliqDovb0gKi9cbiAgaXNsb2FkaW5nID0gZmFsc2U7XG4gIC8qKuaPkOS6pEZpbGVOYW1l57yW6L6RICovXG4gIG9uU3VibWl0RmlsZU5hbWUoZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuRmlsZU5hbWVGb3JtLnZhbHVlO1xuICAgIGlmICghdGhpcy5GaWxlTmFtZUZvcm0udmFsaWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc2xvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5fRmlsZVNlcnZpY2VcbiAgICAgIC51cGRhdGUoaW5wdXQuaWQsIHtcbiAgICAgICAgbmFtZTogaW5wdXQuZmlsZU5hbWUsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgLy/pgJrov4flvZPliY1uZXdFZGl0Um9355qEaWQs5L+u5pS5ZGF0YS5pdGVtc+S4reWvueW6lOmhueeahG5hbWVcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZGF0YS5pdGVtcykge1xuICAgICAgICAgIGlmIChlbGVtZW50LmlkID09IHRoaXMubmV3RWRpdFJvdy5pZCkge1xuICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gaW5wdXQuZmlsZU5hbWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLkZpbGVOYW1lRm9ybSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uZXdFZGl0Um93ID0gJyc7XG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgRmlsZUV4cGxvcmVyOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgLy8gdGhpcy5saXN0LmdldCgpO1xuICAgICAgfSk7XG4gIH1cbiAgLyoq5omT5byA57yW6L6RICovXG4gIG9uRWRpdEZpbGVOYW1lKHJvdykge1xuICAgIHRoaXMuRmlsZU5hbWVGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBmaWxlTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgaWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICB9KTtcbiAgICB0aGlzLkZpbGVOYW1lRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGZpbGVOYW1lOiByb3cubmFtZSxcbiAgICAgIGlkOiByb3cuaWQsXG4gICAgfSk7XG4gICAgdGhpcy5uZXdFZGl0Um93ID0gcm93O1xuICB9XG4gIC8qKuWFs+mXree8lui+kSAqL1xuICBvbkNhbmNlbEZpbGVOYW1lKHJvdykge1xuICAgIHRoaXMubmV3RWRpdFJvdyA9ICcnO1xuICAgIHRoaXMuRmlsZU5hbWVGb3JtID0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwiTW9kYWxPcGVuXCIgKHZpc2libGVDaGFuZ2UpPVwiTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIlxuICBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IGZhbHNlIH1cIj5cbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgPGgzPnt7J0ZpbGVFeHBsb3Jlcjo6RmlsZUV4cGxvcmVyJyB8IGFicExvY2FsaXphdGlvbn19PC9oMz5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlsZS1leHBsb3Jlci1tb2RhbC1ib2R5IGZpbGUtbW9kYWxcIiAqbmdJZj1cIk1vZGFsT3BlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCIgKm5nSWY9XCJjcmVhdGVEaXJlY3RvcnlQZXJtaXNzaW9uTmFtZVwiIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87IGhlaWdodDogY2FsYygxMDB2aCAtIDI0MHB4KVwiPlxuICAgICAgICA8ZmUtZmlsZS1tb2RhbC10cmVlIFt0aGVTZWxlY3RlZFRyZWVOb2RlXT1cIl90aGVTZWxlY3RlZFRyZWVOb2RlXCIgKG5vZGVDbGljayk9XCJfbm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgIChsb29rQWxsQnRuKT1cImxvb2tBbGxGaWxlKClcIiAodHJlZU5vZGVEYXRhKT1cInRyZWVOb2RlRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICBbZmlsZUNvbnRhaW5lck5hbWVdPVwiX2ZpbGVDb250YWluZXJOYW1lXCI+PC9mZS1maWxlLW1vZGFsLXRyZWU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2NsYXNzXT1cImNyZWF0ZURpcmVjdG9yeVBlcm1pc3Npb25OYW1lPydjb2wtOSc6J2NvbC0xMidcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDI0MHB4KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDJcIj48c3BhbiAqbmdJZj1cInNlbGVjdGVkVGFibGUubGVuZ3RoPjFcIiBjbGFzcz1cImJ0bi1saW5rXCJcbiAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwib25EZWxldGVBbGxTZWxlY3RGaWxlKClcIiByb2xlPVwiYnV0dG9uXCI+e3snRmlsZUV4cGxvcmVyOjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9ufX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZvcm0tZmlsZVwiIHN0eWxlPVwiZmxleDogMlwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAjZmlsZUVkaXQgW211bHRpcGxlXT1cIl9tdWx0aXBsZVwiIChjaGFuZ2UpPVwiZ2V0RmlsZUNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPCEtLSBbc2VsZWN0aW9uVHlwZV09XCJfbXVsdGlwbGU/U2VsZWN0aW9uVHlwZS5jaGVja2JveDpTZWxlY3Rpb25UeXBlLnNpbmdsZVwiIC0tPlxuICAgICAgICAgIDwhLS0gW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCIgLS0+XG4gICAgICAgICAgPG5neC1kYXRhdGFibGUgY2xhc3M9XCJtYXRlcmlhbCBjb250YWluZXItaGVpZ2h0XCIgW3Jvd3NdPVwiZGF0YS5pdGVtc1wiIFtsaXN0XT1cImxpc3RcIiBjb2x1bW5Nb2RlPVwiZmxleFwiXG4gICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjUwXCIgW2Zvb3RlckhlaWdodF09XCI1MFwiIHJvd0hlaWdodD1cImF1dG9cIiBbc2Nyb2xsYmFyVl09XCJ0cnVlXCIgW3ZpcnR1YWxpemF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJ0cnVlXCIgW2NvdW50XT1cImRhdGEudG90YWxDb3VudFwiPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFt3aWR0aF09XCI1MFwiIHByb3A9XCJpZFwiIFtzb3J0YWJsZV09XCJmYWxzZVwiIFtjYW5BdXRvUmVzaXplXT1cImZhbHNlXCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ3gtZGF0YXRhYmxlLWhlYWRlci10ZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGxldC1zZWxlY3RGbj1cInNlbGVjdEZuXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiICpuZ0lmPVwiX211bHRpcGxlXCIgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsRm4oJGV2ZW50LGRhdGEuaXRlbXMpXCIgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRjaGVja2JveCh2YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlRm4oJGV2ZW50LHJvdyxkYXRhLml0ZW1zKVwiIC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtzb3J0YWJsZV09XCJmYWxzZVwiIFtmbGV4R3Jvd109XCIyXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGZlLWZpbGUtcHJldmlldyBbd2lkdGhdPVwiJzgwcHgnXCIgW3NyY109XCJyb3cudXJsXCIgW25hbWVdPVwicm93Lm5hbWVcIiBbdHlwZV09XCJyb3cubWltZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgW3ByZXZpZXddPVwidHJ1ZVwiPjwvZmUtZmlsZS1wcmV2aWV3PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpGaWxlTmFtZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwibmFtZVwiIFtzb3J0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtmbGV4R3Jvd109XCI0XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCB0aXRsZWhvdmVyXCIgKm5nSWY9XCJuZXdFZGl0Um93LmlkIT09cm93LmlkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIj57eyB2YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCIgcm9sZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cIm9uRWRpdEZpbGVOYW1lKHJvdylcIiBzdHlsZT1cImxpbmUtaGVpZ2h0OjI7XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJGaWxlTmFtZUZvcm0mJm5ld0VkaXRSb3cuaWQ9PT1yb3cuaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRmlsZU5hbWVGb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0RmlsZU5hbWUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBcIiB0eXBlPVwidGV4dFwiICBmb3JtQ29udHJvbE5hbWU9XCJmaWxlTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCIgYnRuIGJ0bi1zbVwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc3BpbiBmYSBmYS1zcGlubmVyXCIgKm5nSWY9XCJpc2xvYWRpbmdcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCIhaXNsb2FkaW5nXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCIgYnRuIGJ0bi1zbVwiIChjbGljay5zdG9wKT1cIm9uQ2FuY2VsRmlsZU5hbWUocm93KVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIiB0eXBlPVwicmVzZXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpGaWxlU2l6ZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwic2l6ZVwiIFtmbGV4R3Jvd109XCIxLjVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB7eyBfRmlsZUFwaVNlcnZpY2UuZm9ybWF0RmlsZVNpemUodmFsdWUpIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtuYW1lXT1cIidGaWxlRXhwbG9yZXI6OkRpcmVjdG9yeScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwiZGlyZWN0b3J5SWRcIlxuICAgICAgICAgICAgICBbc29ydGFibGVdPVwiZmFsc2VcIiBbZmxleEdyb3ddPVwiMVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlfGdldERpcmVjdG9yeU5hbWU6ZmlsZUdyb3VwTGlzdCB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiBbbmFtZV09XCInRmlsZUV4cGxvcmVyOjpDcmVhdGlvblRpbWUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cImNyZWF0aW9uVGltZVwiXG4gICAgICAgICAgICAgIFtmbGV4R3Jvd109XCIyXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIDogJ1lZWVkvTU0vZGQgSEg6bW06cycgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gW2ZsZXhHcm93XT1cIjFcIiBbc29ydGFibGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgcC0wXCIgKGNsaWNrLnN0b3ApPVwiZGVsZXRlRmlsZShyb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaCB0ZXh0LXByaW1hcnkgcC0yXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkUGljdHVyZVN0YXR1c0xpc3QubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1maXhlZCBib3R0b20tMCBlbmQtMCBzaGFkb3ctbGcgZmlsZS1zdGF0dXMtbW9kYWwgICBtLTVcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDEwcHhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMCBweS0xIGJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj57eydGaWxlRXhwbG9yZXI6OlVwbG9hZEZpbGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrLnN0b3ApPVwiY2xvc2VGaWxlU3RhdHVzTW9kYWwoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydGaWxlRXhwbG9yZXI6OkZpbGVOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snRmlsZUV4cGxvcmVyOjpGaWxlU2l6ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB1cGxvYWRQaWN0dXJlU3RhdHVzTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiaXRlbS5zaXplID4gc2l6ZUxpbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0ZpbGVFeHBsb3Jlcjo6RXhjZWVkc01heGltdW1TaXplJyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbjpfRmlsZUFwaVNlcnZpY2UuZm9ybWF0RmlsZVNpemUoc2l6ZUxpbWl0KX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmZpbGVTaXplIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAxXCIgY2xhc3M9XCJmYXMgZmEtY2hlY2sgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gMlwiIGNsYXNzPVwiZmFzIGZhLXRpbWVzLWNpcmNsZSB0ZXh0LWRhbmdlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwibW9kYWxTYXZlKClcIj57eydGaWxlRXhwbG9yZXI6OkNvbmZpcm0nIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgIEBpZihzZWxlY3RlZFRhYmxlLmxlbmd0aD4wKXtcbiAgICAgICh7e3NlbGVjdGVkVGFibGUubGVuZ3RofX0pXG4gICAgICB9XG4gICAgPC9hYnAtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9hYnAtbW9kYWw+Il19
|
|
@@ -712,6 +712,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
712
712
|
}]
|
|
713
713
|
}] });
|
|
714
714
|
|
|
715
|
+
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
716
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
715
717
|
class FileModalComponent {
|
|
716
718
|
constructor(_FileService, toaster, list, _FileApiService, restService, confirmation, _LocalizationService) {
|
|
717
719
|
this._FileService = _FileService;
|
|
@@ -880,31 +882,33 @@ class FileModalComponent {
|
|
|
880
882
|
}
|
|
881
883
|
/**图片上传-获取文件信息改变 */
|
|
882
884
|
async getFileChange(event) {
|
|
885
|
+
const _that = this;
|
|
883
886
|
const files = new Array(...event.target.files);
|
|
884
887
|
this.uploadPictureStatusList = files;
|
|
888
|
+
const uploadPromises = [];
|
|
885
889
|
for (const file of files) {
|
|
886
890
|
if (file.size > this.sizeLimit) {
|
|
887
891
|
this.setuploadPictureStatus(file, 2);
|
|
888
892
|
continue;
|
|
889
893
|
}
|
|
890
|
-
|
|
894
|
+
uploadPromises.push(this.uploadingFile(file)
|
|
891
895
|
.then(res => {
|
|
892
|
-
this.selectedTable.push(res);
|
|
893
896
|
this.setuploadPictureStatus(file, 1);
|
|
894
|
-
// this.list.get()
|
|
895
897
|
})
|
|
896
|
-
.catch(()
|
|
898
|
+
.catch(function (err) {
|
|
897
899
|
this.setuploadPictureStatus(file, 2);
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
this.list.get();
|
|
901
|
-
const isSubmit = !this.uploadPictureStatusList.some(el => el.status == 2);
|
|
902
|
-
if (isSubmit) {
|
|
903
|
-
// this.toaster.success("上传完成");
|
|
904
|
-
setTimeout(() => {
|
|
905
|
-
this.uploadPictureStatusList = [];
|
|
906
|
-
}, 4000);
|
|
900
|
+
return err;
|
|
901
|
+
}));
|
|
907
902
|
}
|
|
903
|
+
Promise.all(uploadPromises).then((results) => {
|
|
904
|
+
_that.list.get();
|
|
905
|
+
const isSubmit = !_that.uploadPictureStatusList.some(el => el.status == 2);
|
|
906
|
+
if (isSubmit) {
|
|
907
|
+
setTimeout(() => {
|
|
908
|
+
_that.uploadPictureStatusList = [];
|
|
909
|
+
}, 4000);
|
|
910
|
+
}
|
|
911
|
+
});
|
|
908
912
|
}
|
|
909
913
|
/**图片上传-设置uploadPictureStatusList的状态 */
|
|
910
914
|
setuploadPictureStatus(file, type) {
|
|
@@ -924,9 +928,9 @@ class FileModalComponent {
|
|
|
924
928
|
directoryId: this._theSelectedTreeNode?.key || '',
|
|
925
929
|
entityId: '',
|
|
926
930
|
}).subscribe(res => {
|
|
927
|
-
resolve(res);
|
|
931
|
+
resolve({ file: file.name, status: 'success', response: res });
|
|
928
932
|
}, err => {
|
|
929
|
-
rejects(
|
|
933
|
+
rejects({ file: file.name, status: 'fail', error: err });
|
|
930
934
|
});
|
|
931
935
|
});
|
|
932
936
|
}
|
|
@@ -955,6 +959,8 @@ class FileModalComponent {
|
|
|
955
959
|
this._FileService.delete(file.id).subscribe(res => {
|
|
956
960
|
this.toaster.success(this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`));
|
|
957
961
|
this.list.get();
|
|
962
|
+
const selectedTables = this.selectedTable;
|
|
963
|
+
this.selectedTable = selectedTables.filter(el => el.id != file.id);
|
|
958
964
|
});
|
|
959
965
|
}
|
|
960
966
|
/**删除所有选中图片 */
|
|
@@ -969,15 +975,18 @@ class FileModalComponent {
|
|
|
969
975
|
const selectedTable = this.selectedTable;
|
|
970
976
|
try {
|
|
971
977
|
const result = await this.batchDeleteItems(selectedTable);
|
|
978
|
+
console.log(result, 'resultresultresult');
|
|
972
979
|
if (result.success) {
|
|
973
980
|
this.toaster.success(result.message);
|
|
974
981
|
this.list.get();
|
|
982
|
+
this.selectedTable = [];
|
|
975
983
|
// 可能需要刷新表格或更新UI
|
|
976
984
|
}
|
|
977
985
|
else {
|
|
978
986
|
//删除失败的项
|
|
979
987
|
this.list.get();
|
|
980
988
|
// 可以选择展示失败项或重试
|
|
989
|
+
this.selectedTable = result.failedItems;
|
|
981
990
|
}
|
|
982
991
|
}
|
|
983
992
|
catch (error) {
|
|
@@ -1092,7 +1101,7 @@ class FileModalComponent {
|
|
|
1092
1101
|
this.isloading = true;
|
|
1093
1102
|
this._FileService
|
|
1094
1103
|
.update(input.id, {
|
|
1095
|
-
name: input.fileName
|
|
1104
|
+
name: input.fileName,
|
|
1096
1105
|
})
|
|
1097
1106
|
.pipe(finalize(() => {
|
|
1098
1107
|
this.isloading = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dignite-ng-expand.file-explorer.mjs","sources":["../../../../packages/file-explorer/src/lib/services/file-api.service.ts","../../../../packages/file-explorer/src/lib/previews/models.ts","../../../../packages/file-explorer/src/lib/previews/file-preview.component.ts","../../../../packages/file-explorer/src/lib/previews/file-preview.component.html","../../../../packages/file-explorer/src/lib/components/file-edit/file-edit.component.ts","../../../../packages/file-explorer/src/lib/components/file-edit/file-edit.component.html","../../../../packages/file-explorer/src/lib/proxy/dignite/file-explorer/files/file-descriptor.service.ts","../../../../packages/file-explorer/src/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.ts","../../../../packages/file-explorer/src/lib/components/file-modal-tree/file-modal-tree.component.ts","../../../../packages/file-explorer/src/lib/components/file-modal-tree/file-modal-tree.component.html","../../../../packages/file-explorer/src/lib/pipe/get-directory-name.pipe.ts","../../../../packages/file-explorer/src/lib/components/file-modal/file-modal.component.ts","../../../../packages/file-explorer/src/lib/components/file-modal/file-modal.component.html","../../../../packages/file-explorer/src/lib/components/file-picker/file-picker.component.ts","../../../../packages/file-explorer/src/lib/components/file-picker/file-picker.component.html","../../../../packages/file-explorer/src/lib/components/dome/file-dome.component.ts","../../../../packages/file-explorer/src/lib/components/dome/file-dome.component.html","../../../../packages/file-explorer/src/lib/file-explorer-routing.module.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-control.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-control.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-view.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-view.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/form-control-group.ts","../../../../packages/file-explorer/src/lib/file-explorer.module.ts","../../../../packages/file-explorer/src/public-api.ts","../../../../packages/file-explorer/src/dignite-ng-expand.file-explorer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileApiService {\n\n constructor() { }\n\n /**转换文件大小单位 输入k */\n formatFileSize(bytes: any) {\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let size:any = bytes;\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n // 保留两位小数,四舍五入\n size = size.toFixed(1)\n return `${size} ${units[unitIndex]}`;\n }\n /**获取图片的本地连接 */\n getImageLacolBase64Url(file: File) {\n return new Promise((resolve, rejects) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => {\n resolve(e.target.result)\n };\n reader.onerror = error => rejects(error);\n })\n }\n /**\n * 深拷贝--方法\n * $api.deepClone() */\n deepClone(obj) {\n if (typeof obj !== 'object' || obj === null) return obj;\n const result = Array.isArray(obj) ? [] : {};\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n if (obj[key] instanceof Date) {\n result[key] = new Date(obj[key].getTime());\n } else if (obj[key] instanceof RegExp) {\n result[key] = new RegExp(obj[key]);\n } else if (obj[key] instanceof File) {\n result[key]=obj[key]\n } else {\n result[key] = this.deepClone(obj[key]);\n }\n } else {\n result[key] = obj[key];\n }\n }\n }\n return result;\n }\n\n}\n","\r\n\r\nexport let ImageTypeOption=[{\r\n label:'',\r\n type:'image/jpeg',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/webp',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/gif',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/png',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/bmp',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'audio/ogg',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'video/mp4',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'application/pdf',\r\n icon:'fa fa-file-pdf-o',\r\n},{\r\n label:'',\r\n type:'application/msword',\r\n icon:'fa fa-file-word-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n icon:'fa fa-file-word-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.ms-powerpoint',\r\n icon:'fa fa-file-powerpoint-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n icon:'fa fa-file-powerpoint-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.ms-excel',\r\n icon:'fa fa-file-excel-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n icon:'fa fa-file-excel-o',\r\n},{\r\n label:'',\r\n type:'application/x-zip-compressed',\r\n icon:'fa fa-file-archive-o',\r\n},{\r\n label:'',\r\n type:'7z',\r\n icon:'fa fa-file-archive-o',\r\n},{\r\n label:'',\r\n type:'text/plain',\r\n icon:'fa fa-file-text-o',\r\n\r\n},{\r\n label:'',\r\n type:'',\r\n icon:'fa fa-file-o',\r\n}\r\n] ","import { AfterContentInit, Component, Input, TemplateRef } from '@angular/core';\nimport { ImageTypeOption } from './models';\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-preview',\n templateUrl: './file-preview.component.html',\n styleUrls: ['./file-preview.component.scss']\n})\nexport class FilePreviewComponent implements AfterContentInit{\n\n /**文件宽度 */\n @Input() width: any = '100px'\n /*文件链接 */\n @Input() src: any = ''\n /**是否支持大图预览 */\n @Input() preview: any = true;\n /**文件类型 */\n @Input() type: any = ''\n /**文件名称 */\n @Input() name: any = ''\n @Input() className: any = ''\n\n /**是否是文件 */\n isImage = true\n /**是否是视频 */\n isAudio = false\n /**是否是音频 */\n isVideo = false\n /**文件类型及图标 */\n _ImageTypeOption = ImageTypeOption\n\n\n constructor(\n private modalService: NgbModal\n ) { }\n \n ngAfterContentInit(): void {\n //Called after ngOnInit when the component's or directive's content has been initialized.\n //Add 'implements AfterContentInit' to the class.\n if (!this.type) {\n this.type = this.name.includes('.7z') ? '7z' : ''\n }\n this.isImage = this.type.includes('image/')\n this.isAudio = this.type.includes('audio/')\n this.isVideo = this.type.includes('video/')\n }\n\n /**预览图片 */\n previewImage() {\n\n }\n\n /**模态框实例 */\n modalRef!: NgbModalRef;\n\n /**放大倍数 */\n zoom: number = 10\n /**旋转 */\n rotate: number = 0\n\n\n /**打开预览弹窗 */\n OpenPreviewImage(content: TemplateRef<any>) {\n\n this.modalRef = this.modalService.open(content, {\n fullscreen: true,\n modalDialogClass: 'dignite-preview',\n });\n this.modalRef.result.then(\n (result) => {\n },\n (reason) => {\n this.zoom = 10\n },\n );\n }\n /**放大图像 */\n zoomIn() {\n let zoom = this.zoom\n if (zoom == 20) return\n zoom++\n this.zoom = zoom\n }\n /**缩小图像 */\n zoomOut() {\n let zoom = this.zoom\n if (zoom == 3) return\n zoom--\n this.zoom = zoom\n }\n /**右旋转 */\n RotateRight() {\n if (this.rotate == 360) return this.rotate = 0\n this.rotate += 90\n }\n}\n","<div class=\"image_box\" [style]=\"{width:width,maxWidth:'100%'}\">\n <div class=\"img_box\" [class]=\"className\" *ngIf=\"isImage\">\n <img [src]=\"src\" />\n <div class=\"option_box\" *ngIf=\"preview\">\n <i class=\"fa fa-eye \" (click.stop)=\"OpenPreviewImage(content)\"></i>\n </div>\n </div>\n <a [href]=\"src\" [download]=\"name\" target>\n <i class=\"fa fa-file-audio-o fs-1\" *ngIf=\"isAudio\"></i>\n <i class=\"fa fa-file-video-o fs-1\" *ngIf=\"isVideo\"></i>\n <ng-container *ngIf=\"!(isImage||isAudio||isVideo)\">\n <ng-container *ngFor=\"let item of _ImageTypeOption; let i=index\">\n <i class=\"fs-1\" [ngClass]=\"item.icon\" *ngIf=\"item.type===type\"></i>\n </ng-container>\n </ng-container>\n </a>\n</div>\n\n<ng-template #content let-modal>\n <div class=\"modal-header\">\n <div class=\"d-flex justify-content-end w-100 fs-3\">\n <i class=\"mx-2 fa fa fa-repeat\" aria-hidden=\"true\" title=\"右旋转\" role=\"button\" (click)=\"RotateRight()\"></i>\n <i class=\"mx-2 fa fa-search-minus\" aria-hidden=\"true\" title=\"缩小\" role=\"button\" (click)=\"zoomOut()\"></i>\n <i class=\"mx-2 fa fa-search-plus\" aria-hidden=\"true\" title=\"放大\" role=\"button\" (click)=\"zoomIn()\"></i>\n <i class=\"mx-2 fa fa-times\" aria-hidden=\"true\" role=\"button\" (click)=\"modal.dismiss('Cross click')\"></i>\n </div>\n </div> \n <div class=\"modal-body d-flex justify-content-center align-items-center \">\n <img width=\"400\" class=\"modal-body-preview\" [src]=\"src\" [style.transform]=\"'scale('+zoom/10+') rotate('+rotate+'deg)'\" >\n </div>\n</ng-template>","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\n\n@Component({\n selector: 'fe-file-edit',\n templateUrl: './file-edit.component.html',\n styleUrls: ['./file-edit.component.scss']\n})\nexport class FileEditComponent {\n constructor(\n public _FileApiService: FileApiService,\n ) { }\n\n /**是否多选 */\n _multiple: boolean = true\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n if (v) { }\n }\n /**文件数据--已上传的数据 */\n _fileData: any[] = []\n @Input()\n public set fileData(v: any[]) {\n this._fileData = v;\n if (v.length > 0) {\n this.getFileChange({ target: { files: v } })\n }\n }\n /** 跟随表单提交--已提交的数据,或选择的数据源--回调*/\n @Output() fileDataChange = new EventEmitter()\n\n /**文件大小限制 \n * @param 1mb\n */\n sizeLimit: number = 1048576\n @Input()\n public set limit(v: number) {\n this.sizeLimit = v;\n }\n\n /**文件表格数据 */\n filesTableData: any[] = []\n /** 待删除已上传的文件们*/\n deleteTheUploadedFiles: any[] = []\n\n /**获取文件选择框的元素 */\n @ViewChild('fileEdit', { static: true }) fileEdit: ElementRef;\n\n\n /**获取文件信息改变 */\n async getFileChange(event) {\n let files = new Array(...event.target.files)\n /**需要等待setfileSizeUnits执行完后在执行其他方法--需要完善 */\n await this.waitFileToAddTable(files)\n this.fileHandling()\n }\n\n /**等待将文件数据加入到文件表格数据中 */\n waitFileToAddTable(files) {\n return new Promise(async (resolve, rejects) => {\n this.filesTableData.push(...await this.setfileSizeUnits(files))\n resolve(true)\n })\n }\n\n /**删除文件表格的项 */\n deleteFileTableItem(index, item) {\n this.filesTableData.splice(index, 1)\n if (item.id) {\n this.deleteTheUploadedFiles.push(item)\n }\n this.fileHandling()\n }\n\n /**文件处理-调用回调函数 */\n fileHandling() {\n let theFilesToBeUploaded = this.filesTableData.filter(el => !el.id)\n //判断图片大小是否超过限制-用于判断表单是否允许提交\n let isSubmit = !this.filesTableData.some(el => el.size > this.sizeLimit);\n this.fileDataChange.emit({ theFilesToBeUploaded, deleteTheUploadedFiles: this.deleteTheUploadedFiles, isSubmit })\n }\n\n /**设置值文件大小单位/ */\n async setfileSizeUnits(files: File[] | any[]): Promise<any> {\n return new Promise((resolve, rejects) => {\n let formattedFiles = []\n files.forEach(async (file) => {\n file.fileSize = this._FileApiService.formatFileSize(file.size)\n formattedFiles.push(file)\n //设置选择图片的本地url\n if (!file.src) file.src = await this._FileApiService.getImageLacolBase64Url(file);\n });\n resolve(files)\n })\n }\n\n}\n","<div class=\"input-group mb-3\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" (change)=\"getFileChange($event)\">\n</div>\n\n<table class=\"table\" *ngIf=\"filesTableData.length>0\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of filesTableData;let i =index\">\n <tr>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.src\" [name]=\"item.name\" [type]=\"item.type\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name}}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' |\n abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}</div>\n </th>\n <td>{{item.fileSize}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>","import type { CreateFileInput, FileContainerConfigurationDto, FileDescriptorDto, GetFilesInput, ImageResizeInput, UpdateFileInput } from './models';\r\nimport { RestService, Rest } from '@abp/ng.core';\r\nimport type { ListResultDto, PagedResultDto } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\nimport type { FileResult } from '../../../microsoft/asp-net-core/mvc/models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileDescriptorService {\r\n apiName = 'FileExplorer';\r\n \r\n\r\n create = (input: CreateFileInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'POST',\r\n url: '/api/file-explorer/files',\r\n params: { containerName: input.containerName, cellName: input.cellName, directoryId: input.directoryId, entityId: input.entityId },\r\n body: input.file,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n delete = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/files/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n deleteByEntityId = (containerName: string, entityId: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/files/${containerName}/${entityId}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n download = (containerName: string, blobName: string, fileName: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileResult>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/download/${containerName}/${blobName}`,\r\n params: { fileName },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n get = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getFileContainerConfiguration = (containerName: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileContainerConfigurationDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${containerName}/configuration`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getList = (input: GetFilesInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, PagedResultDto<FileDescriptorDto>>({\r\n method: 'GET',\r\n url: '/api/file-explorer/files',\r\n params: { containerName: input.containerName, directoryId: input.directoryId, creatorId: input.creatorId, filter: input.filter, entityId: input.entityId, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getListByEntityId = (containerName: string, entityId: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, ListResultDto<FileDescriptorDto>>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${containerName}/${entityId}/all`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getStream = (containerName: string, blobName: string, imageResize?: ImageResizeInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, Blob>({\r\n method: 'GET',\r\n responseType: 'blob',\r\n url: `/api/file-explorer/files/${containerName}/${blobName}`,\r\n params: { width: imageResize.width, height: imageResize.height },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n update = (id: string, input: UpdateFileInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/files/${id}`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","import type { CreateDirectoryInput, DirectoryDescriptorDto, DirectoryDescriptorInfoDto, GetDirectoriesInput, MoveDirectoryInput, UpdateDirectoryInput } from './models';\r\nimport { RestService, Rest } from '@abp/ng.core';\r\nimport type { PagedResultDto } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileDescriptorService {\r\n apiName = 'FileExplorer';\r\n \r\n\r\n create = (input: CreateDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'POST',\r\n url: '/api/file-explorer/directories',\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n delete = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/directories/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n get = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/directories/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getList = (input: GetDirectoriesInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, PagedResultDto<DirectoryDescriptorInfoDto>>({\r\n method: 'GET',\r\n url: '/api/file-explorer/directories',\r\n params: { containerName: input.containerName },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n move = (id: string, input: MoveDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/directories/${id}/move`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n update = (id: string, input: UpdateDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/directories/${id}`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","/* eslint-disable @angular-eslint/component-selector */\nimport {\n AfterContentInit,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { NzFormatEmitEvent, NzTreeNode } from 'ng-zorro-antd/tree';\nimport * as DescriptorService from '../../proxy/dignite/file-explorer/directories';\nimport { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';\nimport { NzFormatBeforeDropEvent } from 'ng-zorro-antd/tree';\nimport { finalize, map, of, tap } from 'rxjs';\nimport { FileApiService } from '../../services/file-api.service';\nimport { LocalizationService } from '@abp/ng.core';\nimport { ValidatorsService } from '@dignite-ng/expand.core';\nvar that;\n@Component({\n selector: 'fe-file-modal-tree',\n templateUrl: './file-modal-tree.component.html',\n styleUrls: ['./file-modal-tree.component.scss'],\n})\nexport class FileModalTreeComponent implements AfterContentInit {\n constructor(\n private _DescriptorService: DescriptorService.FileDescriptorService,\n private fb: FormBuilder,\n private toaster: ToasterService,\n public _FileApiService: FileApiService,\n public _LocalizationService: LocalizationService,\n private confirmation: ConfirmationService,\n ) {\n that = this;\n }\n\n /**文件分组列表 */\n fileGroupList: any[] = [];\n\n /**选择的tree节点 */\n _theSelectedTreeNode: any = '';\n @Input()\n public set theSelectedTreeNode(v: any) {\n this._theSelectedTreeNode = v;\n\n if (v == '') {\n this.loadData();\n }\n }\n\n /**正在编辑的节点 */\n theNodeBeingEdited: any = '';\n\n /**已展开的节点 */\n anExpandedNode: any[] = [];\n\n /**图片容器 */\n _fileContainerName: string;\n\n /**tree节点选择回调 */\n @Output() nodeClick = new EventEmitter();\n /**获取数据后回调给file-modal */\n @Output() treeNodeData = new EventEmitter();\n /**查看所有文件回调函数,在file-modal中处理逻辑 */\n @Output() lookAllBtn = new EventEmitter();\n\n @Input()\n public set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n // this.loadData();\n }\n }\n ngAfterContentInit(): void {\n //Called after ngOnInit when the component's or directive's content has been initialized.\n //Add 'implements AfterContentInit' to the class.\n if (this._fileContainerName) {\n this.loadData();\n }\n }\n\n handleClick = event => event.stopPropagation();\n\n loadData() {\n if (this._fileContainerName) {\n this.getFileGroupList();\n }\n }\n\n /**获取文件分组 */\n getFileGroupList() {\n this._DescriptorService\n .getList({\n containerName: this._fileContainerName,\n })\n .subscribe(async res => {\n this.fileGroupList = await this.setTheValueOfTheNodeRecursively(res.items);\n this.treeNodeData.emit(this.fileGroupList);\n });\n }\n\n /**查看所有文件 */\n onLookAllBtn() {\n this.lookAllBtn.emit();\n }\n\n /**递归-将列表转化为父子级结构 */\n setTheValueOfTheNodeRecursively(array: any[], parentId: any = null, root?: any[]): any {\n let rootList = root || array;\n let result = array.filter(item => item.parentId === parentId);\n result.sort((a, b) => a.order - b.order);\n result.map((el: any) => {\n el.title = el.name;\n el.key = el.id;\n el.entity = el.id; /** 节点值 */\n el.expanded = this.anExpandedNode.includes(el.key);\n el.children.sort((a, b) => a.order - b.order);\n if (el.children.length > 0) {\n this.setTheValueOfTheNodeRecursively(el.children, el.id, rootList);\n }\n });\n return result;\n }\n\n /**tree-拖拽 */\n nzEvent(event: NzFormatEmitEvent): void {}\n\n /**tree-拖拽 -验证*/\n beforeDrop(arg: NzFormatBeforeDropEvent) {\n const { pos, dragNode, node } = arg;\n // 只处理有效的拖拽位置\n if (pos === 0 || pos === 1 || pos === -1) {\n // 根据不同的拖拽位置计算参数\n const parentId = pos === 0 ? node.key : node.parentNode?.key || '';\n\n let order;\n if (pos === 1) {\n order = node.origin.order + 1;\n } else if (pos === 0) {\n order = node.origin.children.length + 1;\n } else {\n // pos === -1\n order = Math.max(0, node.origin.order - 1);\n }\n // 统一处理移动逻辑\n return that._DescriptorService.move(dragNode.key, { parentId, order }).pipe(\n tap(() => that.getFileGroupList()),\n map(() => true)\n );\n }\n\n return of(false);\n }\n\n selectedNode: NzTreeNode[] = [];\n /**tree--选择节点 */\n activeNode(node: NzTreeNode) {\n if ((event as any)?.target?.localName == 'i') return;\n if (this._theSelectedTreeNode?.key == node.key) return;\n this.selectedNode = [node];\n this._theSelectedTreeNode = node;\n this.nodeClick.emit(node);\n }\n\n /**判断节点是否选中 */\n isNodeSelected = el => {\n return el.key === this._theSelectedTreeNode?.key;\n };\n\n /**点击展开树节点图标触发 */\n nzExpandChange(event) {\n let anExpandedNode = this.anExpandedNode;\n if (anExpandedNode.includes(event.node.key)) {\n anExpandedNode = anExpandedNode.filter(key => key !== event.node.key);\n } else {\n anExpandedNode.push(event.node.key);\n }\n this.anExpandedNode = anExpandedNode;\n }\n\n /**增加分组 */\n addDescriptorBtn(items: any = '', edit = false) {\n this.ModalDescriptorOpen = true;\n this.ModalDescriptorForm = this.fb.group({\n containerName: [this._fileContainerName || '', Validators.required],\n name: ['', Validators.required],\n parentId: [items?.key || ''],\n });\n /**编辑 */\n if (edit) {\n this.theNodeBeingEdited = items.origin;\n this.ModalDescriptorForm.patchValue({\n name: items.origin.name,\n });\n }\n }\n\n /**删除分组 */\n deleteDescriptorBtn(node) {\n this.confirmation\n .warn('', {\n key: '',\n defaultValue: this._LocalizationService.instant(`FileExplorer::DeletionConfirmationMessage`,node.title),\n })\n .subscribe((status: Confirmation.Status) => {\n if (status == 'confirm') {\n this._DescriptorService.delete(node.key).subscribe(res => {\n this.ModalDescriptorOpen = false;\n if (this.theNodeBeingEdited.key == node.key) this.theNodeBeingEdited = '';\n this.getFileGroupList();\n });\n }\n });\n }\n\n /**分组 */\n /**模态框-状态-是否打开 */\n ModalDescriptorOpen: boolean = false;\n\n /**模态框-descriptor-繁忙状态-用于确定模态的繁忙状态是否为真 */\n ModalDescriptorBusy: boolean = false;\n\n /**模态框-descriptor-表单 */\n ModalDescriptorForm: FormGroup | undefined;\n\n /**模态框-descriptor-表单--控件模板-动态赋值表单控件 */\n @ViewChild('ModalFormDescriptorSubmit', { static: false }) ModalFormDescriptorSubmit: ElementRef;\n\n /**模态框-descriptor-状态改变回调 */\n ModalDescriptorVisibleChange(event) {\n if (!event) {\n this.ModalDescriptorForm = undefined;\n this.theNodeBeingEdited = '';\n return;\n }\n }\n formValidation: any = '';\n private _ValidatorsService = inject(ValidatorsService);\n /**f分组模态框保存 */\n createOrEditSave() {\n let input = this.ModalDescriptorForm.value;\n this.formValidation = this._ValidatorsService.getFormValidationStatus(this.ModalDescriptorForm);\n if (this._ValidatorsService.isCheckForm(this.formValidation, 'FileExplorer')) return;\n if (!this.ModalDescriptorForm.valid) return;\n if (this.ModalDescriptorBusy) return;\n this.ModalDescriptorBusy = true;\n\n if (this.theNodeBeingEdited) {\n this._DescriptorService\n .update(this.theNodeBeingEdited.key, input)\n .pipe(\n finalize(() => {\n this.ModalDescriptorBusy = false;\n })\n )\n .subscribe(res => {\n this.ModalDescriptorOpen = false;\n this.ModalDescriptorVisibleChange(false);\n this.getFileGroupList();\n });\n return;\n }\n this._DescriptorService\n .create(input)\n .pipe(\n finalize(() => {\n this.ModalDescriptorBusy = false;\n })\n )\n .subscribe(res => {\n this.ModalDescriptorOpen = false;\n this.ModalDescriptorVisibleChange(false);\n this.getFileGroupList();\n });\n }\n}\n","<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'getDirectoryName',\r\n standalone: true\r\n})\r\nexport class GetDirectoryNamePipe implements PipeTransform {\r\n\r\n transform(value: unknown, ...args: any[]): unknown {\r\n if(value){\r\n return args[0].find(el=>el.id==value)?.name\r\n }\r\n return '';\r\n }\r\n\r\n}\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges, inject, OnChanges } from '@angular/core';\nimport * as FileService from '../../proxy/dignite/file-explorer/files';\nimport { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';\nimport {\n PagedResultDto,\n ABP,\n ListService,\n Rest,\n RestService,\n LocalizationService,\n LIST_QUERY_DEBOUNCE_TIME,\n} from '@abp/ng.core';\nimport {\n FileDescriptorDto,\n FileDescriptorService,\n GetFilesInput,\n} from '../../proxy/dignite/file-explorer/files';\nimport { FileApiService } from '../../services/file-api.service';\nimport { SelectionType } from '@swimlane/ngx-datatable';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-modal',\n templateUrl: './file-modal.component.html',\n styleUrls: ['./file-modal.component.scss'],\n providers: [\n // [Required]\n ListService,\n // [Optional]\n // Provide this token if you want a different debounce time.\n // Default is 300. Cannot be 0. Any value below 100 is not recommended.\n { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },\n ],\n})\nexport class FileModalComponent implements OnChanges {\n constructor(\n private _FileService: FileService.FileDescriptorService,\n private toaster: ToasterService,\n public readonly list: ListService,\n public _FileApiService: FileApiService,\n private restService: RestService,\n private confirmation: ConfirmationService,\n private _LocalizationService: LocalizationService\n ) {\n }\n\n private _FileDescriptorService = inject(FileDescriptorService);\n /**获取目录配置 */\n getFilesConfiguration() {\n return new Promise((resolve, reject) => {\n this._FileDescriptorService\n .getFileContainerConfiguration(this._fileContainerName)\n .subscribe(res => {\n this.createDirectoryPermissionName = res?.createDirectoryPermissionName;\n resolve(res);\n });\n });\n }\n /**目录的权限名称 */\n createDirectoryPermissionName: string = null;\n\n /**图片容器 */\n _fileContainerName: string;\n @Input()\n public set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n // this.loadData()\n }\n }\n\n /**是否多选 */\n _multiple = false;\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n }\n\n /**文件大小限制\n * @param 1mb\n */\n sizeLimit = 1048576;\n @Input()\n public set limit(v: number) {\n this.sizeLimit = v;\n }\n /**父组件传递的模态框状态 */\n @Input()\n public set visible(v: boolean) {\n this.ModalOpen = v;\n if (v) {\n this.loadData();\n }\n }\n\n /**模态框状态回调 */\n @Output() visibleChange = new EventEmitter();\n\n /**模态框-状态-是否打开 */\n ModalOpen = false;\n\n /**模态框-繁忙状态-用于确定模态的繁忙状态是否为真 */\n ModalBusy = false;\n\n /**模态框-状态改变回调 */\n ModalVisibleChange(event) {\n if (!event) {\n this.ModalOpen = false;\n this.ModalBusy = false;\n this.visibleChange.emit(event);\n this.createDirectoryPermissionName = '';\n this._theSelectedTreeNode = '';\n this.selectedTable = [];\n this.uploadPictureStatusList = [];\n return;\n }\n }\n\n /**模态框保存 */\n modalSave() {\n const selectedTablearr = this._FileApiService.deepClone(this.selectedTable);\n this.selectFilefn.emit(selectedTablearr);\n this.ModalVisibleChange(false);\n }\n /**dignite-file-modal-tree */\n /**选择的tree节点 */\n _theSelectedTreeNode: any = '';\n isCreateList = false;\n /**初始化数据 */\n loadData() {\n if (this.ModalOpen && this._fileContainerName) {\n this.list.maxResultCount = 100;\n // this.filters.skipCount = 0;\n this.getFilesConfiguration();\n if (!this.isCreateList) {\n this.hookToQuery();\n this.isCreateList = true;\n } else {\n this.list.get();\n }\n }\n }\n /** 从tree获取来的数据 */\n fileGroupList: any[] = [];\n /** 从tree获取数据 */\n treeNodeData(event) {\n this.fileGroupList = this.flattenNestedArray(event);\n }\n /**\n * 将嵌套数组扁平化\n * @param {Array} nestedArray - 包含嵌套children的数组\n * @returns {Array} - 扁平化后的数组\n */\n flattenNestedArray(nestedArray) {\n const result = [];\n\n function flatten(items) {\n if (!items) return;\n\n for (const item of items) {\n // 将当前项添加到结果数组\n result.push({ ...item });\n\n // 如果有children属性且是数组,递归处理\n if (item.children && Array.isArray(item.children)) {\n flatten(item.children);\n }\n }\n }\n\n flatten(nestedArray);\n return result;\n }\n\n /**tree-节点选择 */\n _nodeClick(event) {\n this.filters.skipCount = 0;\n this._theSelectedTreeNode = event;\n this.list.get();\n }\n\n /**图片上传-要上传图片的状态文件列表 */\n uploadPictureStatusList: any[] = [];\n\n /**图片上传-获取文件信息改变 */\n async getFileChange(event) {\n const files = new Array(...event.target.files);\n this.uploadPictureStatusList = files;\n for (const file of files) {\n if (file.size > this.sizeLimit) {\n this.setuploadPictureStatus(file, 2);\n continue;\n }\n await this.uploadingFile(file)\n .then(res => {\n this.selectedTable.push(res);\n this.setuploadPictureStatus(file, 1);\n // this.list.get()\n })\n .catch(() => {\n this.setuploadPictureStatus(file, 2);\n }); // 等待每个文件上传完成\n }\n this.list.get();\n const isSubmit = !this.uploadPictureStatusList.some(el => el.status == 2);\n if (isSubmit) {\n // this.toaster.success(\"上传完成\");\n setTimeout(() => {\n this.uploadPictureStatusList = [];\n }, 4000);\n }\n }\n\n /**图片上传-设置uploadPictureStatusList的状态 */\n setuploadPictureStatus(file, type) {\n this.uploadPictureStatusList.map(el => {\n if (el == file) el.status = type;\n });\n }\n\n /**图片上传-递归按顺序上传 */\n uploadingFile(file) {\n return new Promise((resolve, rejects) => {\n const formData = new FormData();\n formData.append('file', file, file.name);\n this.createFile({\n file: formData,\n containerName: this._fileContainerName,\n directoryId: this._theSelectedTreeNode?.key || '',\n entityId: '',\n }).subscribe(\n res => {\n resolve(res);\n },\n err => {\n rejects(false);\n }\n );\n });\n }\n\n /**文件表格-数据*/\n data: PagedResultDto<FileDescriptorDto> = {\n items: [],\n totalCount: 0,\n };\n\n /**文件表格-条件*/\n filters = {} as GetFilesInput;\n\n /**文件表格-表格自带选择类型 */\n SelectionType = SelectionType;\n\n /**选择文件回调 */\n @Output() selectFilefn = new EventEmitter<any[]>();\n\n /**文件表格-获取表格数据 */\n hookToQuery() {\n const getData = (query: ABP.PageQueryParams) =>\n this._FileService.getList({\n ...query,\n ...this.filters,\n containerName: this._fileContainerName,\n directoryId: this._theSelectedTreeNode.key,\n });\n const setData = (list: PagedResultDto<FileDescriptorDto>) => {\n this.data = list;\n this.onPageChange(list.items);\n };\n this.list.hookToQuery(getData).subscribe(setData);\n }\n\n /**文件表格-查看所有分组的文件数据 */\n lookAllFile() {\n this.filters.skipCount = 0;\n this._theSelectedTreeNode = '';\n this.list.get();\n }\n\n /**删除图片 */\n deleteFile(file) {\n this._FileService.delete(file.id).subscribe(res => {\n this.toaster.success(this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`));\n this.list.get();\n });\n }\n\n /**删除所有选中图片 */\n onDeleteAllSelectFile() {\n this.confirmation\n .warn('', {\n key: '',\n defaultValue: this._LocalizationService.instant(`FileExplorer::AreYouSure`),\n })\n .subscribe(async (status: Confirmation.Status) => {\n if (status == 'confirm') {\n const selectedTable = this.selectedTable;\n try {\n const result = await this.batchDeleteItems(selectedTable);\n if (result.success) {\n this.toaster.success(result.message);\n this.list.get();\n // 可能需要刷新表格或更新UI\n } else {\n //删除失败的项\n this.list.get();\n // 可以选择展示失败项或重试\n }\n } catch (error) {\n //批量删除过程中发生错误\n }\n }\n });\n }\n\n /**\n * 批量删除表格项\n * @param selectedTable 需要删除的表格项数组\n * @returns 包含成功状态和失败项的结果对象\n */\n async batchDeleteItems(selectedTable: any[]) {\n // 存储所有删除请求的Promise\n const deletePromises = selectedTable.map(item => {\n return new Promise((resolve, reject) => {\n this._FileService.delete(item.id).subscribe(\n () => {\n resolve(null);\n },\n () => {\n reject(item);\n }\n );\n });\n });\n\n // 等待所有请求完成\n const results = await Promise.allSettled(deletePromises);\n // 收集失败的项\n const failedItems: any[] = [];\n results.forEach(result => {\n if (result.status === 'rejected') {\n failedItems.push(result.reason);\n }\n });\n\n return {\n success: failedItems.length === 0,\n failedItems,\n message:\n failedItems.length === 0\n ? this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`)\n : `${failedItems.length}个项删除失败`,\n };\n }\n\n // 使用示例\n async handleBatchDelete() {}\n\n /**关闭文件状态弹窗 */\n closeFileStatusModal() {\n this.uploadPictureStatusList = [];\n }\n\n /**创建图片的接口,代理中的file类型不匹配,切换为any类型 */\n createFile = (input: any, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileDescriptorDto>(\n {\n method: 'POST',\n url: '/api/file-explorer/files',\n params: {\n containerName: input.containerName,\n cellName: input.cellName,\n directoryId: input.directoryId,\n entityId: input.entityId,\n },\n body: input.file,\n },\n { apiName: 'FileExplorer', ...config }\n );\n\n /**文件表格-选择的表格数据项 */\n selectedTable = [];\n /**当前选择的table项 id */\n nowSelectId: any = '';\n /**是否全选 */\n isAllSelected = false;\n\n /**已选定的文件 */\n @Input() selectPickerFile: any[];\n\n ngOnChanges(changes: SimpleChanges): void {\n //Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.\n //Add '${implements OnChanges}' to the class.\n this.selectedTable = this._FileApiService.deepClone(this.selectPickerFile);\n }\n /**表格分页切换 */\n onPageChange(newArray) {\n this.isAllSelected = this.isAllSelectedFn(newArray, this.selectedTable);\n }\n /**行选择框改变 */\n onCheckboxChangeFn(event, row, array: any[]) {\n const { checked } = event.target;\n let selectedTableArray = [...this.selectedTable];\n if (this._multiple) {\n if (checked) {\n selectedTableArray.push(row);\n } else {\n selectedTableArray = selectedTableArray.filter(el => el.id != row.id);\n }\n this.isAllSelected = this.isAllSelectedFn(array, selectedTableArray);\n } else {\n selectedTableArray.length = 0;\n selectedTableArray = checked ? [row] : [];\n }\n this.selectedTable = this.removeDuplicatesById(selectedTableArray);\n }\n /**如果selectedTableArray不含array中的所有项,则将isAllSelected设为true,否则设为false */\n isAllSelectedFn(tolalArray: any[], selectedArray: any[] = []) {\n if(tolalArray.length == 0) return false;\n return tolalArray.every(item => selectedArray.some(el => el.id === item.id));\n }\n /**选择当前页全部 */\n onSelectAllFn(event: any, array: any[]) {\n let selectedTableArray = this.selectedTable;\n if (event.target.checked) {\n selectedTableArray = this.removeDuplicatesById([...selectedTableArray, ...array]);\n } else {\n selectedTableArray = selectedTableArray.filter(el => !array.some(item => item.id === el.id));\n }\n this.isAllSelected = event.target.checked;\n this.selectedTable = selectedTableArray;\n }\n\n /**判断row是否选中 */\n selectedcheckbox = id => {\n return this.selectedTable.some(el => el.id === id);\n };\n /**删除数组中重复的项 */\n removeDuplicatesById(array) {\n const seenIds = {};\n return array.filter(item => {\n if (!seenIds[item.id]) {\n seenIds[item.id] = true;\n return true;\n }\n return false;\n });\n }\n /**用于编辑的表单,同时只能显示编辑一个 */\n FileNameForm: FormGroup | any;\n /**当前编辑的row */\n newEditRow: any = '';\n /**是否正在加载 */\n isloading = false;\n /**提交FileName编辑 */\n onSubmitFileName(event) {\n const input = this.FileNameForm.value;\n if (!this.FileNameForm.valid) return;\n if (this.isloading) return;\n this.isloading = true;\n this._FileService\n .update(input.id, {\n name:input.fileName\n })\n .pipe(\n finalize(() => {\n this.isloading = false;\n })\n )\n .subscribe(res => {\n //通过当前newEditRow的id,修改data.items中对应项的name\n for (const element of this.data.items) {\n if (element.id == this.newEditRow.id) {\n element.name = input.fileName;\n break;\n }\n }\n\n this.FileNameForm = undefined;\n this.newEditRow = '';\n this.toaster.success(this._LocalizationService.instant(`FileExplorer::SavedSuccessfully`));\n // this.list.get();\n });\n }\n /**打开编辑 */\n onEditFileName(row) {\n this.FileNameForm = new FormGroup({\n fileName: new FormControl('', [Validators.required]),\n id: new FormControl('', [Validators.required]),\n });\n this.FileNameForm.patchValue({\n fileName: row.name,\n id: row.id,\n });\n this.newEditRow = row;\n }\n /**关闭编辑 */\n onCancelFileName(row) {\n this.newEditRow = '';\n this.FileNameForm = undefined;\n }\n}\n","<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\" *ngIf=\"ModalOpen\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n (lookAllBtn)=\"lookAllFile()\" (treeNodeData)=\"treeNodeData($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-3 d-flex justify-content-between align-items-center\">\n <div style=\"flex: 2\"><span *ngIf=\"selectedTable.length>1\" class=\"btn-link\"\n (click.stop)=\"onDeleteAllSelectFile()\" role=\"button\">{{'FileExplorer::Delete' | abpLocalization}}</span>\n </div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" (change)=\"getFileChange($event)\" />\n </div>\n </div>\n <div>\n <!-- [selectionType]=\"_multiple?SelectionType.checkbox:SelectionType.single\" -->\n <!-- [selectCheck]=\"selectCheck\" -->\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\" columnMode=\"flex\"\n [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\" [virtualization]=\"false\"\n [externalPaging]=\"true\" [count]=\"data.totalCount\">\n <ngx-datatable-column [width]=\"50\" prop=\"id\" [sortable]=\"false\" [canAutoResize]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n <input type=\"checkbox\" class=\"form-check-input\" *ngIf=\"_multiple\" [checked]=\"isAllSelected\"\n (change)=\"onSelectAllFn($event,data.items)\" />\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"selectedcheckbox(value)\"\n (change)=\"onCheckboxChangeFn($event,row,data.items)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [sortable]=\"false\" [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <fe-file-preview [width]=\"'80px'\" [src]=\"row.url\" [name]=\"row.name\" [type]=\"row.mimeType\"\n [preview]=\"true\"></fe-file-preview>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileName' | abpLocalization\" prop=\"name\" [sortable]=\"false\"\n [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div class=\"d-flex align-items-start titlehover\" *ngIf=\"newEditRow.id!==row.id\">\n <span class=\"me-2\">{{ value }}</span>\n <i class=\"fa fa-pencil-square-o\" role=\"button\" (click.stop)=\"onEditFileName(row)\" style=\"line-height:2;\" aria-hidden=\"true\"></i>\n </div>\n <div *ngIf=\"FileNameForm&&newEditRow.id===row.id\">\n <form [formGroup]=\"FileNameForm\" (ngSubmit)=\"onSubmitFileName($event)\">\n <div class=\"d-flex align-items-start\">\n <div class=\"me-2\">\n <input class=\"form-control \" type=\"text\" formControlName=\"fileName\">\n </div>\n <button class=\" btn btn-sm\" type=\"submit\">\n <i class=\"fa-spin fa fa-spinner\" *ngIf=\"isloading\"></i>\n <i class=\"fa fa-check\" aria-hidden=\"true\" *ngIf=\"!isloading\"></i></button>\n <button class=\" btn btn-sm\" (click.stop)=\"onCancelFileName(row)\"><i class=\"fa fa-times\" type=\"reset\" aria-hidden=\"true\"></i></button>\n \n </div>\n </form>\n </div>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ _FileApiService.formatFileSize(value) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::Directory' | abpLocalization\" prop=\"directoryId\"\n [sortable]=\"false\" [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value|getDirectoryName:fileGroupList }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::CreationTime' | abpLocalization\" prop=\"creationTime\"\n [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'YYYY/MM/dd HH:mm:s' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"1\" [sortable]=\"false\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <button class=\"btn btn-sm btn-light p-0\" (click.stop)=\"deleteFile(row)\">\n <i class=\"fas fa-trash text-primary p-2\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n <div *ngIf=\"uploadPictureStatusList.length > 0\"\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\" style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'FileExplorer::UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of uploadPictureStatusList; let i = index\">\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' |\n abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}\n </div>\n </th>\n <td>{{ item.fileSize }}</td>\n <td>\n <i *ngIf=\"item.status === 1\" class=\"fas fa-check text-primary\"></i>\n <i *ngIf=\"item.status === 2\" class=\"fas fa-times-circle text-danger\"></i>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"modalSave()\">{{'FileExplorer::Confirm' | abpLocalization}}\n @if(selectedTable.length>0){\n ({{selectedTable.length}})\n }\n </abp-button>\n </ng-template>\n</abp-modal>","/* eslint-disable @angular-eslint/component-selector */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'fe-file-picker',\n templateUrl: './file-picker.component.html',\n styleUrls: ['./file-picker.component.scss']\n})\nexport class FilePickerComponent implements OnChanges {\n\n\n\n constructor(\n private _FileApiService: FileApiService,\n ) {\n\n }\n\n\n /**是否多选 */\n _multiple: boolean = false\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n }\n\n /**图片容器 */\n _fileContainerName: string = 'Images'\n @Input()\n public set fileContainerName(v: string) {\n this._fileContainerName = v;\n }\n\n /**已选定的文件 */\n @Input() selectFormFile: any[]\n\n ngOnChanges(changes: SimpleChanges): void {\n let selectFormFilengOnChanges = changes.selectFormFile['currentValue']\n if (selectFormFilengOnChanges.length > 0) {\n this._fileShowTable = selectFormFilengOnChanges\n }\n }\n\n @Output() selectedFileChange = new EventEmitter()\n\n _fileShowTable: any[] = []\n\n /**表格选择的文件回调 */\n _selectFilefn(event: any[]) {\n let _fileShowTable = this._FileApiService.deepClone(event)\n this._fileShowTable = _fileShowTable\n this.selectFormFile = _fileShowTable\n this.selectedFileChange.emit(_fileShowTable)\n }\n\n /**模态框-状态-是否打开 */\n ModalOpen: boolean = false\n\n /**删除文件表格项 */\n deleteFileTableItem(i, file) {\n this._fileShowTable.splice(i, 1)\n this.selectFormFile = this._fileShowTable\n this.selectedFileChange.emit([])\n this.selectedFileChange.emit(this.selectFormFile)\n }\n /**调整表格位置 */\n drop(event: any) {\n moveItemInArray(\n this._fileShowTable,\n event.previousIndex,\n event.currentIndex\n );\n this.selectFormFile = this._fileShowTable\n this.selectedFileChange.emit(this.selectFormFile)\n // this._fileShowTable.updateValueAndValidity()\n }\n}\n","<button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>","import { Component, inject } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-dome',\n templateUrl: './file-dome.component.html',\n styleUrls: ['./file-dome.component.scss']\n})\nexport class FileDomeComponent {\n\n /**跟随表单提交--已提交的数据,或选择的数据源 */\n fileSubmittedData: any[] = []\n\n /**跟随表单提交--待提交的数据\n * \n * @param 待上传的文件们\n * @param 待删除已上传的文件们\n */\n fileDataToBeSubmitted: any\n\nprivate FileApiService=inject(FileApiService)\n /**跟随表单提交--数据发生改变回调 */\n fileDataChange(event) {\n this.fileDataToBeSubmitted = event\n }\n\n /**选择文件-弹窗的-已选定的文件 */\n selectedFileGroup:any[]=[]\n\n /**_selectedFile改变回调 */\n _selectedFileChange(event) {\n this.selectedFileGroup = event\n }\n}\n","<div class=\"row\">\r\n <div class=\"col\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-2 border-bottom\">Send file stream with form</div>\r\n <div class=\"card-body\">\r\n <fe-file-edit [(fileData)]=\"fileSubmittedData\" (fileDataChange)=\"fileDataChange($event)\"></fe-file-edit>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-2 border-bottom\">Send file stream with form</div>\r\n <div class=\"card-body\">\r\n <fe-file-picker [selectFormFile]=\"selectedFileGroup\" fileContainerName=\"SampleContainer\" (selectedFileChange)=\"_selectedFileChange($event)\" ></fe-file-picker>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { FileDomeComponent } from './components/dome/file-dome.component';\n\nconst routes: Routes = [\n {\n path: 'file-dome',\n component: FileDomeComponent\n},\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class FileExplorerRoutingModule { \n \n}\n","import { FormControl, Validators } from \"@angular/forms\";\r\n\r\nexport class FileExplorerConfig {\r\n\r\n\r\n /**文件容器名称 */\r\n 'FileExplorer.FileContainerName': any = ['', [Validators.required]];\r\n /**多选 */\r\n 'FileExplorer.UploadFileMultiple': any = [false, []];\r\n \r\n\r\n constructor(data?: FileExplorerConfig) {\r\n if (data) {\r\n for (const key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n this[key] = data[key];\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n}","import { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FileExplorerConfig } from './file-explorer-config';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-explorer-config',\n templateUrl: './file-explorer-config.component.html',\n styleUrls: ['./file-explorer-config.component.scss']\n})\nexport class FileExplorerConfigComponent {\n constructor(\n private fb: FormBuilder,\n ) { }\n /**表单控件类型 */\n _type: any\n @Input()\n public set type(v: any) {\n this._type = v\n this.dataLoaded()\n }\n /**表单实体 */\n _Entity: FormGroup | undefined\n @Input()\n public set Entity(v: FormGroup) {\n this._Entity = v;\n this.dataLoaded()\n }\n /**选择的表单信息 */\n _selected: any\n @Input()\n public set selected(v: any) {\n this._selected = v\n\n this.dataLoaded()\n }\n get formConfiguration() {\n return this._Entity.get('formConfiguration') as FormGroup\n }\n @ViewChild('submitclick', { static: true }) submitclick: ElementRef;\n\n private cdr = inject(ChangeDetectorRef);\n async dataLoaded() {\n if (this._Entity && this._type) {\n await this.AfterInit();\n this.cdr.detectChanges(); // 手动触发变更检测\n this.submitclick?.nativeElement?.click();\n }\n }\n\n AfterInit() {\n return new Promise((resolve, rejects) => {\n this._Entity.setControl('formConfiguration', this.fb.group(new FileExplorerConfig()))\n if (this._selected && this._selected.formControlName == this._type) {\n this.formConfiguration.patchValue({\n ...this._selected.formConfiguration\n })\n }\n resolve(true)\n })\n }\n}\n","<form [formGroup]=\"_Entity\">\n <div formGroupName=\"formConfiguration\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'DigniteAbpDynamicFormsFileExplorer::FileContainerName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"FileExplorer.FileContainerName\">\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"FileExplorer.UploadFileMultiple\" id=\"flexRadioDefault1\">\n <label class=\"form-check-label\" for=\"flexRadioDefault1\">\n {{'DigniteAbpDynamicFormsFileExplorer::UploadFileMultiple' | abpLocalization}}\n </label>\n </div>\n </div>\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\n #submitclick></button>\n </div>\n</form>","import { ConfigStateService, EnvironmentService } from '@abp/ng.core';\nimport { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-explorer-control',\n templateUrl: './file-explorer-control.component.html',\n styleUrls: ['./file-explorer-control.component.scss'],\n})\nexport class FileExplorerControlComponent {\n constructor(private fb: FormBuilder) {}\n\n /**表单实体 */\n _entity: FormGroup | any;\n @Input()\n public set entity(v: any) {\n this._entity = v;\n if (v) this.dataLoaded();\n }\n\n /**字段配置列表 */\n _fields: any = '';\n @Input()\n public set fields(v: any) {\n this._fields = v;\n if (v) this.dataLoaded();\n }\n\n /**父级字段名称,用于为表单设置控件赋值 */\n _parentFiledName: any;\n @Input()\n public set parentFiledName(v: any) {\n this._parentFiledName = v;\n if (v) this.dataLoaded();\n }\n\n /**父级字段名称,用于为表单设置控件赋值 */\n _selected: any;\n @Input()\n public set selected(v: any) {\n this._selected = v;\n \n if (v && v.length > 0) this.dataLoaded();\n }\n\n @ViewChild('submitclick', { static: true }) submitclick: ElementRef;\n\n get extraProperties() {\n return this._entity.get('extraProperties') as FormGroup;\n }\n private cdr = inject(ChangeDetectorRef);\n /**数据加载完成 */\n async dataLoaded() {\n if (this._fields && this._entity && this._parentFiledName) {\n await this.AfterInit();\n this.cdr.detectChanges(); // 手动触发变更检测\n this.submitclick?.nativeElement?.click();\n }\n }\n\n /**字段配置 */\n formConfiguration: any = '';\n /**文件容器名称 */\n FileContainerName: any = '';\n AfterInit() {\n return new Promise((resolve, rejects) => {\n let ValidatorsArray:any = [];\n if (this._fields.required) {\n ValidatorsArray.push(Validators.required);\n }\n this.formConfiguration = this._fields.field.formConfiguration;\n this.FileContainerName = this.formConfiguration['FileExplorer.FileContainerName'];\n if (this._selected && this._selected.length > 0) {\n this._selected.map((el:any)=>{\n if(!el['url']){\n el['url']=this.GetImageUrl(el.blobName,el.containerName,el.tenantId)\n }\n })\n this.selectedFileGroup = this._selected;\n }\n let newControl = this.fb.control(this._selected, ValidatorsArray);\n this.extraProperties.setControl(this._fields.field.name, newControl);\n resolve(true);\n });\n }\n\n private configState = inject(ConfigStateService)\n private environment = inject(EnvironmentService)\n GetImageUrl(value: unknown, ...args: unknown[]): unknown {\n let tenantId = args[1]\n const environment = this.environment.getEnvironment();\n let imgUrl =`${environment.apis.default.url}/api/file-explorer/files/${args[0]}/${value}?__tenant=${tenantId}&timer=${new Date().getTime()}`\n return value?imgUrl:''\n }\n\n /**选择文件-弹窗的-已选定的文件 */\n selectedFileGroup: any[] = [];\n\n /**_selectedFile改变回调 */\n _selectedFileChange(event) {\n this.selectedFileGroup = event;\n let fieldName = this._fields.field.name;\n let obj = {};\n obj[fieldName] = event;\n this.extraProperties.patchValue(obj);\n }\n}\n","<form [formGroup]=\"_entity\">\n <div formGroupName=\"extraProperties\">\n <div class=\"mb-3\">\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\n <fe-file-picker [selectFormFile]=\"selectedFileGroup\" [multiple]=\"formConfiguration['FileExplorer.UploadFileMultiple']\"\n (selectedFileChange)=\"_selectedFileChange($event)\" [fileContainerName]=\"FileContainerName\"></fe-file-picker>\n <small class=\"form-text text-muted d-block\" *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small>\n </div>\n </div>\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n</form>","/* eslint-disable @angular-eslint/component-selector */\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'fe-file-explorer-view',\r\n templateUrl: './file-explorer-view.component.html',\r\n styleUrl: './file-explorer-view.component.scss',\r\n})\r\nexport class FileExplorerViewComponent {\r\n /**展示则内容 */\r\n showValue: any = '';\r\n\r\n /**是否显示再列表 */\r\n @Input() showInList: boolean = false;\r\n /**表单字段数据 */\r\n @Input() fields: any;\r\n\r\n /**表单控件类型 */\r\n @Input() type: any;\r\n\r\n /**表单控件Value */\r\n _value: any = '';\r\n @Input()\r\n public set value(v: any) {\r\n this._value = v;\r\n }\r\n\r\n async ngAfterContentInit(): Promise<void> {\r\n //Called after ngOnInit when the component's or directive's content has been initialized.\r\n //Add 'implements AfterContentInit' to the class.\r\n let valueOptions = this._value;\r\n if (this.type && valueOptions) {\r\n this.showValue = valueOptions;\r\n }\r\n }\r\n}\r\n","@if(showInList){\r\n@if(showValue.length>=1){\r\n<div class=\"d-flex align-items-center \">\r\n <fe-file-preview [width]=\"'40px'\" [className]=\"'rounded-5 overflow-hidden me-1'\" [src]=\"showValue[0].url\"\r\n [name]=\"showValue[0].name\" [type]=\"showValue[0].mimeType\" [preview]=\"true\"></fe-file-preview>\r\n @if(showValue.length-1>0){\r\n +{{showValue.length-1}}\r\n }\r\n</div>\r\n}\r\n} @else{\r\n<div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"fields.displayName\">{{ fields.displayName }}</label>\r\n</div>\r\n}","// import { TableConfigComponent, TableControlComponent, MatrixConfigComponent, MatrixControlComponent } from \"@dignite-ng/expand.cms\";\r\nimport { Type } from \"@angular/core\";\r\nimport { FileExplorerConfigComponent, FileExplorerControlComponent } from \"./file-explorer\";\r\nimport { FileExplorerViewComponent } from \"./file-explorer/file-explorer-view.component\";\r\n\r\nexport interface FieldControlGroupInterfaces {\r\n displayName: string\r\n name: string\r\n // type: TextEditMode,\r\n /**\r\n * 动态表单控件\r\n */\r\n fieldComponent?: Type<any>;\r\n\r\n /**\r\n * 表单控件配置组件\r\n */\r\n fieldConfigComponent?: Type<any>;\r\n\r\n /**\r\n * 条目列表中显示的组件\r\n */\r\n fieldViewComponent?: Type<any>;\r\n}\r\n\r\n\r\n\r\n/**\r\n * 表单控件分组-包含配置,控件,显示的数组\r\n */\r\nexport const fielFieldControlGroup: FieldControlGroupInterfaces[] = [\r\n \r\n {\r\n displayName: '文件管理',\r\n name: 'FileExplorer',\r\n fieldConfigComponent: FileExplorerConfigComponent,\r\n fieldComponent: FileExplorerControlComponent,\r\n fieldViewComponent:FileExplorerViewComponent,\r\n }\r\n];\r\nexport function getExcludeAssignControl(typeName) {\r\n // return FieldControlGroup.filter(el => el.name !== typeName)\r\n return fielFieldControlGroup\r\n}\r\n\r\nexport function AddFieldControlGroup(array=[]) {\r\n fielFieldControlGroup.push(...array)\r\n}","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { NgxValidateCoreModule } from '@ngx-validate/core';\nimport { FileExplorerRoutingModule } from './file-explorer-routing.module';\nimport { FileEditComponent, FilePickerComponent, FileModalComponent, FileModalTreeComponent, FileDomeComponent, fielFieldControlGroup } from './components';\nimport { FilePreviewComponent } from './previews/file-preview.component';\nimport { FileExplorerConfigComponent } from './components/dynamic-form/file-explorer/file-explorer-config.component';\nimport { FileExplorerControlComponent } from './components/dynamic-form/file-explorer/file-explorer-control.component';\nimport { FileExplorerViewComponent } from './components/dynamic-form/file-explorer/file-explorer-view.component';\nimport { TreeModule } from '@abp/ng.components/tree';\nimport { GetDirectoryNamePipe } from './pipe/get-directory-name.pipe';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\n\n@NgModule({\n declarations: [\n FileEditComponent,\n FilePickerComponent,\n FileModalComponent,\n FileModalTreeComponent,\n FileDomeComponent,\n FilePreviewComponent,\n FileExplorerConfigComponent,\n FileExplorerControlComponent,\n FileExplorerViewComponent,\n ],\n imports: [\n FormsModule,\n CoreModule,\n ThemeSharedModule,\n ReactiveFormsModule,\n NgbDropdownModule,\n NzTreeModule,\n NgxValidateCoreModule,\n FileExplorerRoutingModule,\n TreeModule,\n GetDirectoryNamePipe,\n DragDropModule,\n ],\n exports: [\n FileEditComponent,\n FilePickerComponent,\n FileModalComponent,\n FileModalTreeComponent,\n FileDomeComponent,\n FilePreviewComponent,\n // FileExplorerConfigComponent,\n // FileExplorerControlComponent,\n ],\n providers: [\n // GetImageUrlPipe\n // // [Required]\n // ListService,\n // // [Optional]\n // // Provide this token if you want a different debounce time.\n // // Default is 300. Cannot be 0. Any value below 100 is not recommended.\n // { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },\n ],\n})\nexport class FileExplorerModule {\n\n}\n","/*\n * Public API Surface of file-explorer\n */\n\n\nexport * from './lib/file-explorer.module';\nexport * from './lib/components/dynamic-form/form-control-group';\nexport * from './lib/components';\n// export * from './lib/services';\n// export * from './lib/proxy';\nexport * from './lib/previews';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FileApiService","i4.FilePreviewComponent","i1","FileDescriptorService","i1.FileDescriptorService","i2","i3","i4.FileApiService","i5","i6","i7","i8","i9.FileModalTreeComponent","i10.FilePreviewComponent","i11.GetDirectoryNamePipe","i5.FileModalComponent","i6.FilePreviewComponent","i1.FileEditComponent","i2.FilePickerComponent","i4.FilePickerComponent","i2.FilePreviewComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dignite-ng-expand.file-explorer.mjs","sources":["../../../../packages/file-explorer/src/lib/services/file-api.service.ts","../../../../packages/file-explorer/src/lib/previews/models.ts","../../../../packages/file-explorer/src/lib/previews/file-preview.component.ts","../../../../packages/file-explorer/src/lib/previews/file-preview.component.html","../../../../packages/file-explorer/src/lib/components/file-edit/file-edit.component.ts","../../../../packages/file-explorer/src/lib/components/file-edit/file-edit.component.html","../../../../packages/file-explorer/src/lib/proxy/dignite/file-explorer/files/file-descriptor.service.ts","../../../../packages/file-explorer/src/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.ts","../../../../packages/file-explorer/src/lib/components/file-modal-tree/file-modal-tree.component.ts","../../../../packages/file-explorer/src/lib/components/file-modal-tree/file-modal-tree.component.html","../../../../packages/file-explorer/src/lib/pipe/get-directory-name.pipe.ts","../../../../packages/file-explorer/src/lib/components/file-modal/file-modal.component.ts","../../../../packages/file-explorer/src/lib/components/file-modal/file-modal.component.html","../../../../packages/file-explorer/src/lib/components/file-picker/file-picker.component.ts","../../../../packages/file-explorer/src/lib/components/file-picker/file-picker.component.html","../../../../packages/file-explorer/src/lib/components/dome/file-dome.component.ts","../../../../packages/file-explorer/src/lib/components/dome/file-dome.component.html","../../../../packages/file-explorer/src/lib/file-explorer-routing.module.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-config.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-control.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-control.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-view.component.ts","../../../../packages/file-explorer/src/lib/components/dynamic-form/file-explorer/file-explorer-view.component.html","../../../../packages/file-explorer/src/lib/components/dynamic-form/form-control-group.ts","../../../../packages/file-explorer/src/lib/file-explorer.module.ts","../../../../packages/file-explorer/src/public-api.ts","../../../../packages/file-explorer/src/dignite-ng-expand.file-explorer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileApiService {\n\n constructor() { }\n\n /**转换文件大小单位 输入k */\n formatFileSize(bytes: any) {\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let size:any = bytes;\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n // 保留两位小数,四舍五入\n size = size.toFixed(1)\n return `${size} ${units[unitIndex]}`;\n }\n /**获取图片的本地连接 */\n getImageLacolBase64Url(file: File) {\n return new Promise((resolve, rejects) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => {\n resolve(e.target.result)\n };\n reader.onerror = error => rejects(error);\n })\n }\n /**\n * 深拷贝--方法\n * $api.deepClone() */\n deepClone(obj) {\n if (typeof obj !== 'object' || obj === null) return obj;\n const result = Array.isArray(obj) ? [] : {};\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n if (obj[key] instanceof Date) {\n result[key] = new Date(obj[key].getTime());\n } else if (obj[key] instanceof RegExp) {\n result[key] = new RegExp(obj[key]);\n } else if (obj[key] instanceof File) {\n result[key]=obj[key]\n } else {\n result[key] = this.deepClone(obj[key]);\n }\n } else {\n result[key] = obj[key];\n }\n }\n }\n return result;\n }\n\n}\n","\r\n\r\nexport let ImageTypeOption=[{\r\n label:'',\r\n type:'image/jpeg',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/webp',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/gif',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/png',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'image/bmp',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'audio/ogg',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'video/mp4',\r\n icon:'',\r\n},{\r\n label:'',\r\n type:'application/pdf',\r\n icon:'fa fa-file-pdf-o',\r\n},{\r\n label:'',\r\n type:'application/msword',\r\n icon:'fa fa-file-word-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n icon:'fa fa-file-word-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.ms-powerpoint',\r\n icon:'fa fa-file-powerpoint-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n icon:'fa fa-file-powerpoint-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.ms-excel',\r\n icon:'fa fa-file-excel-o',\r\n},{\r\n label:'',\r\n type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n icon:'fa fa-file-excel-o',\r\n},{\r\n label:'',\r\n type:'application/x-zip-compressed',\r\n icon:'fa fa-file-archive-o',\r\n},{\r\n label:'',\r\n type:'7z',\r\n icon:'fa fa-file-archive-o',\r\n},{\r\n label:'',\r\n type:'text/plain',\r\n icon:'fa fa-file-text-o',\r\n\r\n},{\r\n label:'',\r\n type:'',\r\n icon:'fa fa-file-o',\r\n}\r\n] ","import { AfterContentInit, Component, Input, TemplateRef } from '@angular/core';\nimport { ImageTypeOption } from './models';\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-preview',\n templateUrl: './file-preview.component.html',\n styleUrls: ['./file-preview.component.scss']\n})\nexport class FilePreviewComponent implements AfterContentInit{\n\n /**文件宽度 */\n @Input() width: any = '100px'\n /*文件链接 */\n @Input() src: any = ''\n /**是否支持大图预览 */\n @Input() preview: any = true;\n /**文件类型 */\n @Input() type: any = ''\n /**文件名称 */\n @Input() name: any = ''\n @Input() className: any = ''\n\n /**是否是文件 */\n isImage = true\n /**是否是视频 */\n isAudio = false\n /**是否是音频 */\n isVideo = false\n /**文件类型及图标 */\n _ImageTypeOption = ImageTypeOption\n\n\n constructor(\n private modalService: NgbModal\n ) { }\n \n ngAfterContentInit(): void {\n //Called after ngOnInit when the component's or directive's content has been initialized.\n //Add 'implements AfterContentInit' to the class.\n if (!this.type) {\n this.type = this.name.includes('.7z') ? '7z' : ''\n }\n this.isImage = this.type.includes('image/')\n this.isAudio = this.type.includes('audio/')\n this.isVideo = this.type.includes('video/')\n }\n\n /**预览图片 */\n previewImage() {\n\n }\n\n /**模态框实例 */\n modalRef!: NgbModalRef;\n\n /**放大倍数 */\n zoom: number = 10\n /**旋转 */\n rotate: number = 0\n\n\n /**打开预览弹窗 */\n OpenPreviewImage(content: TemplateRef<any>) {\n\n this.modalRef = this.modalService.open(content, {\n fullscreen: true,\n modalDialogClass: 'dignite-preview',\n });\n this.modalRef.result.then(\n (result) => {\n },\n (reason) => {\n this.zoom = 10\n },\n );\n }\n /**放大图像 */\n zoomIn() {\n let zoom = this.zoom\n if (zoom == 20) return\n zoom++\n this.zoom = zoom\n }\n /**缩小图像 */\n zoomOut() {\n let zoom = this.zoom\n if (zoom == 3) return\n zoom--\n this.zoom = zoom\n }\n /**右旋转 */\n RotateRight() {\n if (this.rotate == 360) return this.rotate = 0\n this.rotate += 90\n }\n}\n","<div class=\"image_box\" [style]=\"{width:width,maxWidth:'100%'}\">\n <div class=\"img_box\" [class]=\"className\" *ngIf=\"isImage\">\n <img [src]=\"src\" />\n <div class=\"option_box\" *ngIf=\"preview\">\n <i class=\"fa fa-eye \" (click.stop)=\"OpenPreviewImage(content)\"></i>\n </div>\n </div>\n <a [href]=\"src\" [download]=\"name\" target>\n <i class=\"fa fa-file-audio-o fs-1\" *ngIf=\"isAudio\"></i>\n <i class=\"fa fa-file-video-o fs-1\" *ngIf=\"isVideo\"></i>\n <ng-container *ngIf=\"!(isImage||isAudio||isVideo)\">\n <ng-container *ngFor=\"let item of _ImageTypeOption; let i=index\">\n <i class=\"fs-1\" [ngClass]=\"item.icon\" *ngIf=\"item.type===type\"></i>\n </ng-container>\n </ng-container>\n </a>\n</div>\n\n<ng-template #content let-modal>\n <div class=\"modal-header\">\n <div class=\"d-flex justify-content-end w-100 fs-3\">\n <i class=\"mx-2 fa fa fa-repeat\" aria-hidden=\"true\" title=\"右旋转\" role=\"button\" (click)=\"RotateRight()\"></i>\n <i class=\"mx-2 fa fa-search-minus\" aria-hidden=\"true\" title=\"缩小\" role=\"button\" (click)=\"zoomOut()\"></i>\n <i class=\"mx-2 fa fa-search-plus\" aria-hidden=\"true\" title=\"放大\" role=\"button\" (click)=\"zoomIn()\"></i>\n <i class=\"mx-2 fa fa-times\" aria-hidden=\"true\" role=\"button\" (click)=\"modal.dismiss('Cross click')\"></i>\n </div>\n </div> \n <div class=\"modal-body d-flex justify-content-center align-items-center \">\n <img width=\"400\" class=\"modal-body-preview\" [src]=\"src\" [style.transform]=\"'scale('+zoom/10+') rotate('+rotate+'deg)'\" >\n </div>\n</ng-template>","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\n\n@Component({\n selector: 'fe-file-edit',\n templateUrl: './file-edit.component.html',\n styleUrls: ['./file-edit.component.scss']\n})\nexport class FileEditComponent {\n constructor(\n public _FileApiService: FileApiService,\n ) { }\n\n /**是否多选 */\n _multiple: boolean = true\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n if (v) { }\n }\n /**文件数据--已上传的数据 */\n _fileData: any[] = []\n @Input()\n public set fileData(v: any[]) {\n this._fileData = v;\n if (v.length > 0) {\n this.getFileChange({ target: { files: v } })\n }\n }\n /** 跟随表单提交--已提交的数据,或选择的数据源--回调*/\n @Output() fileDataChange = new EventEmitter()\n\n /**文件大小限制 \n * @param 1mb\n */\n sizeLimit: number = 1048576\n @Input()\n public set limit(v: number) {\n this.sizeLimit = v;\n }\n\n /**文件表格数据 */\n filesTableData: any[] = []\n /** 待删除已上传的文件们*/\n deleteTheUploadedFiles: any[] = []\n\n /**获取文件选择框的元素 */\n @ViewChild('fileEdit', { static: true }) fileEdit: ElementRef;\n\n\n /**获取文件信息改变 */\n async getFileChange(event) {\n let files = new Array(...event.target.files)\n /**需要等待setfileSizeUnits执行完后在执行其他方法--需要完善 */\n await this.waitFileToAddTable(files)\n this.fileHandling()\n }\n\n /**等待将文件数据加入到文件表格数据中 */\n waitFileToAddTable(files) {\n return new Promise(async (resolve, rejects) => {\n this.filesTableData.push(...await this.setfileSizeUnits(files))\n resolve(true)\n })\n }\n\n /**删除文件表格的项 */\n deleteFileTableItem(index, item) {\n this.filesTableData.splice(index, 1)\n if (item.id) {\n this.deleteTheUploadedFiles.push(item)\n }\n this.fileHandling()\n }\n\n /**文件处理-调用回调函数 */\n fileHandling() {\n let theFilesToBeUploaded = this.filesTableData.filter(el => !el.id)\n //判断图片大小是否超过限制-用于判断表单是否允许提交\n let isSubmit = !this.filesTableData.some(el => el.size > this.sizeLimit);\n this.fileDataChange.emit({ theFilesToBeUploaded, deleteTheUploadedFiles: this.deleteTheUploadedFiles, isSubmit })\n }\n\n /**设置值文件大小单位/ */\n async setfileSizeUnits(files: File[] | any[]): Promise<any> {\n return new Promise((resolve, rejects) => {\n let formattedFiles = []\n files.forEach(async (file) => {\n file.fileSize = this._FileApiService.formatFileSize(file.size)\n formattedFiles.push(file)\n //设置选择图片的本地url\n if (!file.src) file.src = await this._FileApiService.getImageLacolBase64Url(file);\n });\n resolve(files)\n })\n }\n\n}\n","<div class=\"input-group mb-3\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" (change)=\"getFileChange($event)\">\n</div>\n\n<table class=\"table\" *ngIf=\"filesTableData.length>0\">\n <thead>\n <tr>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of filesTableData;let i =index\">\n <tr>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.src\" [name]=\"item.name\" [type]=\"item.type\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name}}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' |\n abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}</div>\n </th>\n <td>{{item.fileSize}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>","import type { CreateFileInput, FileContainerConfigurationDto, FileDescriptorDto, GetFilesInput, ImageResizeInput, UpdateFileInput } from './models';\r\nimport { RestService, Rest } from '@abp/ng.core';\r\nimport type { ListResultDto, PagedResultDto } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\nimport type { FileResult } from '../../../microsoft/asp-net-core/mvc/models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileDescriptorService {\r\n apiName = 'FileExplorer';\r\n \r\n\r\n create = (input: CreateFileInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'POST',\r\n url: '/api/file-explorer/files',\r\n params: { containerName: input.containerName, cellName: input.cellName, directoryId: input.directoryId, entityId: input.entityId },\r\n body: input.file,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n delete = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/files/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n deleteByEntityId = (containerName: string, entityId: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/files/${containerName}/${entityId}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n download = (containerName: string, blobName: string, fileName: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileResult>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/download/${containerName}/${blobName}`,\r\n params: { fileName },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n get = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getFileContainerConfiguration = (containerName: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileContainerConfigurationDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${containerName}/configuration`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getList = (input: GetFilesInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, PagedResultDto<FileDescriptorDto>>({\r\n method: 'GET',\r\n url: '/api/file-explorer/files',\r\n params: { containerName: input.containerName, directoryId: input.directoryId, creatorId: input.creatorId, filter: input.filter, entityId: input.entityId, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getListByEntityId = (containerName: string, entityId: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, ListResultDto<FileDescriptorDto>>({\r\n method: 'GET',\r\n url: `/api/file-explorer/files/${containerName}/${entityId}/all`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getStream = (containerName: string, blobName: string, imageResize?: ImageResizeInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, Blob>({\r\n method: 'GET',\r\n responseType: 'blob',\r\n url: `/api/file-explorer/files/${containerName}/${blobName}`,\r\n params: { width: imageResize.width, height: imageResize.height },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n update = (id: string, input: UpdateFileInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, FileDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/files/${id}`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","import type { CreateDirectoryInput, DirectoryDescriptorDto, DirectoryDescriptorInfoDto, GetDirectoriesInput, MoveDirectoryInput, UpdateDirectoryInput } from './models';\r\nimport { RestService, Rest } from '@abp/ng.core';\r\nimport type { PagedResultDto } from '@abp/ng.core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileDescriptorService {\r\n apiName = 'FileExplorer';\r\n \r\n\r\n create = (input: CreateDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'POST',\r\n url: '/api/file-explorer/directories',\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n delete = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, void>({\r\n method: 'DELETE',\r\n url: `/api/file-explorer/directories/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n get = (id: string, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'GET',\r\n url: `/api/file-explorer/directories/${id}`,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n getList = (input: GetDirectoriesInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, PagedResultDto<DirectoryDescriptorInfoDto>>({\r\n method: 'GET',\r\n url: '/api/file-explorer/directories',\r\n params: { containerName: input.containerName },\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n move = (id: string, input: MoveDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/directories/${id}/move`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n \r\n\r\n update = (id: string, input: UpdateDirectoryInput, config?: Partial<Rest.Config>) =>\r\n this.restService.request<any, DirectoryDescriptorDto>({\r\n method: 'PUT',\r\n url: `/api/file-explorer/directories/${id}`,\r\n body: input,\r\n },\r\n { apiName: this.apiName,...config });\r\n\r\n constructor(private restService: RestService) {}\r\n}\r\n","/* eslint-disable @angular-eslint/component-selector */\nimport {\n AfterContentInit,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { NzFormatEmitEvent, NzTreeNode } from 'ng-zorro-antd/tree';\nimport * as DescriptorService from '../../proxy/dignite/file-explorer/directories';\nimport { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';\nimport { NzFormatBeforeDropEvent } from 'ng-zorro-antd/tree';\nimport { finalize, map, of, tap } from 'rxjs';\nimport { FileApiService } from '../../services/file-api.service';\nimport { LocalizationService } from '@abp/ng.core';\nimport { ValidatorsService } from '@dignite-ng/expand.core';\nvar that;\n@Component({\n selector: 'fe-file-modal-tree',\n templateUrl: './file-modal-tree.component.html',\n styleUrls: ['./file-modal-tree.component.scss'],\n})\nexport class FileModalTreeComponent implements AfterContentInit {\n constructor(\n private _DescriptorService: DescriptorService.FileDescriptorService,\n private fb: FormBuilder,\n private toaster: ToasterService,\n public _FileApiService: FileApiService,\n public _LocalizationService: LocalizationService,\n private confirmation: ConfirmationService,\n ) {\n that = this;\n }\n\n /**文件分组列表 */\n fileGroupList: any[] = [];\n\n /**选择的tree节点 */\n _theSelectedTreeNode: any = '';\n @Input()\n public set theSelectedTreeNode(v: any) {\n this._theSelectedTreeNode = v;\n\n if (v == '') {\n this.loadData();\n }\n }\n\n /**正在编辑的节点 */\n theNodeBeingEdited: any = '';\n\n /**已展开的节点 */\n anExpandedNode: any[] = [];\n\n /**图片容器 */\n _fileContainerName: string;\n\n /**tree节点选择回调 */\n @Output() nodeClick = new EventEmitter();\n /**获取数据后回调给file-modal */\n @Output() treeNodeData = new EventEmitter();\n /**查看所有文件回调函数,在file-modal中处理逻辑 */\n @Output() lookAllBtn = new EventEmitter();\n\n @Input()\n public set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n // this.loadData();\n }\n }\n ngAfterContentInit(): void {\n //Called after ngOnInit when the component's or directive's content has been initialized.\n //Add 'implements AfterContentInit' to the class.\n if (this._fileContainerName) {\n this.loadData();\n }\n }\n\n handleClick = event => event.stopPropagation();\n\n loadData() {\n if (this._fileContainerName) {\n this.getFileGroupList();\n }\n }\n\n /**获取文件分组 */\n getFileGroupList() {\n this._DescriptorService\n .getList({\n containerName: this._fileContainerName,\n })\n .subscribe(async res => {\n this.fileGroupList = await this.setTheValueOfTheNodeRecursively(res.items);\n this.treeNodeData.emit(this.fileGroupList);\n });\n }\n\n /**查看所有文件 */\n onLookAllBtn() {\n this.lookAllBtn.emit();\n }\n\n /**递归-将列表转化为父子级结构 */\n setTheValueOfTheNodeRecursively(array: any[], parentId: any = null, root?: any[]): any {\n let rootList = root || array;\n let result = array.filter(item => item.parentId === parentId);\n result.sort((a, b) => a.order - b.order);\n result.map((el: any) => {\n el.title = el.name;\n el.key = el.id;\n el.entity = el.id; /** 节点值 */\n el.expanded = this.anExpandedNode.includes(el.key);\n el.children.sort((a, b) => a.order - b.order);\n if (el.children.length > 0) {\n this.setTheValueOfTheNodeRecursively(el.children, el.id, rootList);\n }\n });\n return result;\n }\n\n /**tree-拖拽 */\n nzEvent(event: NzFormatEmitEvent): void {}\n\n /**tree-拖拽 -验证*/\n beforeDrop(arg: NzFormatBeforeDropEvent) {\n const { pos, dragNode, node } = arg;\n // 只处理有效的拖拽位置\n if (pos === 0 || pos === 1 || pos === -1) {\n // 根据不同的拖拽位置计算参数\n const parentId = pos === 0 ? node.key : node.parentNode?.key || '';\n\n let order;\n if (pos === 1) {\n order = node.origin.order + 1;\n } else if (pos === 0) {\n order = node.origin.children.length + 1;\n } else {\n // pos === -1\n order = Math.max(0, node.origin.order - 1);\n }\n // 统一处理移动逻辑\n return that._DescriptorService.move(dragNode.key, { parentId, order }).pipe(\n tap(() => that.getFileGroupList()),\n map(() => true)\n );\n }\n\n return of(false);\n }\n\n selectedNode: NzTreeNode[] = [];\n /**tree--选择节点 */\n activeNode(node: NzTreeNode) {\n if ((event as any)?.target?.localName == 'i') return;\n if (this._theSelectedTreeNode?.key == node.key) return;\n this.selectedNode = [node];\n this._theSelectedTreeNode = node;\n this.nodeClick.emit(node);\n }\n\n /**判断节点是否选中 */\n isNodeSelected = el => {\n return el.key === this._theSelectedTreeNode?.key;\n };\n\n /**点击展开树节点图标触发 */\n nzExpandChange(event) {\n let anExpandedNode = this.anExpandedNode;\n if (anExpandedNode.includes(event.node.key)) {\n anExpandedNode = anExpandedNode.filter(key => key !== event.node.key);\n } else {\n anExpandedNode.push(event.node.key);\n }\n this.anExpandedNode = anExpandedNode;\n }\n\n /**增加分组 */\n addDescriptorBtn(items: any = '', edit = false) {\n this.ModalDescriptorOpen = true;\n this.ModalDescriptorForm = this.fb.group({\n containerName: [this._fileContainerName || '', Validators.required],\n name: ['', Validators.required],\n parentId: [items?.key || ''],\n });\n /**编辑 */\n if (edit) {\n this.theNodeBeingEdited = items.origin;\n this.ModalDescriptorForm.patchValue({\n name: items.origin.name,\n });\n }\n }\n\n /**删除分组 */\n deleteDescriptorBtn(node) {\n this.confirmation\n .warn('', {\n key: '',\n defaultValue: this._LocalizationService.instant(`FileExplorer::DeletionConfirmationMessage`,node.title),\n })\n .subscribe((status: Confirmation.Status) => {\n if (status == 'confirm') {\n this._DescriptorService.delete(node.key).subscribe(res => {\n this.ModalDescriptorOpen = false;\n if (this.theNodeBeingEdited.key == node.key) this.theNodeBeingEdited = '';\n this.getFileGroupList();\n });\n }\n });\n }\n\n /**分组 */\n /**模态框-状态-是否打开 */\n ModalDescriptorOpen: boolean = false;\n\n /**模态框-descriptor-繁忙状态-用于确定模态的繁忙状态是否为真 */\n ModalDescriptorBusy: boolean = false;\n\n /**模态框-descriptor-表单 */\n ModalDescriptorForm: FormGroup | undefined;\n\n /**模态框-descriptor-表单--控件模板-动态赋值表单控件 */\n @ViewChild('ModalFormDescriptorSubmit', { static: false }) ModalFormDescriptorSubmit: ElementRef;\n\n /**模态框-descriptor-状态改变回调 */\n ModalDescriptorVisibleChange(event) {\n if (!event) {\n this.ModalDescriptorForm = undefined;\n this.theNodeBeingEdited = '';\n return;\n }\n }\n formValidation: any = '';\n private _ValidatorsService = inject(ValidatorsService);\n /**f分组模态框保存 */\n createOrEditSave() {\n let input = this.ModalDescriptorForm.value;\n this.formValidation = this._ValidatorsService.getFormValidationStatus(this.ModalDescriptorForm);\n if (this._ValidatorsService.isCheckForm(this.formValidation, 'FileExplorer')) return;\n if (!this.ModalDescriptorForm.valid) return;\n if (this.ModalDescriptorBusy) return;\n this.ModalDescriptorBusy = true;\n\n if (this.theNodeBeingEdited) {\n this._DescriptorService\n .update(this.theNodeBeingEdited.key, input)\n .pipe(\n finalize(() => {\n this.ModalDescriptorBusy = false;\n })\n )\n .subscribe(res => {\n this.ModalDescriptorOpen = false;\n this.ModalDescriptorVisibleChange(false);\n this.getFileGroupList();\n });\n return;\n }\n this._DescriptorService\n .create(input)\n .pipe(\n finalize(() => {\n this.ModalDescriptorBusy = false;\n })\n )\n .subscribe(res => {\n this.ModalDescriptorOpen = false;\n this.ModalDescriptorVisibleChange(false);\n this.getFileGroupList();\n });\n }\n}\n","<div class=\"card-header p-0 mb-1 d-flex justify-content-between align-items-center\">\n <h6 class=\"h6 mb-0 btn-link\" role=\"button\" (click.stop)=\"onLookAllBtn()\">{{'FileExplorer::MyDirectories' | abpLocalization}}</h6>\n <button type=\"button\" class=\"btn btn-light btn-sm ms-2\" (click.stop)=\"addDescriptorBtn()\"><i\n class=\"fas fa-plus-circle\" aria-hidden=\"true\"></i></button>\n</div>\n@if(fileGroupList.length>0){\n<abp-tree [nodes]=\"fileGroupList\" (nzExpandChange)=\"nzExpandChange($event)\" [draggable]=\"true\"\n (dropOver)=\"nzEvent($event)\" [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\" [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\">\n\n <ng-template #menu let-node>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-pencil\"></i>{{'FileExplorer::NewDirectory' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"addDescriptorBtn(node,true)\"><i\n class=\" me-1 fa fa-plus\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click.stop)=\"deleteDescriptorBtn(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n </ng-template>\n\n <ng-template #minusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\n </svg>\n </ng-template>\n\n <ng-template #plusIcon>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\"\n clip-rule=\"evenodd\">\n <path\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\n </svg>\n </ng-template>\n</abp-tree>\n\n}\n<abp-modal [(visible)]=\"ModalDescriptorOpen\" [busy]=\"ModalDescriptorBusy\"\n (visibleChange)=\"ModalDescriptorVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{theNodeBeingEdited?('AbpUi::Edit' | abpLocalization):('FileExplorer::NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"ModalDescriptorForm; else loaderRef\">\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"ModalDescriptorForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"createOrEditSave()\">\n <button type=\"submit\" #ModalFormDescriptorSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'FileExplorer::DirectoryName' | abpLocalization}}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"ModalDescriptorBusy\"\n (click)=\"ModalFormDescriptorSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'getDirectoryName',\r\n standalone: true\r\n})\r\nexport class GetDirectoryNamePipe implements PipeTransform {\r\n\r\n transform(value: unknown, ...args: any[]): unknown {\r\n if(value){\r\n return args[0].find(el=>el.id==value)?.name\r\n }\r\n return '';\r\n }\r\n\r\n}\r\n","/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n inject,\n OnChanges,\n} from '@angular/core';\nimport * as FileService from '../../proxy/dignite/file-explorer/files';\nimport { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';\nimport {\n PagedResultDto,\n ABP,\n ListService,\n Rest,\n RestService,\n LocalizationService,\n LIST_QUERY_DEBOUNCE_TIME,\n} from '@abp/ng.core';\nimport {\n FileDescriptorDto,\n FileDescriptorService,\n GetFilesInput,\n} from '../../proxy/dignite/file-explorer/files';\nimport { FileApiService } from '../../services/file-api.service';\nimport { SelectionType } from '@swimlane/ngx-datatable';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-modal',\n templateUrl: './file-modal.component.html',\n styleUrls: ['./file-modal.component.scss'],\n providers: [\n // [Required]\n ListService,\n // [Optional]\n // Provide this token if you want a different debounce time.\n // Default is 300. Cannot be 0. Any value below 100 is not recommended.\n { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },\n ],\n})\nexport class FileModalComponent implements OnChanges {\n constructor(\n private _FileService: FileService.FileDescriptorService,\n private toaster: ToasterService,\n public readonly list: ListService,\n public _FileApiService: FileApiService,\n private restService: RestService,\n private confirmation: ConfirmationService,\n private _LocalizationService: LocalizationService,\n ) {}\n\n private _FileDescriptorService = inject(FileDescriptorService);\n /**获取目录配置 */\n getFilesConfiguration() {\n return new Promise((resolve, reject) => {\n this._FileDescriptorService\n .getFileContainerConfiguration(this._fileContainerName)\n .subscribe(res => {\n this.createDirectoryPermissionName = res?.createDirectoryPermissionName;\n resolve(res);\n });\n });\n }\n /**目录的权限名称 */\n createDirectoryPermissionName: string = null;\n\n /**图片容器 */\n _fileContainerName: string;\n @Input()\n public set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n // this.loadData()\n }\n }\n\n /**是否多选 */\n _multiple = false;\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n }\n\n /**文件大小限制\n * @param 1mb\n */\n sizeLimit = 1048576;\n @Input()\n public set limit(v: number) {\n this.sizeLimit = v;\n }\n /**父组件传递的模态框状态 */\n @Input()\n public set visible(v: boolean) {\n this.ModalOpen = v;\n if (v) {\n this.loadData();\n }\n }\n\n /**模态框状态回调 */\n @Output() visibleChange = new EventEmitter();\n\n /**模态框-状态-是否打开 */\n ModalOpen = false;\n\n /**模态框-繁忙状态-用于确定模态的繁忙状态是否为真 */\n ModalBusy = false;\n\n /**模态框-状态改变回调 */\n ModalVisibleChange(event) {\n if (!event) {\n this.ModalOpen = false;\n this.ModalBusy = false;\n this.visibleChange.emit(event);\n this.createDirectoryPermissionName = '';\n this._theSelectedTreeNode = '';\n this.selectedTable = [];\n this.uploadPictureStatusList = [];\n return;\n }\n }\n\n /**模态框保存 */\n modalSave() {\n const selectedTablearr = this._FileApiService.deepClone(this.selectedTable);\n this.selectFilefn.emit(selectedTablearr);\n this.ModalVisibleChange(false);\n }\n /**dignite-file-modal-tree */\n /**选择的tree节点 */\n _theSelectedTreeNode: any = '';\n isCreateList = false;\n /**初始化数据 */\n loadData() {\n if (this.ModalOpen && this._fileContainerName) {\n this.list.maxResultCount = 100;\n // this.filters.skipCount = 0;\n this.getFilesConfiguration();\n if (!this.isCreateList) {\n this.hookToQuery();\n this.isCreateList = true;\n } else {\n this.list.get();\n }\n }\n }\n /** 从tree获取来的数据 */\n fileGroupList: any[] = [];\n /** 从tree获取数据 */\n treeNodeData(event) {\n this.fileGroupList = this.flattenNestedArray(event);\n }\n /**\n * 将嵌套数组扁平化\n * @param {Array} nestedArray - 包含嵌套children的数组\n * @returns {Array} - 扁平化后的数组\n */\n flattenNestedArray(nestedArray) {\n const result = [];\n\n function flatten(items) {\n if (!items) return;\n\n for (const item of items) {\n // 将当前项添加到结果数组\n result.push({ ...item });\n\n // 如果有children属性且是数组,递归处理\n if (item.children && Array.isArray(item.children)) {\n flatten(item.children);\n }\n }\n }\n\n flatten(nestedArray);\n return result;\n }\n\n /**tree-节点选择 */\n _nodeClick(event) {\n this.filters.skipCount = 0;\n this._theSelectedTreeNode = event;\n this.list.get();\n }\n\n /**图片上传-要上传图片的状态文件列表 */\n uploadPictureStatusList: any[] = [];\n\n /**图片上传-获取文件信息改变 */\n async getFileChange(event) {\n const _that=this;\n const files = new Array(...event.target.files);\n this.uploadPictureStatusList = files;\n const uploadPromises = [];\n for (const file of files) {\n if (file.size > this.sizeLimit) {\n this.setuploadPictureStatus(file, 2);\n continue;\n }\n uploadPromises.push(\n this.uploadingFile(file)\n .then(res => {\n this.setuploadPictureStatus(file, 1);\n })\n .catch(function (err) {\n this.setuploadPictureStatus(file, 2);\n return err;\n }), // 保证所有Promise都resolve\n );\n }\n Promise.all(uploadPromises).then( (results)=> {\n _that.list.get();\n const isSubmit = !_that.uploadPictureStatusList.some(el => el.status == 2);\n if (isSubmit) {\n setTimeout(() => {\n _that.uploadPictureStatusList = [];\n }, 4000);\n }\n });\n\n }\n\n /**图片上传-设置uploadPictureStatusList的状态 */\n setuploadPictureStatus(file, type) {\n this.uploadPictureStatusList.map(el => {\n if (el == file) el.status = type;\n });\n }\n\n /**图片上传-递归按顺序上传 */\n uploadingFile(file) {\n return new Promise((resolve, rejects) => {\n const formData = new FormData();\n formData.append('file', file, file.name);\n this.createFile({\n file: formData,\n containerName: this._fileContainerName,\n directoryId: this._theSelectedTreeNode?.key || '',\n entityId: '',\n }).subscribe(\n res => {\n resolve({ file: file.name, status: 'success', response: res });\n },\n err => {\n rejects({ file: file.name, status: 'fail', error: err });\n },\n );\n });\n }\n\n /**文件表格-数据*/\n data: PagedResultDto<FileDescriptorDto> = {\n items: [],\n totalCount: 0,\n };\n\n /**文件表格-条件*/\n filters = {} as GetFilesInput;\n\n /**文件表格-表格自带选择类型 */\n SelectionType = SelectionType;\n\n /**选择文件回调 */\n @Output() selectFilefn = new EventEmitter<any[]>();\n\n /**文件表格-获取表格数据 */\n hookToQuery() {\n const getData = (query: ABP.PageQueryParams) =>\n this._FileService.getList({\n ...query,\n ...this.filters,\n containerName: this._fileContainerName,\n directoryId: this._theSelectedTreeNode.key,\n });\n const setData = (list: PagedResultDto<FileDescriptorDto>) => {\n this.data = list;\n this.onPageChange(list.items);\n };\n this.list.hookToQuery(getData).subscribe(setData);\n }\n\n /**文件表格-查看所有分组的文件数据 */\n lookAllFile() {\n this.filters.skipCount = 0;\n this._theSelectedTreeNode = '';\n this.list.get();\n }\n\n /**删除图片 */\n deleteFile(file) {\n this._FileService.delete(file.id).subscribe(res => {\n this.toaster.success(this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`));\n this.list.get();\n const selectedTables=this.selectedTable;\n this.selectedTable=selectedTables.filter(el => el.id != file.id);\n });\n }\n\n /**删除所有选中图片 */\n onDeleteAllSelectFile() {\n this.confirmation\n .warn('', {\n key: '',\n defaultValue: this._LocalizationService.instant(`FileExplorer::AreYouSure`),\n })\n .subscribe(async (status: Confirmation.Status) => {\n if (status == 'confirm') {\n const selectedTable = this.selectedTable;\n try {\n const result = await this.batchDeleteItems(selectedTable);\n console.log(result,'resultresultresult')\n if (result.success) {\n this.toaster.success(result.message);\n this.list.get();\n this.selectedTable=[];\n // 可能需要刷新表格或更新UI\n } else {\n //删除失败的项\n this.list.get();\n // 可以选择展示失败项或重试\n this.selectedTable= result.failedItems;\n\n }\n } catch (error) {\n //批量删除过程中发生错误\n }\n }\n });\n }\n\n /**\n * 批量删除表格项\n * @param selectedTable 需要删除的表格项数组\n * @returns 包含成功状态和失败项的结果对象\n */\n async batchDeleteItems(selectedTable: any[]) {\n // 存储所有删除请求的Promise\n const deletePromises = selectedTable.map(item => {\n return new Promise((resolve, reject) => {\n this._FileService.delete(item.id).subscribe(\n () => {\n resolve(null);\n },\n () => {\n reject(item);\n },\n );\n });\n });\n\n // 等待所有请求完成\n const results = await Promise.allSettled(deletePromises);\n // 收集失败的项\n const failedItems: any[] = [];\n results.forEach(result => {\n if (result.status === 'rejected') {\n failedItems.push(result.reason);\n }\n });\n\n return {\n success: failedItems.length === 0,\n failedItems,\n message:\n failedItems.length === 0\n ? this._LocalizationService.instant(`FileExplorer::DeletedSuccessfully`)\n : `${failedItems.length}个项删除失败`,\n };\n }\n\n // 使用示例\n async handleBatchDelete() {}\n\n /**关闭文件状态弹窗 */\n closeFileStatusModal() {\n this.uploadPictureStatusList = [];\n }\n\n /**创建图片的接口,代理中的file类型不匹配,切换为any类型 */\n createFile = (input: any, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileDescriptorDto>(\n {\n method: 'POST',\n url: '/api/file-explorer/files',\n params: {\n containerName: input.containerName,\n cellName: input.cellName,\n directoryId: input.directoryId,\n entityId: input.entityId,\n },\n body: input.file,\n },\n { apiName: 'FileExplorer', ...config },\n );\n\n /**文件表格-选择的表格数据项 */\n selectedTable = [];\n /**当前选择的table项 id */\n nowSelectId: any = '';\n /**是否全选 */\n isAllSelected = false;\n\n /**已选定的文件 */\n @Input() selectPickerFile: any[];\n\n ngOnChanges(changes: SimpleChanges): void {\n //Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.\n //Add '${implements OnChanges}' to the class.\n this.selectedTable = this._FileApiService.deepClone(this.selectPickerFile);\n }\n /**表格分页切换 */\n onPageChange(newArray) {\n this.isAllSelected = this.isAllSelectedFn(newArray, this.selectedTable);\n }\n /**行选择框改变 */\n onCheckboxChangeFn(event, row, array: any[]) {\n const { checked } = event.target;\n let selectedTableArray = [...this.selectedTable];\n if (this._multiple) {\n if (checked) {\n selectedTableArray.push(row);\n } else {\n selectedTableArray = selectedTableArray.filter(el => el.id != row.id);\n }\n this.isAllSelected = this.isAllSelectedFn(array, selectedTableArray);\n } else {\n selectedTableArray.length = 0;\n selectedTableArray = checked ? [row] : [];\n }\n this.selectedTable = this.removeDuplicatesById(selectedTableArray);\n }\n /**如果selectedTableArray不含array中的所有项,则将isAllSelected设为true,否则设为false */\n isAllSelectedFn(tolalArray: any[], selectedArray: any[] = []) {\n if (tolalArray.length == 0) return false;\n return tolalArray.every(item => selectedArray.some(el => el.id === item.id));\n }\n /**选择当前页全部 */\n onSelectAllFn(event: any, array: any[]) {\n let selectedTableArray = this.selectedTable;\n if (event.target.checked) {\n selectedTableArray = this.removeDuplicatesById([...selectedTableArray, ...array]);\n } else {\n selectedTableArray = selectedTableArray.filter(el => !array.some(item => item.id === el.id));\n }\n this.isAllSelected = event.target.checked;\n this.selectedTable = selectedTableArray;\n }\n\n /**判断row是否选中 */\n selectedcheckbox = id => {\n return this.selectedTable.some(el => el.id === id);\n };\n /**删除数组中重复的项 */\n removeDuplicatesById(array) {\n const seenIds = {};\n return array.filter(item => {\n if (!seenIds[item.id]) {\n seenIds[item.id] = true;\n return true;\n }\n return false;\n });\n }\n /**用于编辑的表单,同时只能显示编辑一个 */\n FileNameForm: FormGroup | any;\n /**当前编辑的row */\n newEditRow: any = '';\n /**是否正在加载 */\n isloading = false;\n /**提交FileName编辑 */\n onSubmitFileName(event) {\n const input = this.FileNameForm.value;\n if (!this.FileNameForm.valid) return;\n if (this.isloading) return;\n this.isloading = true;\n this._FileService\n .update(input.id, {\n name: input.fileName,\n })\n .pipe(\n finalize(() => {\n this.isloading = false;\n }),\n )\n .subscribe(res => {\n //通过当前newEditRow的id,修改data.items中对应项的name\n for (const element of this.data.items) {\n if (element.id == this.newEditRow.id) {\n element.name = input.fileName;\n break;\n }\n }\n\n this.FileNameForm = undefined;\n this.newEditRow = '';\n this.toaster.success(this._LocalizationService.instant(`FileExplorer::SavedSuccessfully`));\n // this.list.get();\n });\n }\n /**打开编辑 */\n onEditFileName(row) {\n this.FileNameForm = new FormGroup({\n fileName: new FormControl('', [Validators.required]),\n id: new FormControl('', [Validators.required]),\n });\n this.FileNameForm.patchValue({\n fileName: row.name,\n id: row.id,\n });\n this.newEditRow = row;\n }\n /**关闭编辑 */\n onCancelFileName(row) {\n this.newEditRow = '';\n this.FileNameForm = undefined;\n }\n}\n","<abp-modal [(visible)]=\"ModalOpen\" (visibleChange)=\"ModalVisibleChange($event)\"\n [options]=\"{ size: 'xl', scrollable: false }\">\n <ng-template #abpHeader>\n <h3>{{'FileExplorer::FileExplorer' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <div class=\"row file-explorer-modal-body file-modal\" *ngIf=\"ModalOpen\">\n <div class=\"col-3\" *ngIf=\"createDirectoryPermissionName\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <fe-file-modal-tree [theSelectedTreeNode]=\"_theSelectedTreeNode\" (nodeClick)=\"_nodeClick($event)\"\n (lookAllBtn)=\"lookAllFile()\" (treeNodeData)=\"treeNodeData($event)\"\n [fileContainerName]=\"_fileContainerName\"></fe-file-modal-tree>\n </div>\n <div [class]=\"createDirectoryPermissionName?'col-9':'col-12'\" style=\"height: calc(100vh - 240px)\">\n <div class=\"mb-3 d-flex justify-content-between align-items-center\">\n <div style=\"flex: 2\"><span *ngIf=\"selectedTable.length>1\" class=\"btn-link\"\n (click.stop)=\"onDeleteAllSelectFile()\" role=\"button\">{{'FileExplorer::Delete' | abpLocalization}}</span>\n </div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileEdit [multiple]=\"_multiple\" (change)=\"getFileChange($event)\" />\n </div>\n </div>\n <div>\n <!-- [selectionType]=\"_multiple?SelectionType.checkbox:SelectionType.single\" -->\n <!-- [selectCheck]=\"selectCheck\" -->\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\" columnMode=\"flex\"\n [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\" [virtualization]=\"false\"\n [externalPaging]=\"true\" [count]=\"data.totalCount\">\n <ngx-datatable-column [width]=\"50\" prop=\"id\" [sortable]=\"false\" [canAutoResize]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n <input type=\"checkbox\" class=\"form-check-input\" *ngIf=\"_multiple\" [checked]=\"isAllSelected\"\n (change)=\"onSelectAllFn($event,data.items)\" />\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"selectedcheckbox(value)\"\n (change)=\"onCheckboxChangeFn($event,row,data.items)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [sortable]=\"false\" [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <fe-file-preview [width]=\"'80px'\" [src]=\"row.url\" [name]=\"row.name\" [type]=\"row.mimeType\"\n [preview]=\"true\"></fe-file-preview>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileName' | abpLocalization\" prop=\"name\" [sortable]=\"false\"\n [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div class=\"d-flex align-items-start titlehover\" *ngIf=\"newEditRow.id!==row.id\">\n <span class=\"me-2\">{{ value }}</span>\n <i class=\"fa fa-pencil-square-o\" role=\"button\" (click.stop)=\"onEditFileName(row)\" style=\"line-height:2;\" aria-hidden=\"true\"></i>\n </div>\n <div *ngIf=\"FileNameForm&&newEditRow.id===row.id\">\n <form [formGroup]=\"FileNameForm\" (ngSubmit)=\"onSubmitFileName($event)\">\n <div class=\"d-flex align-items-start\">\n <div class=\"me-2\">\n <input class=\"form-control \" type=\"text\" formControlName=\"fileName\">\n </div>\n <button class=\" btn btn-sm\" type=\"submit\">\n <i class=\"fa-spin fa fa-spinner\" *ngIf=\"isloading\"></i>\n <i class=\"fa fa-check\" aria-hidden=\"true\" *ngIf=\"!isloading\"></i></button>\n <button class=\" btn btn-sm\" (click.stop)=\"onCancelFileName(row)\"><i class=\"fa fa-times\" type=\"reset\" aria-hidden=\"true\"></i></button>\n \n </div>\n </form>\n </div>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ _FileApiService.formatFileSize(value) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::Directory' | abpLocalization\" prop=\"directoryId\"\n [sortable]=\"false\" [flexGrow]=\"1\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value|getDirectoryName:fileGroupList }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'FileExplorer::CreationTime' | abpLocalization\" prop=\"creationTime\"\n [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'YYYY/MM/dd HH:mm:s' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [flexGrow]=\"1\" [sortable]=\"false\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <button class=\"btn btn-sm btn-light p-0\" (click.stop)=\"deleteFile(row)\">\n <i class=\"fas fa-trash text-primary p-2\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n <div *ngIf=\"uploadPictureStatusList.length > 0\"\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\" style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'FileExplorer::UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of uploadPictureStatusList; let i = index\">\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n <div class=\"form-text text-danger\" *ngIf=\"item.size > sizeLimit\">\n {{'FileExplorer::ExceedsMaximumSize' |\n abpLocalization:_FileApiService.formatFileSize(sizeLimit)}}\n </div>\n </th>\n <td>{{ item.fileSize }}</td>\n <td>\n <i *ngIf=\"item.status === 1\" class=\"fas fa-check text-primary\"></i>\n <i *ngIf=\"item.status === 2\" class=\"fas fa-times-circle text-danger\"></i>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"modalSave()\">{{'FileExplorer::Confirm' | abpLocalization}}\n @if(selectedTable.length>0){\n ({{selectedTable.length}})\n }\n </abp-button>\n </ng-template>\n</abp-modal>","/* eslint-disable @angular-eslint/component-selector */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'fe-file-picker',\n templateUrl: './file-picker.component.html',\n styleUrls: ['./file-picker.component.scss']\n})\nexport class FilePickerComponent implements OnChanges {\n\n\n\n constructor(\n private _FileApiService: FileApiService,\n ) {\n\n }\n\n\n /**是否多选 */\n _multiple: boolean = false\n @Input()\n public set multiple(v: boolean) {\n this._multiple = v;\n }\n\n /**图片容器 */\n _fileContainerName: string = 'Images'\n @Input()\n public set fileContainerName(v: string) {\n this._fileContainerName = v;\n }\n\n /**已选定的文件 */\n @Input() selectFormFile: any[]\n\n ngOnChanges(changes: SimpleChanges): void {\n let selectFormFilengOnChanges = changes.selectFormFile['currentValue']\n if (selectFormFilengOnChanges.length > 0) {\n this._fileShowTable = selectFormFilengOnChanges\n }\n }\n\n @Output() selectedFileChange = new EventEmitter()\n\n _fileShowTable: any[] = []\n\n /**表格选择的文件回调 */\n _selectFilefn(event: any[]) {\n let _fileShowTable = this._FileApiService.deepClone(event)\n this._fileShowTable = _fileShowTable\n this.selectFormFile = _fileShowTable\n this.selectedFileChange.emit(_fileShowTable)\n }\n\n /**模态框-状态-是否打开 */\n ModalOpen: boolean = false\n\n /**删除文件表格项 */\n deleteFileTableItem(i, file) {\n this._fileShowTable.splice(i, 1)\n this.selectFormFile = this._fileShowTable\n this.selectedFileChange.emit([])\n this.selectedFileChange.emit(this.selectFormFile)\n }\n /**调整表格位置 */\n drop(event: any) {\n moveItemInArray(\n this._fileShowTable,\n event.previousIndex,\n event.currentIndex\n );\n this.selectFormFile = this._fileShowTable\n this.selectedFileChange.emit(this.selectFormFile)\n // this._fileShowTable.updateValueAndValidity()\n }\n}\n","<button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\n (click.stop)=\"ModalOpen = true\">{{'FileExplorer::SelectFile' | abpLocalization}}</button>\n\n<fe-file-modal [(visible)]=\"ModalOpen\" [selectPickerFile]=\"selectFormFile\" [multiple]=\"_multiple\"\n (selectFilefn)=\"_selectFilefn($event)\" [fileContainerName]=\"_fileContainerName\"></fe-file-modal>\n<table class=\"table\" *ngIf=\"_fileShowTable.length>0\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 30px;\"></th>\n <th scope=\"col\"></th>\n <th scope=\"col\">{{'FileExplorer::FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'FileExplorer::FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of _fileShowTable;let i =index\">\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>\n <div class=\"drag-handle\" cdkDragHandle>\n <span class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n <td>\n <fe-file-preview [width]=\"'80px'\" [src]=\"item.url||item.Url\" [name]=\"item.name||item.Name\"\n [type]=\"item.mimeType||item.MimeType\" [preview]=\"true\"></fe-file-preview>\n </td>\n <th scope=\"row\">\n <div>{{item.name||item.Name}}</div>\n </th>\n <td>{{_FileApiService.formatFileSize(item.Size||item.size)}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-light \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>","import { Component, inject } from '@angular/core';\nimport { FileApiService } from '../../services/file-api.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-dome',\n templateUrl: './file-dome.component.html',\n styleUrls: ['./file-dome.component.scss']\n})\nexport class FileDomeComponent {\n\n /**跟随表单提交--已提交的数据,或选择的数据源 */\n fileSubmittedData: any[] = []\n\n /**跟随表单提交--待提交的数据\n * \n * @param 待上传的文件们\n * @param 待删除已上传的文件们\n */\n fileDataToBeSubmitted: any\n\nprivate FileApiService=inject(FileApiService)\n /**跟随表单提交--数据发生改变回调 */\n fileDataChange(event) {\n this.fileDataToBeSubmitted = event\n }\n\n /**选择文件-弹窗的-已选定的文件 */\n selectedFileGroup:any[]=[]\n\n /**_selectedFile改变回调 */\n _selectedFileChange(event) {\n this.selectedFileGroup = event\n }\n}\n","<div class=\"row\">\r\n <div class=\"col\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-2 border-bottom\">Send file stream with form</div>\r\n <div class=\"card-body\">\r\n <fe-file-edit [(fileData)]=\"fileSubmittedData\" (fileDataChange)=\"fileDataChange($event)\"></fe-file-edit>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-2 border-bottom\">Send file stream with form</div>\r\n <div class=\"card-body\">\r\n <fe-file-picker [selectFormFile]=\"selectedFileGroup\" fileContainerName=\"SampleContainer\" (selectedFileChange)=\"_selectedFileChange($event)\" ></fe-file-picker>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { FileDomeComponent } from './components/dome/file-dome.component';\n\nconst routes: Routes = [\n {\n path: 'file-dome',\n component: FileDomeComponent\n},\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class FileExplorerRoutingModule { \n \n}\n","import { FormControl, Validators } from \"@angular/forms\";\r\n\r\nexport class FileExplorerConfig {\r\n\r\n\r\n /**文件容器名称 */\r\n 'FileExplorer.FileContainerName': any = ['', [Validators.required]];\r\n /**多选 */\r\n 'FileExplorer.UploadFileMultiple': any = [false, []];\r\n \r\n\r\n constructor(data?: FileExplorerConfig) {\r\n if (data) {\r\n for (const key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n this[key] = data[key];\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n}","import { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FileExplorerConfig } from './file-explorer-config';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-explorer-config',\n templateUrl: './file-explorer-config.component.html',\n styleUrls: ['./file-explorer-config.component.scss']\n})\nexport class FileExplorerConfigComponent {\n constructor(\n private fb: FormBuilder,\n ) { }\n /**表单控件类型 */\n _type: any\n @Input()\n public set type(v: any) {\n this._type = v\n this.dataLoaded()\n }\n /**表单实体 */\n _Entity: FormGroup | undefined\n @Input()\n public set Entity(v: FormGroup) {\n this._Entity = v;\n this.dataLoaded()\n }\n /**选择的表单信息 */\n _selected: any\n @Input()\n public set selected(v: any) {\n this._selected = v\n\n this.dataLoaded()\n }\n get formConfiguration() {\n return this._Entity.get('formConfiguration') as FormGroup\n }\n @ViewChild('submitclick', { static: true }) submitclick: ElementRef;\n\n private cdr = inject(ChangeDetectorRef);\n async dataLoaded() {\n if (this._Entity && this._type) {\n await this.AfterInit();\n this.cdr.detectChanges(); // 手动触发变更检测\n this.submitclick?.nativeElement?.click();\n }\n }\n\n AfterInit() {\n return new Promise((resolve, rejects) => {\n this._Entity.setControl('formConfiguration', this.fb.group(new FileExplorerConfig()))\n if (this._selected && this._selected.formControlName == this._type) {\n this.formConfiguration.patchValue({\n ...this._selected.formConfiguration\n })\n }\n resolve(true)\n })\n }\n}\n","<form [formGroup]=\"_Entity\">\n <div formGroupName=\"formConfiguration\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'DigniteAbpDynamicFormsFileExplorer::FileContainerName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"FileExplorer.FileContainerName\">\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"FileExplorer.UploadFileMultiple\" id=\"flexRadioDefault1\">\n <label class=\"form-check-label\" for=\"flexRadioDefault1\">\n {{'DigniteAbpDynamicFormsFileExplorer::UploadFileMultiple' | abpLocalization}}\n </label>\n </div>\n </div>\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\n #submitclick></button>\n </div>\n</form>","import { ConfigStateService, EnvironmentService } from '@abp/ng.core';\nimport { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'fe-file-explorer-control',\n templateUrl: './file-explorer-control.component.html',\n styleUrls: ['./file-explorer-control.component.scss'],\n})\nexport class FileExplorerControlComponent {\n constructor(private fb: FormBuilder) {}\n\n /**表单实体 */\n _entity: FormGroup | any;\n @Input()\n public set entity(v: any) {\n this._entity = v;\n if (v) this.dataLoaded();\n }\n\n /**字段配置列表 */\n _fields: any = '';\n @Input()\n public set fields(v: any) {\n this._fields = v;\n if (v) this.dataLoaded();\n }\n\n /**父级字段名称,用于为表单设置控件赋值 */\n _parentFiledName: any;\n @Input()\n public set parentFiledName(v: any) {\n this._parentFiledName = v;\n if (v) this.dataLoaded();\n }\n\n /**父级字段名称,用于为表单设置控件赋值 */\n _selected: any;\n @Input()\n public set selected(v: any) {\n this._selected = v;\n \n if (v && v.length > 0) this.dataLoaded();\n }\n\n @ViewChild('submitclick', { static: true }) submitclick: ElementRef;\n\n get extraProperties() {\n return this._entity.get('extraProperties') as FormGroup;\n }\n private cdr = inject(ChangeDetectorRef);\n /**数据加载完成 */\n async dataLoaded() {\n if (this._fields && this._entity && this._parentFiledName) {\n await this.AfterInit();\n this.cdr.detectChanges(); // 手动触发变更检测\n this.submitclick?.nativeElement?.click();\n }\n }\n\n /**字段配置 */\n formConfiguration: any = '';\n /**文件容器名称 */\n FileContainerName: any = '';\n AfterInit() {\n return new Promise((resolve, rejects) => {\n let ValidatorsArray:any = [];\n if (this._fields.required) {\n ValidatorsArray.push(Validators.required);\n }\n this.formConfiguration = this._fields.field.formConfiguration;\n this.FileContainerName = this.formConfiguration['FileExplorer.FileContainerName'];\n if (this._selected && this._selected.length > 0) {\n this._selected.map((el:any)=>{\n if(!el['url']){\n el['url']=this.GetImageUrl(el.blobName,el.containerName,el.tenantId)\n }\n })\n this.selectedFileGroup = this._selected;\n }\n let newControl = this.fb.control(this._selected, ValidatorsArray);\n this.extraProperties.setControl(this._fields.field.name, newControl);\n resolve(true);\n });\n }\n\n private configState = inject(ConfigStateService)\n private environment = inject(EnvironmentService)\n GetImageUrl(value: unknown, ...args: unknown[]): unknown {\n let tenantId = args[1]\n const environment = this.environment.getEnvironment();\n let imgUrl =`${environment.apis.default.url}/api/file-explorer/files/${args[0]}/${value}?__tenant=${tenantId}&timer=${new Date().getTime()}`\n return value?imgUrl:''\n }\n\n /**选择文件-弹窗的-已选定的文件 */\n selectedFileGroup: any[] = [];\n\n /**_selectedFile改变回调 */\n _selectedFileChange(event) {\n this.selectedFileGroup = event;\n let fieldName = this._fields.field.name;\n let obj = {};\n obj[fieldName] = event;\n this.extraProperties.patchValue(obj);\n }\n}\n","<form [formGroup]=\"_entity\">\n <div formGroupName=\"extraProperties\">\n <div class=\"mb-3\">\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\n <fe-file-picker [selectFormFile]=\"selectedFileGroup\" [multiple]=\"formConfiguration['FileExplorer.UploadFileMultiple']\"\n (selectedFileChange)=\"_selectedFileChange($event)\" [fileContainerName]=\"FileContainerName\"></fe-file-picker>\n <small class=\"form-text text-muted d-block\" *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small>\n </div>\n </div>\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n</form>","/* eslint-disable @angular-eslint/component-selector */\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'fe-file-explorer-view',\r\n templateUrl: './file-explorer-view.component.html',\r\n styleUrl: './file-explorer-view.component.scss',\r\n})\r\nexport class FileExplorerViewComponent {\r\n /**展示则内容 */\r\n showValue: any = '';\r\n\r\n /**是否显示再列表 */\r\n @Input() showInList: boolean = false;\r\n /**表单字段数据 */\r\n @Input() fields: any;\r\n\r\n /**表单控件类型 */\r\n @Input() type: any;\r\n\r\n /**表单控件Value */\r\n _value: any = '';\r\n @Input()\r\n public set value(v: any) {\r\n this._value = v;\r\n }\r\n\r\n async ngAfterContentInit(): Promise<void> {\r\n //Called after ngOnInit when the component's or directive's content has been initialized.\r\n //Add 'implements AfterContentInit' to the class.\r\n let valueOptions = this._value;\r\n if (this.type && valueOptions) {\r\n this.showValue = valueOptions;\r\n }\r\n }\r\n}\r\n","@if(showInList){\r\n@if(showValue.length>=1){\r\n<div class=\"d-flex align-items-center \">\r\n <fe-file-preview [width]=\"'40px'\" [className]=\"'rounded-5 overflow-hidden me-1'\" [src]=\"showValue[0].url\"\r\n [name]=\"showValue[0].name\" [type]=\"showValue[0].mimeType\" [preview]=\"true\"></fe-file-preview>\r\n @if(showValue.length-1>0){\r\n +{{showValue.length-1}}\r\n }\r\n</div>\r\n}\r\n} @else{\r\n<div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"fields.displayName\">{{ fields.displayName }}</label>\r\n</div>\r\n}","// import { TableConfigComponent, TableControlComponent, MatrixConfigComponent, MatrixControlComponent } from \"@dignite-ng/expand.cms\";\r\nimport { Type } from \"@angular/core\";\r\nimport { FileExplorerConfigComponent, FileExplorerControlComponent } from \"./file-explorer\";\r\nimport { FileExplorerViewComponent } from \"./file-explorer/file-explorer-view.component\";\r\n\r\nexport interface FieldControlGroupInterfaces {\r\n displayName: string\r\n name: string\r\n // type: TextEditMode,\r\n /**\r\n * 动态表单控件\r\n */\r\n fieldComponent?: Type<any>;\r\n\r\n /**\r\n * 表单控件配置组件\r\n */\r\n fieldConfigComponent?: Type<any>;\r\n\r\n /**\r\n * 条目列表中显示的组件\r\n */\r\n fieldViewComponent?: Type<any>;\r\n}\r\n\r\n\r\n\r\n/**\r\n * 表单控件分组-包含配置,控件,显示的数组\r\n */\r\nexport const fielFieldControlGroup: FieldControlGroupInterfaces[] = [\r\n \r\n {\r\n displayName: '文件管理',\r\n name: 'FileExplorer',\r\n fieldConfigComponent: FileExplorerConfigComponent,\r\n fieldComponent: FileExplorerControlComponent,\r\n fieldViewComponent:FileExplorerViewComponent,\r\n }\r\n];\r\nexport function getExcludeAssignControl(typeName) {\r\n // return FieldControlGroup.filter(el => el.name !== typeName)\r\n return fielFieldControlGroup\r\n}\r\n\r\nexport function AddFieldControlGroup(array=[]) {\r\n fielFieldControlGroup.push(...array)\r\n}","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { NgxValidateCoreModule } from '@ngx-validate/core';\nimport { FileExplorerRoutingModule } from './file-explorer-routing.module';\nimport { FileEditComponent, FilePickerComponent, FileModalComponent, FileModalTreeComponent, FileDomeComponent, fielFieldControlGroup } from './components';\nimport { FilePreviewComponent } from './previews/file-preview.component';\nimport { FileExplorerConfigComponent } from './components/dynamic-form/file-explorer/file-explorer-config.component';\nimport { FileExplorerControlComponent } from './components/dynamic-form/file-explorer/file-explorer-control.component';\nimport { FileExplorerViewComponent } from './components/dynamic-form/file-explorer/file-explorer-view.component';\nimport { TreeModule } from '@abp/ng.components/tree';\nimport { GetDirectoryNamePipe } from './pipe/get-directory-name.pipe';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\n\n@NgModule({\n declarations: [\n FileEditComponent,\n FilePickerComponent,\n FileModalComponent,\n FileModalTreeComponent,\n FileDomeComponent,\n FilePreviewComponent,\n FileExplorerConfigComponent,\n FileExplorerControlComponent,\n FileExplorerViewComponent,\n ],\n imports: [\n FormsModule,\n CoreModule,\n ThemeSharedModule,\n ReactiveFormsModule,\n NgbDropdownModule,\n NzTreeModule,\n NgxValidateCoreModule,\n FileExplorerRoutingModule,\n TreeModule,\n GetDirectoryNamePipe,\n DragDropModule,\n ],\n exports: [\n FileEditComponent,\n FilePickerComponent,\n FileModalComponent,\n FileModalTreeComponent,\n FileDomeComponent,\n FilePreviewComponent,\n // FileExplorerConfigComponent,\n // FileExplorerControlComponent,\n ],\n providers: [\n // GetImageUrlPipe\n // // [Required]\n // ListService,\n // // [Optional]\n // // Provide this token if you want a different debounce time.\n // // Default is 300. Cannot be 0. Any value below 100 is not recommended.\n // { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },\n ],\n})\nexport class FileExplorerModule {\n\n}\n","/*\n * Public API Surface of file-explorer\n */\n\n\nexport * from './lib/file-explorer.module';\nexport * from './lib/components/dynamic-form/form-control-group';\nexport * from './lib/components';\n// export * from './lib/services';\n// export * from './lib/proxy';\nexport * from './lib/previews';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FileApiService","i4.FilePreviewComponent","i1","FileDescriptorService","i1.FileDescriptorService","i2","i3","i4.FileApiService","i5","i6","i7","i8","i9.FileModalTreeComponent","i10.FilePreviewComponent","i11.GetDirectoryNamePipe","i5.FileModalComponent","i6.FilePreviewComponent","i1.FileEditComponent","i2.FilePickerComponent","i4.FilePickerComponent","i2.FilePreviewComponent"],"mappings":"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"}
|