Blame view

esm5/lib/modal-image-upload/modal-image-upload.component.js 29.5 KB
75f29219   Anan Sangthongtum   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { HttpClient, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ModalDirective } from 'ngx-bootstrap';
import { AppConfigService } from '../app-config/app-config.service';
import * as _ from 'lodash';
var ModalImageUploadComponent = /** @class */ (function () {
    function ModalImageUploadComponent(appConfigService, request, common, http) {
        var _this = this;
        this.appConfigService = appConfigService;
        this.request = request;
        this.common = common;
        this.http = http;
        this.upLoadType = [{ title: "File", type: 1 }, { title: "Scan", type: 2 }, { title: "Link", type: 3 }, { title: "QR Code", type: 3 }];
        this.systemId = '0';
        this.RelatedAgency = 'SOC';
        this.RecordId = '0';
        this.Subject = '-';
        this.TypeId = '0';
        this.popupTitle = 'เลือกรูปประจำตัว';
        this.uploaded = new EventEmitter();
        this.onSubmit = new EventEmitter();
        // @ViewChild('myModal') myModal;
        this.fileList = [];
        this.uploadHeaders = {
            "Authorization": "Basic " + btoa("APPSOC:123456")
        };
        this.loading = false;
        this.beforeUpload = function (file, _fileList) {
            return new Observable(function (observer) {
                /** @type {?} */
                var whitelist = [
                    'application/pdf',
                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                    'application/vnd.ms-excel',
                    'application/vnd.msexcel',
                    'application/csv',
                    'text/csv',
                    'application/msword',
                    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    'application/vnd.ms-powerpoint',
                    'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
                    'application/vnd.openxmlformats-officedocument.presentationml.presentation',
                    'text/plain',
                    'text/comma-separated-values',
                    'text/anytext',
                    'image/png',
                    'image/jpeg',
                    'image/gif',
                    'image/bmp'
                ];
                /** @type {?} */
                var isWhitelist = (file && whitelist.indexOf(file.type) > -1);
                if (!isWhitelist) {
                    setTimeout(function () {
                        _this.fileList = [{
                                uid: '999',
                                name: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                status: 'error',
                                response: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                url: null
                            }];
                    }, 50);
                    observer.complete();
                    return;
                }
                /** @type {?} */
                var isLt30M = /** @type {?} */ ((file.size)) / 1024 / 1024 < 30;
                if (!isLt30M) {
                    _this.fileList = [{
                            uid: '999',
                            name: 'File must smaller than 30MB!',
                            status: 'error',
                            response: 'File must smaller than 30MB!',
                            url: null
                        }];
                    observer.complete();
                    return;
                }
                observer.next(isWhitelist && isLt30M);
                observer.complete();
            });
        };
        this.customReq = function (item) {
            /** @type {?} */
            var formData = new FormData();
            // tslint:disable-next-line:no-any
            formData.append('FileData', /** @type {?} */ (item.file));
            formData.append('SystemId', '' + _this.systemId);
            formData.append('RelatedAgency', _this.RelatedAgency);
            formData.append('RecordId', _this.RecordId);
            formData.append('Subject', _this.Subject);
            formData.append('TypeId', _this.TypeId);
            /** @type {?} */
            var headers = new HttpHeaders();
            headers = headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            /** @type {?} */
            var req = new HttpRequest('POST', item.action, formData, {
                reportProgress: true,
                headers: headers
            });
            // req.headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            return _this.http.request(req).subscribe(function (event) {
                if (event.type === HttpEventType.UploadProgress) {
                    if (event.total > 0) {
                        (/** @type {?} */ (event)).percent = event.loaded / event.total * 100;
                    }
                    item.onProgress(event, item.file);
                }
                else if (event instanceof HttpResponse) {
                    // console.log("event.body",event.body);
                    // let res = JSON.parse(event.body);
                    if (_this.fileList && _this.fileList.length > 1) {
                        _this.fileList = [_this.fileList[_this.fileList.length - 1]];
                    }
                    _this.uploaded.emit(event.body);
                    _this.data = event.body;
                    item.onSuccess(event.body, item.file, event);
                }
            }, function (err) {
                item.onError(err, item.file);
            });
        };
        this.config = appConfigService.getConfig();
        this.url = _.get(this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
    }
    /**
     * @return {?}
     */
    ModalImageUploadComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
    };
    /**
     * @param {?} file
     * @return {?}
     */
    ModalImageUploadComponent.prototype.onUploaded = /**
     * @param {?} file
     * @return {?}
     */
    function (file) {
        var _this = this;
        console.log("file", file);
        /** @type {?} */
        var res = JSON.parse(file.request.response);
        this.request.getAttachmentLinkToken(this.url + '/' + res.uuid).then(function (url) {
            _this.avatarUrl = url;
        });
        this.uploaded.emit(res);
    };
    /**
     * @return {?}
     */
    ModalImageUploadComponent.prototype.clearValue = /**
     * @return {?}
     */
    function () {
        this.fileList = [];
    };
    /**
     * @return {?}
     */
    ModalImageUploadComponent.prototype.closeModal = /**
     * @return {?}
     */
    function () {
        this.modal.hide();
        this.data = null;
        this.fileList = [];
    };
    /**
     * @return {?}
     */
    ModalImageUploadComponent.prototype.clickSubmit = /**
     * @return {?}
     */
    function () {
        this.onSubmit.emit(this.data);
        this.modal.hide();
        this.data = null;
        this.fileList = [];
    };
    ModalImageUploadComponent.decorators = [
        { type: Component, args: [{
                    selector: 'modal-image-upload',
                    template: "<div class=\"modal fade\" bsModal #modal=\"bs-modal\" [config]=\"{backdrop: 'static'}\"\n     tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dialog-static-name1\">\n    <div class=\"modal-dialog modal-md\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 id=\"dialog-static-name\" class=\"modal-title pull-left\">{{popupTitle}}</h4>\n                <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeModal()\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n            </div>\n\n            <div class=\"modal-body\">\n                <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" (ngSubmit)=\"clickSubmit()\">\n                    <div class=\"ibox-body\">\n                        <div class=\"col-sm-12\" style=\"text-align: center\">\n                            <br>\n                            <nz-upload nzType=\"drag\"\n                                       [nzAction]=\"url\"\n                                       [nzCustomRequest]=\"customReq\"\n                                       nzFileType=\"image/png,image/jpeg,image/gif,image/bmp\"\n                                       [(nzFileList)]=\"fileList\"\n                                       [nzBeforeUpload]=\"beforeUpload\"\n                                       >\n                                <!--<nz-upload nzType=\"drag\"-->\n                                <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n                                <!--&gt;-->\n                                <a nz-button>\n                                    <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n                                </a>\n                            </nz-upload>\n                            <br>\n                        </div>\n                        <div class=\"col-sm-12\" style=\"text-align: center\" *ngIf=\"avatarUrl\">\n                            <div class=\"avatar-box\">\n                                <img [src]=\"avatarUrl\" alt=\"\">\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"m-portlet__foot m-portlet__foot--fit text-right\">\n                        <div class=\"m-form__actions\">\n                            <button type=\"submit\" class=\"btn btn-success btn-md btn-md-save\">\n                                \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\n                            </button>\n                            <button type=\"reset\" class=\"btn btn-default btn-md btn-md-search\" (click)=\"closeModal()\">\n                                \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n                            </button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n",
                    styles: ["\n    :host ::ng-deep .avatar-uploader > .ant-upload, :host ::ng-deep .avatar {\n      width: 128px;\n      height: 128px;\n    }\n    :host ::ng-deep .ant-upload-select-picture-card i {\n      font-size: 32px;\n      color: #999;\n    }\n    :host ::ng-deep .ant-upload-select-picture-card .ant-upload-text {\n      margin-top: 8px;\n      color: #666;\n    }\n  "]
                }] }
    ];
    /** @nocollapse */
    ModalImageUploadComponent.ctorParameters = function () { return [
        { type: AppConfigService },
        { type: Request },
        { type: Common },
        { type: HttpClient }
    ]; };
    ModalImageUploadComponent.propDecorators = {
        modal: [{ type: ViewChild, args: ['modal',] }],
        upLoadType: [{ type: Input }],
        systemId: [{ type: Input }],
        RelatedAgency: [{ type: Input }],
        RecordId: [{ type: Input }],
        Subject: [{ type: Input }],
        TypeId: [{ type: Input }],
        downloadToken: [{ type: Input }],
        popupTitle: [{ type: Input }],
        uploaded: [{ type: Output }],
        onSubmit: [{ type: Output }]
    };
    return ModalImageUploadComponent;
}());
export { ModalImageUploadComponent };
if (false) {
    /** @type {?} */
    ModalImageUploadComponent.prototype.modal;
    /** @type {?} */
    ModalImageUploadComponent.prototype.upLoadType;
    /** @type {?} */
    ModalImageUploadComponent.prototype.systemId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.RelatedAgency;
    /** @type {?} */
    ModalImageUploadComponent.prototype.RecordId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.Subject;
    /** @type {?} */
    ModalImageUploadComponent.prototype.TypeId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.downloadToken;
    /** @type {?} */
    ModalImageUploadComponent.prototype.popupTitle;
    /** @type {?} */
    ModalImageUploadComponent.prototype.uploaded;
    /** @type {?} */
    ModalImageUploadComponent.prototype.onSubmit;
    /** @type {?} */
    ModalImageUploadComponent.prototype.fileList;
    /** @type {?} */
    ModalImageUploadComponent.prototype.uploadHeaders;
    /** @type {?} */
    ModalImageUploadComponent.prototype.loading;
    /** @type {?} */
    ModalImageUploadComponent.prototype.avatarUrl;
    /** @type {?} */
    ModalImageUploadComponent.prototype.data;
    /** @type {?} */
    ModalImageUploadComponent.prototype.config;
    /** @type {?} */
    ModalImageUploadComponent.prototype.url;
    /** @type {?} */
    ModalImageUploadComponent.prototype.beforeUpload;
    /** @type {?} */
    ModalImageUploadComponent.prototype.customReq;
    /** @type {?} */
    ModalImageUploadComponent.prototype.appConfigService;
    /** @type {?} */
    ModalImageUploadComponent.prototype.request;
    /** @type {?} */
    ModalImageUploadComponent.prototype.common;
    /** @type {?} */
    ModalImageUploadComponent.prototype.http;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaW1hZ2UtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC1pbWFnZS11cGxvYWQvbW9kYWwtaW1hZ2UtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFDLFVBQVUsRUFBYSxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVsSCxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDOztJQThDeEIsbUNBQW9CLGdCQUFrQyxFQUFTLE9BQWdCLEVBQVMsTUFBYyxFQUFVLElBQWdCO1FBQWhJLGlCQUdDO1FBSG1CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7MEJBcEJyRyxDQUFDLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEtBQUssRUFB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SSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ3RCOzs7O0lBRUQsK0NBQVc7OztJQUFYO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDdEI7O2dCQTFLSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsczVGQUFrRDs2QkFFOUMsOFdBYUw7aUJBRUY7Ozs7Z0JBdkJPLGdCQUFnQjtnQkFSZixPQUFPO2dCQUNSLE1BQU07Z0JBRU4sVUFBVTs7O3dCQStCYixTQUFTLFNBQUMsT0FBTzs2QkFDakIsS0FBSzsyQkFDTCxLQUFLO2dDQUNMLEtBQUs7MkJBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUNMLEtBQUs7Z0NBQ0wsS0FBSzs2QkFDTCxLQUFLOzJCQUNMLE1BQU07MkJBQ04sTUFBTTs7b0NBN0NYOztTQWlDYSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9ufSBmcm9tICcuLi9fc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtVcGxvYWRYSFJBcmdzfSBmcm9tICduZy16b3Jyby1hbnRkJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycywgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTnpNZXNzYWdlU2VydmljZSwgfSBmcm9tICduZy16b3Jyby1hbnRkJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzL1J4JztcbmltcG9ydCB7TW9kYWxEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG4vLyBpbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbi8vIGltcG9ydCB7IFVwbG9hZEZpbGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3VwbG9hZCc7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21vZGFsLWltYWdlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWltYWdlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICA6aG9zdCA6Om5nLWRlZXAgLmF2YXRhci11cGxvYWRlciA+IC5hbnQtdXBsb2FkLCA6aG9zdCA6Om5nLWRlZXAgLmF2YXRhciB7XG4gICAgICB3aWR0aDogMTI4cHg7XG4gICAgICBoZWlnaHQ6IDEyOHB4O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLmFudC11cGxvYWQtc2VsZWN0LXBpY3R1cmUtY2FyZCBpIHtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIGNvbG9yOiAjOTk5O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLmFudC11cGxvYWQtc2VsZWN0LXBpY3R1cmUtY2FyZCAuYW50LXVwbG9hZC10ZXh0IHtcbiAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIGNvbG9yOiAjNjY2O1xuICAgIH1cbiAgYFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxJbWFnZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBASW5wdXQoKSB1cExvYWRUeXBlOiBhbnkgPSBbe3RpdGxlOlwiRmlsZVwiLHR5cGU6MX0se3RpdGxlOlwiU2NhblwiLHR5cGU6Mn0se3RpdGxlOlwiTGlua1wiLHR5cGU6M30se3RpdGxlOlwiUVIgQ29kZVwiLHR5cGU6M31dO1xuICAgIEBJbnB1dCgpIHN5c3RlbUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgUmVsYXRlZEFnZW5jeTogYW55ID0gJ1NPQyc7XG4gICAgQElucHV0KCkgUmVjb3JkSWQ6IGFueSA9ICcwJztcbiAgICBASW5wdXQoKSBTdWJqZWN0OiBhbnkgPSAnLSc7XG4gICAgQElucHV0KCkgVHlwZUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgZG93bmxvYWRUb2tlbjogYW55IDtcbiAgICBASW5wdXQoKSBwb3B1cFRpdGxlID0gJ+C5gOC4peC4t+C4reC4geC4o+C4ueC4m+C4m+C4o+C4sOC4iOC4s+C4leC4seC4pycgO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gQFZpZXdDaGlsZCgnbXlNb2RhbCcpIG15TW9kYWw7XG4gICAgZmlsZUxpc3Q6YW55ID0gW107XG4gICAgdXBsb2FkSGVhZGVyczphbnkgPSB7XG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJhc2ljIFwiK2J0b2EoXCJBUFBTT0M6MTIzNDU2XCIpXG4gICAgfTtcbiAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgYXZhdGFyVXJsOiBzdHJpbmc7XG4gICAgZGF0YTtcbiAgICBjb25maWc7XG4gICAgdXJsO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsIHB1YmxpYyBjb21tb246IENvbW1vbiwgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy51cmwgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2FwaVNlcnZlcnMuYWxmcmVzY28udXJsJykgfHwgXCJodHRwczovLzIwMy4xNTQuMzIuMTI2OjI1ODUvYXBpL21mZWMvQWxmcmVzY29cIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcblxuICAgIH1cbiAgICBvblVwbG9hZGVkKGZpbGUpe1xuICAgICAgICBjb25zb2xlLmxvZyhcImZpbGVcIixmaWxlKTtcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UoZmlsZS5yZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmdldEF0dGFjaG1lbnRMaW5rVG9rZW4odGhpcy51cmwrJy8nK3Jlcy51dWlkKS50aGVuKHVybCA9PiB7XG4gICAgICAgICAgICB0aGlzLmF2YXRhclVybCA9IHVybDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQuZW1pdChyZXMpO1xuICAgIH1cblxuICAgIGJlZm9yZVVwbG9hZCA9IChmaWxlOiBhbnksIF9maWxlTGlzdDogYW55KSA9PiAge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgd2hpdGVsaXN0ID0gW1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXNleGNlbCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9jc3YnLFxuICAgICAgICAgICAgICAndGV4dC9jc3YnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG4gICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgJ3RleHQvY29tbWEtc2VwYXJhdGVkLXZhbHVlcycsXG4gICAgICAgICAgICAgICd0ZXh0L2FueXRleHQnLFxuICAgICAgICAgICAgICAnaW1hZ2UvcG5nJyxcbiAgICAgICAgICAgICAgJ2ltYWdlL2pwZWcnLFxuICAgICAgICAgICAgICAnaW1hZ2UvZ2lmJyxcbiAgICAgICAgICAgICAgJ2ltYWdlL2JtcCdcblxuICAgICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBpc1doaXRlbGlzdCA9IChmaWxlICYmIHdoaXRlbGlzdC5pbmRleE9mKGZpbGUudHlwZSkgPiAtMSlcbiAgICAgICAgICBpZighaXNXaGl0ZWxpc3Qpe1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gWyB7XG4gICAgICAgICAgICAgICAgICAgICAgdWlkOiAnOTk5JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn4Liq4Liy4Lih4Liy4Lij4LiW4Lit4Lix4Lie4LmC4Lir4Lil4LiU4LmE4LiU4LmJ4LmA4LiJ4Lie4Liy4Liw4LmE4Lif4Lil4LmMICBwZGYgLCBwbmcgICwganBlZyAgLGdpZiAsIHRleHQgLCB3b3JkICwgZXhjZWwgLCBwb3dlcnBvaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6ICfguKrguLLguKHguLLguKPguJbguK3guLHguJ7guYLguKvguKXguJTguYTguJTguYnguYDguInguJ7guLLguLDguYTguJ/guKXguYwgIHBkZiAsIHBuZyAgLCBqcGVnICAsZ2lmICwgdGV4dCAsIHdvcmQgLCBleGNlbCAsIHBvd2VycG9pbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc0x0MzBNID0gZmlsZS5zaXplISAvIDEwMjQgLyAxMDI0IDwgMzA7XG4gICAgICAgICAgaWYgKCFpc0x0MzBNKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gWyB7XG4gICAgICAgICAgICAgICAgICB1aWQ6ICc5OTknLFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ0ZpbGUgbXVzdCBzbWFsbGVyIHRoYW4gMzBNQiEnLFxuICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6ICdGaWxlIG11c3Qgc21hbGxlciB0aGFuIDMwTUIhJyxcbiAgICAgICAgICAgICAgICAgIHVybDogbnVsbFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9ic2VydmVyLm5leHQoaXNXaGl0ZWxpc3QgJiYgaXNMdDMwTSk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG5cbiAgICBjdXN0b21SZXEgPSAoaXRlbTogVXBsb2FkWEhSQXJncykgPT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnRmlsZURhdGEnLCBpdGVtLmZpbGUgYXMgYW55KTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdTeXN0ZW1JZCcsICcnK3RoaXMuc3lzdGVtSWQpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlbGF0ZWRBZ2VuY3knLCB0aGlzLlJlbGF0ZWRBZ2VuY3kpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlY29yZElkJywgdGhpcy5SZWNvcmRJZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3ViamVjdCcsIHRoaXMuU3ViamVjdCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnVHlwZUlkJywgdGhpcy5UeXBlSWQpO1xuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EoJ0FQUFNPQzoxMjM0NTYnKSk7XG4gICAgICAgIGxldCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCBpdGVtLmFjdGlvbiwgZm9ybURhdGEsIHtcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzIDogdHJ1ZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlcS5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSgnQVBQU09DOjEyMzQ1NicpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KHJlcSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8e30+KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRvdGFsID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50IGFzIGFueSkucGVyY2VudCA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25Qcm9ncmVzcyhldmVudCwgaXRlbS5maWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXZlbnQuYm9keVwiLGV2ZW50LmJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgcmVzID0gSlNPTi5wYXJzZShldmVudC5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maWxlTGlzdCAmJiB0aGlzLmZpbGVMaXN0Lmxlbmd0aCA+IDEpe1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUxpc3QgPSBbdGhpcy5maWxlTGlzdFt0aGlzLmZpbGVMaXN0Lmxlbmd0aC0xXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkLmVtaXQoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGV2ZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25TdWNjZXNzKGV2ZW50LmJvZHksIGl0ZW0uZmlsZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLm9uRXJyb3IoZXJyLCBpdGVtLmZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVmFsdWUoKXtcbiAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xuICAgIH1cblxuICAgIGNsb3NlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW107XG4gICAgfVxuXG4gICAgY2xpY2tTdWJtaXQoKXtcbiAgICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZGF0YSk7XG4gICAgICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW107XG4gICAgfVxuXG59XG4iXX0=