@ironcode/vas-lib 1.8.0-alpha.1 → 1.8.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/lib/control-value/index.d.ts +1 -0
- package/cjs/lib/control-value/index.d.ts.map +1 -1
- package/cjs/lib/control-value/index.js +1 -0
- package/cjs/lib/control-value/index.js.map +1 -1
- package/cjs/lib/control-value/vas-camera-control-value.model.js +1 -2
- package/cjs/lib/control-value/vas-camera-control-value.model.js.map +1 -1
- package/cjs/lib/control-value/vas-function-control-value.dto.d.ts +7 -0
- package/cjs/lib/control-value/vas-function-control-value.dto.d.ts.map +1 -0
- package/cjs/lib/control-value/vas-function-control-value.dto.js +3 -0
- package/cjs/lib/control-value/vas-function-control-value.dto.js.map +1 -0
- package/cjs/lib/controls-config/index.d.ts +1 -0
- package/cjs/lib/controls-config/index.d.ts.map +1 -1
- package/cjs/lib/controls-config/index.js +1 -0
- package/cjs/lib/controls-config/index.js.map +1 -1
- package/cjs/lib/controls-config/vas-control-config-direction.enum.js +1 -1
- package/cjs/lib/controls-config/vas-control-config-direction.enum.js.map +1 -1
- package/cjs/lib/controls-config/vas-function-control-config.dto.d.ts +6 -0
- package/cjs/lib/controls-config/vas-function-control-config.dto.d.ts.map +1 -0
- package/cjs/lib/controls-config/vas-function-control-config.dto.js +3 -0
- package/cjs/lib/controls-config/vas-function-control-config.dto.js.map +1 -0
- package/cjs/lib/elastic/index.d.ts +2 -0
- package/cjs/lib/elastic/index.d.ts.map +1 -0
- package/cjs/lib/elastic/index.js +5 -0
- package/cjs/lib/elastic/index.js.map +1 -0
- package/cjs/lib/elastic/job.elastic-doc.d.ts +14 -0
- package/cjs/lib/elastic/job.elastic-doc.d.ts.map +1 -0
- package/cjs/lib/elastic/job.elastic-doc.js +3 -0
- package/cjs/lib/elastic/job.elastic-doc.js.map +1 -0
- package/cjs/lib/entity/index.d.ts +4 -0
- package/cjs/lib/entity/index.d.ts.map +1 -1
- package/cjs/lib/entity/index.js +4 -0
- package/cjs/lib/entity/index.js.map +1 -1
- package/cjs/lib/entity/vas-account.dto.js +1 -1
- package/cjs/lib/entity/vas-account.dto.js.map +1 -1
- package/cjs/lib/entity/vas-base.model.d.ts +5 -4
- package/cjs/lib/entity/vas-base.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-base.model.js +1 -1
- package/cjs/lib/entity/vas-base.model.js.map +1 -1
- package/cjs/lib/entity/vas-contact.model.d.ts +1 -0
- package/cjs/lib/entity/vas-contact.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-contact.model.js +22 -1
- package/cjs/lib/entity/vas-contact.model.js.map +1 -1
- package/cjs/lib/entity/vas-control.model.d.ts +6 -4
- package/cjs/lib/entity/vas-control.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-control.model.js +23 -3
- package/cjs/lib/entity/vas-control.model.js.map +1 -1
- package/cjs/lib/entity/vas-field.dto.d.ts +5 -1
- package/cjs/lib/entity/vas-field.dto.d.ts.map +1 -1
- package/cjs/lib/entity/vas-field.dto.js.map +1 -1
- package/cjs/lib/entity/vas-field.model.d.ts +10 -9
- package/cjs/lib/entity/vas-field.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-field.model.js +43 -27
- package/cjs/lib/entity/vas-field.model.js.map +1 -1
- package/cjs/lib/entity/vas-file.dto.js +1 -2
- package/cjs/lib/entity/vas-file.dto.js.map +1 -1
- package/cjs/lib/entity/vas-file.model.d.ts +1 -0
- package/cjs/lib/entity/vas-file.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-file.model.js +10 -0
- package/cjs/lib/entity/vas-file.model.js.map +1 -1
- package/cjs/lib/entity/vas-fire-user.model.d.ts +1 -1
- package/cjs/lib/entity/vas-fire-user.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-fire-user.model.js.map +1 -1
- package/cjs/lib/entity/vas-form-config.dto.d.ts +2 -23
- package/cjs/lib/entity/vas-form-config.dto.d.ts.map +1 -1
- package/cjs/lib/entity/vas-form-config.dto.js.map +1 -1
- package/cjs/lib/entity/vas-form-config.model.d.ts +3 -13
- package/cjs/lib/entity/vas-form-config.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-form-config.model.js.map +1 -1
- package/cjs/lib/entity/vas-form.model.d.ts +5 -0
- package/cjs/lib/entity/vas-form.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-form.model.js +21 -1
- package/cjs/lib/entity/vas-form.model.js.map +1 -1
- package/cjs/lib/entity/vas-group.model.d.ts +1 -0
- package/cjs/lib/entity/vas-group.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-group.model.js +11 -0
- package/cjs/lib/entity/vas-group.model.js.map +1 -1
- package/cjs/lib/entity/vas-invitation.js +1 -1
- package/cjs/lib/entity/vas-invitation.js.map +1 -1
- package/cjs/lib/entity/vas-job-action.dto.d.ts +67 -0
- package/cjs/lib/entity/vas-job-action.dto.d.ts.map +1 -0
- package/cjs/lib/entity/vas-job-action.dto.js +20 -0
- package/cjs/lib/entity/vas-job-action.dto.js.map +1 -0
- package/cjs/lib/entity/vas-job-email.model.d.ts +2 -0
- package/cjs/lib/entity/vas-job-email.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-job-email.model.js +15 -9
- package/cjs/lib/entity/vas-job-email.model.js.map +1 -1
- package/cjs/lib/entity/vas-job.dto.d.ts +10 -2
- package/cjs/lib/entity/vas-job.dto.d.ts.map +1 -1
- package/cjs/lib/entity/vas-job.dto.js.map +1 -1
- package/cjs/lib/entity/vas-job.model.d.ts +13 -4
- package/cjs/lib/entity/vas-job.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-job.model.js +49 -18
- package/cjs/lib/entity/vas-job.model.js.map +1 -1
- package/cjs/lib/entity/vas-lookup.model.d.ts +35 -0
- package/cjs/lib/entity/vas-lookup.model.d.ts.map +1 -0
- package/cjs/lib/entity/vas-lookup.model.js +73 -0
- package/cjs/lib/entity/vas-lookup.model.js.map +1 -0
- package/cjs/lib/entity/vas-note.model.d.ts +1 -0
- package/cjs/lib/entity/vas-note.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-note.model.js +9 -0
- package/cjs/lib/entity/vas-note.model.js.map +1 -1
- package/cjs/lib/entity/vas-report.dto.d.ts +1 -1
- package/cjs/lib/entity/vas-report.dto.d.ts.map +1 -1
- package/cjs/lib/entity/vas-report.dto.js.map +1 -1
- package/cjs/lib/entity/vas-report.model.d.ts +5 -2
- package/cjs/lib/entity/vas-report.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-report.model.js +15 -4
- package/cjs/lib/entity/vas-report.model.js.map +1 -1
- package/cjs/lib/entity/vas-task.dto.d.ts +1 -0
- package/cjs/lib/entity/vas-task.dto.d.ts.map +1 -1
- package/cjs/lib/entity/vas-task.dto.js.map +1 -1
- package/cjs/lib/entity/vas-task.model.d.ts +3 -1
- package/cjs/lib/entity/vas-task.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-task.model.js +16 -2
- package/cjs/lib/entity/vas-task.model.js.map +1 -1
- package/cjs/lib/entity/vas-user.model.d.ts +2 -2
- package/cjs/lib/entity/vas-user.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-user.model.js +1 -1
- package/cjs/lib/entity/vas-user.model.js.map +1 -1
- package/cjs/lib/entity/vas-vehicle.model.d.ts +1 -0
- package/cjs/lib/entity/vas-vehicle.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-vehicle.model.js +12 -0
- package/cjs/lib/entity/vas-vehicle.model.js.map +1 -1
- package/cjs/lib/utils/find-form-control.js.map +1 -1
- package/cjs/lib/utils/get-value-by-path.d.ts.map +1 -1
- package/cjs/lib/utils/get-value-by-path.js.map +1 -1
- package/cjs/lib/utils/is-array-string.d.ts +1 -1
- package/cjs/lib/utils/is-array-string.d.ts.map +1 -1
- package/cjs/lib/utils/omit.d.ts +8 -0
- package/cjs/lib/utils/omit.d.ts.map +1 -0
- package/cjs/lib/utils/omit.js +26 -0
- package/cjs/lib/utils/omit.js.map +1 -0
- package/cjs/lib/utils/only.d.ts +8 -0
- package/cjs/lib/utils/only.d.ts.map +1 -0
- package/cjs/lib/utils/only.js +26 -0
- package/cjs/lib/utils/only.js.map +1 -0
- package/cjs/public-api.d.ts +1 -0
- package/cjs/public-api.d.ts.map +1 -1
- package/cjs/public-api.js +1 -0
- package/cjs/public-api.js.map +1 -1
- package/{fesm2020 → fesm2022}/ironcode-vas-lib.mjs +905 -67
- package/fesm2022/ironcode-vas-lib.mjs.map +1 -0
- package/lib/control-value/index.d.ts +1 -0
- package/lib/control-value/vas-function-control-value.dto.d.ts +6 -0
- package/lib/controls-config/index.d.ts +1 -0
- package/lib/controls-config/vas-function-control-config.dto.d.ts +5 -0
- package/lib/elastic/index.d.ts +1 -0
- package/lib/elastic/job.elastic-doc.d.ts +13 -0
- package/lib/entity/index.d.ts +4 -0
- package/lib/entity/vas-base.model.d.ts +5 -4
- package/lib/entity/vas-contact.model.d.ts +1 -0
- package/lib/entity/vas-control.model.d.ts +6 -4
- package/lib/entity/vas-field.dto.d.ts +5 -1
- package/lib/entity/vas-field.model.d.ts +10 -9
- package/lib/entity/vas-file.model.d.ts +1 -0
- package/lib/entity/vas-fire-user.model.d.ts +1 -1
- package/lib/entity/vas-form-config.dto.d.ts +2 -23
- package/lib/entity/vas-form-config.model.d.ts +3 -13
- package/lib/entity/vas-form.model.d.ts +5 -0
- package/lib/entity/vas-group.model.d.ts +1 -0
- package/lib/entity/vas-job-action.dto.d.ts +66 -0
- package/lib/entity/vas-job-email.model.d.ts +2 -0
- package/lib/entity/vas-job.dto.d.ts +10 -2
- package/lib/entity/vas-job.model.d.ts +13 -4
- package/lib/entity/vas-lookup.model.d.ts +34 -0
- package/lib/entity/vas-note.model.d.ts +1 -0
- package/lib/entity/vas-report.dto.d.ts +1 -1
- package/lib/entity/vas-report.model.d.ts +5 -2
- package/lib/entity/vas-task.dto.d.ts +9 -0
- package/lib/entity/vas-task.model.d.ts +36 -0
- package/lib/entity/vas-user.model.d.ts +2 -2
- package/lib/entity/vas-vehicle.model.d.ts +1 -0
- package/lib/utils/is-array-string.d.ts +1 -1
- package/lib/utils/only.d.ts +7 -0
- package/package.json +4 -11
- package/public-api.d.ts +1 -0
- package/cjs/package.json +0 -66
- package/esm2020/ironcode-vas-lib.mjs +0 -5
- package/esm2020/lib/control-value/index.mjs +0 -2
- package/esm2020/lib/control-value/vas-camera-control-value.model.mjs +0 -8
- package/esm2020/lib/controls-config/index.mjs +0 -4
- package/esm2020/lib/controls-config/vas-control-config-direction.enum.mjs +0 -8
- package/esm2020/lib/controls-config/vas-control-config.model.mjs +0 -2
- package/esm2020/lib/controls-config/vas-select-control-config.model.mjs +0 -2
- package/esm2020/lib/entity/index.mjs +0 -65
- package/esm2020/lib/entity/vas-access-group.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-account-config.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-account-object.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-account-object.model.mjs +0 -24
- package/esm2020/lib/entity/vas-account.dto.mjs +0 -7
- package/esm2020/lib/entity/vas-base.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-base.model.mjs +0 -34
- package/esm2020/lib/entity/vas-branch.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-branch.model.mjs +0 -68
- package/esm2020/lib/entity/vas-contact-type.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-contact.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-contact.model.mjs +0 -84
- package/esm2020/lib/entity/vas-control-type.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-control-type.model.mjs +0 -52
- package/esm2020/lib/entity/vas-control.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-control.model.mjs +0 -171
- package/esm2020/lib/entity/vas-field.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-field.model.mjs +0 -97
- package/esm2020/lib/entity/vas-file.dto.mjs +0 -9
- package/esm2020/lib/entity/vas-file.model.mjs +0 -125
- package/esm2020/lib/entity/vas-fire-user.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-fire-user.model.mjs +0 -102
- package/esm2020/lib/entity/vas-form-config.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-form-config.model.mjs +0 -31
- package/esm2020/lib/entity/vas-form.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-form.model.mjs +0 -194
- package/esm2020/lib/entity/vas-group.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-group.model.mjs +0 -97
- package/esm2020/lib/entity/vas-instruction-job-field.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-instruction-job-field.model.mjs +0 -48
- package/esm2020/lib/entity/vas-instruction-job.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-instruction-job.model.mjs +0 -81
- package/esm2020/lib/entity/vas-instruction-provider.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-instruction-provider.model.mjs +0 -66
- package/esm2020/lib/entity/vas-instruction.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-instruction.model.mjs +0 -52
- package/esm2020/lib/entity/vas-invitation.mjs +0 -88
- package/esm2020/lib/entity/vas-job-data.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-job-data.model.mjs +0 -21
- package/esm2020/lib/entity/vas-job-email.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-job-email.model.mjs +0 -79
- package/esm2020/lib/entity/vas-job-status.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-job-type.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-job.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-job.model.mjs +0 -496
- package/esm2020/lib/entity/vas-lookup-type.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-lookup.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-membership.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-membership.model.mjs +0 -62
- package/esm2020/lib/entity/vas-note.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-note.model.mjs +0 -59
- package/esm2020/lib/entity/vas-report-layout.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-report-layout.model.mjs +0 -22
- package/esm2020/lib/entity/vas-report-request.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-report-request.model.mjs +0 -44
- package/esm2020/lib/entity/vas-report.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-report.model.mjs +0 -57
- package/esm2020/lib/entity/vas-restricted-account-object.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-restricted-account-object.model.mjs +0 -24
- package/esm2020/lib/entity/vas-task-type.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-user.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-user.model.mjs +0 -42
- package/esm2020/lib/entity/vas-vehicle.dto.mjs +0 -2
- package/esm2020/lib/entity/vas-vehicle.model.mjs +0 -57
- package/esm2020/lib/model/geo-location.mjs +0 -12
- package/esm2020/lib/model/index.mjs +0 -3
- package/esm2020/lib/model/vas-time-range.model.mjs +0 -2
- package/esm2020/lib/utils/get-value-by-path.mjs +0 -64
- package/esm2020/lib/utils/is-array-string.mjs +0 -4
- package/esm2020/public-api.mjs +0 -5
- package/fesm2015/ironcode-vas-lib.mjs +0 -2359
- package/fesm2015/ironcode-vas-lib.mjs.map +0 -1
- package/fesm2020/ironcode-vas-lib.mjs.map +0 -1
|
@@ -1,496 +0,0 @@
|
|
|
1
|
-
import { isFileDto } from './vas-file.dto';
|
|
2
|
-
import { UUID } from 'angular2-uuid';
|
|
3
|
-
import moment from 'moment';
|
|
4
|
-
import { getValueByPath } from '../utils/get-value-by-path';
|
|
5
|
-
import { VasFieldModel } from './vas-field.model';
|
|
6
|
-
import { VasRestrictedAccountObjectModel } from './vas-restricted-account-object.model';
|
|
7
|
-
import { getEmptyGeoLocation } from '../model/geo-location';
|
|
8
|
-
import { isCameraControlValueV1 } from '../control-value/vas-camera-control-value.model';
|
|
9
|
-
import { isArrayString } from '../utils/is-array-string';
|
|
10
|
-
/**
|
|
11
|
-
* JobModel
|
|
12
|
-
*/
|
|
13
|
-
export class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
14
|
-
constructor(id, created, serverCreated, createdBy, modified, serverModified, modifiedBy, createdByName, modifiedByName, account, accessGroup, reference, jobDate, jobStatus, jobType, assigneeId, formId, timeZoneOffset, pendingFields, childModified, version, fields, files, createdByDisplayName, modifiedByDisplayName, geoLocation) {
|
|
15
|
-
super(id, created, serverCreated, createdBy, modified, serverModified, modifiedBy, createdByName, modifiedByName, account, accessGroup);
|
|
16
|
-
this.id = id;
|
|
17
|
-
this.created = created;
|
|
18
|
-
this.serverCreated = serverCreated;
|
|
19
|
-
this.createdBy = createdBy;
|
|
20
|
-
this.modified = modified;
|
|
21
|
-
this.serverModified = serverModified;
|
|
22
|
-
this.modifiedBy = modifiedBy;
|
|
23
|
-
this.createdByName = createdByName;
|
|
24
|
-
this.modifiedByName = modifiedByName;
|
|
25
|
-
this.account = account;
|
|
26
|
-
this.accessGroup = accessGroup;
|
|
27
|
-
this.reference = reference;
|
|
28
|
-
this.jobDate = jobDate;
|
|
29
|
-
this.jobStatus = jobStatus;
|
|
30
|
-
this.jobType = jobType;
|
|
31
|
-
this.assigneeId = assigneeId;
|
|
32
|
-
this.formId = formId;
|
|
33
|
-
this.timeZoneOffset = timeZoneOffset;
|
|
34
|
-
this.pendingFields = pendingFields;
|
|
35
|
-
this.childModified = childModified;
|
|
36
|
-
this.version = version;
|
|
37
|
-
this.fields = fields;
|
|
38
|
-
this.files = files;
|
|
39
|
-
this.createdByDisplayName = createdByDisplayName;
|
|
40
|
-
this.modifiedByDisplayName = modifiedByDisplayName;
|
|
41
|
-
this.geoLocation = geoLocation;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Returns this with the dynamic interface
|
|
45
|
-
* @return {VasJobModelDynamicInterface}
|
|
46
|
-
*/
|
|
47
|
-
get $this() {
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Returns a list of Job dynamic properties i.e. those that are added by the
|
|
52
|
-
* dynamic forms
|
|
53
|
-
*/
|
|
54
|
-
get dynamicProperties() {
|
|
55
|
-
const nativeProps = this.staticProperties;
|
|
56
|
-
return Object
|
|
57
|
-
.getOwnPropertyNames(this)
|
|
58
|
-
.filter(prop => !nativeProps.includes(prop));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Returns the list of properties of the Job type
|
|
62
|
-
*/
|
|
63
|
-
get staticProperties() {
|
|
64
|
-
return Object.getOwnPropertyNames(VasJobModel.empty());
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* @return {VasJobModel}
|
|
68
|
-
*/
|
|
69
|
-
static empty() {
|
|
70
|
-
return new VasJobModel('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', moment().utcOffset(), 0, '', 0, [], [], '', '', getEmptyGeoLocation());
|
|
71
|
-
}
|
|
72
|
-
static fromDto(dto) {
|
|
73
|
-
const model = new VasJobModel(dto.id || '', dto.created || '', dto.serverCreated || '', dto.createdBy || '', dto.modified || '', dto.serverModified || '', dto.modifiedBy || '', dto.createdByName || '', dto.modifiedByName || '', dto.account || '', dto.accessGroup || '', dto.reference || '', dto.jobDate || '', dto.jobStatus || '', dto.jobType || '', dto.assigneeId || '', dto.formId || '', dto.timeZoneOffset || moment().utcOffset(), dto.pendingFields || 0, dto.childModified || '', dto.version || 0, dto.fields || [], dto.files || [], dto.createdByDisplayName || '', dto.modifiedByDisplayName || '', dto.geoLocation || getEmptyGeoLocation());
|
|
74
|
-
const emptyKeys = model.staticProperties;
|
|
75
|
-
Object
|
|
76
|
-
.keys(dto)
|
|
77
|
-
.filter(key => emptyKeys.indexOf(key) === -1)
|
|
78
|
-
.forEach((key) => model.$this[key] = dto[key]);
|
|
79
|
-
return model;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* This method will instantiate a new JobModel. The difference with this
|
|
83
|
-
* method of instantiation is that we are coming from a relation frame i.e.
|
|
84
|
-
* the job has a list of {@link VasFieldDto} instead of a Job document.
|
|
85
|
-
*
|
|
86
|
-
*/
|
|
87
|
-
static fromRelational(dto, form) {
|
|
88
|
-
const model = new VasJobModel(dto.id || '', dto.created || '', dto.serverCreated || '', dto.createdBy || '', dto.modified || '', dto.serverModified || '', dto.modifiedBy || '', dto.createdByName || '', dto.modifiedByName || '', dto.account || '', dto.accessGroup || '', dto.reference || '', dto.jobDate || '', dto.jobStatus || '', dto.jobType || '', dto.assigneeId || '', dto.formId || '', dto.timeZoneOffset || moment().utcOffset(), dto.pendingFields || 0, dto.childModified || '', dto.version || 0, dto.fields || [], dto.files || [], dto.createdByDisplayName || '', dto.modifiedByDisplayName || '', dto.geoLocation || getEmptyGeoLocation());
|
|
89
|
-
form.groups
|
|
90
|
-
.forEach(group => {
|
|
91
|
-
group.controls
|
|
92
|
-
.forEach(control => {
|
|
93
|
-
const field = dto.fields?.find(f => f.control === control.id);
|
|
94
|
-
if (!field) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
model.getGroup(group.name)[control.name] = field.value;
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
return model;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* @param {VasFormModel} formModel
|
|
104
|
-
* @return {Record<string, VasFieldDtoValue>}
|
|
105
|
-
*/
|
|
106
|
-
getFields(formModel) {
|
|
107
|
-
const fields = {};
|
|
108
|
-
formModel.groups
|
|
109
|
-
.forEach(group => {
|
|
110
|
-
group.controls.forEach(control => {
|
|
111
|
-
(fields)[control.reportTemplateName] =
|
|
112
|
-
this.getValueByPath([group.name, control.name]);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
return fields;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Will return an object whose keys are the names of all fields in the job.
|
|
119
|
-
* This method is similar to `getFields` except that this method will only
|
|
120
|
-
* return values where a value was set, as opposed to `getFields` which will
|
|
121
|
-
* return a value for every control even if not value was set, because it uses
|
|
122
|
-
* the form to drive the logic. Note also this method will return values for
|
|
123
|
-
* any Fields in the fields array.
|
|
124
|
-
* @return {Record<string, VasFieldDtoValue>}
|
|
125
|
-
*/
|
|
126
|
-
getFields2() {
|
|
127
|
-
let fields = {};
|
|
128
|
-
this.dynamicProperties
|
|
129
|
-
.forEach((groupName) => {
|
|
130
|
-
Object
|
|
131
|
-
.keys(this.$this[groupName])
|
|
132
|
-
.forEach(controlName => {
|
|
133
|
-
fields[controlName] = this.getValueByPath([groupName, controlName]);
|
|
134
|
-
});
|
|
135
|
-
}, {});
|
|
136
|
-
this.fields.forEach(field => fields[field.controlName] = field.value);
|
|
137
|
-
return fields;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Returns an object describing how many attachments were added to this job
|
|
141
|
-
* (camera controls and files), and how many have not been uploaded yet.
|
|
142
|
-
*
|
|
143
|
-
* @param formModel instance of {@link VasFormModel} that was used when the
|
|
144
|
-
* job was created
|
|
145
|
-
*/
|
|
146
|
-
getFilesUploadStatus(formModel) {
|
|
147
|
-
const pathsWithValue = formModel
|
|
148
|
-
.getCameraControlPaths()
|
|
149
|
-
.map(path => {
|
|
150
|
-
const value = this.getValueByPath(path);
|
|
151
|
-
if (value && !!value.id) {
|
|
152
|
-
return path;
|
|
153
|
-
}
|
|
154
|
-
return null;
|
|
155
|
-
})
|
|
156
|
-
.filter(path => path !== null ? path : null)
|
|
157
|
-
.filter(isArrayString);
|
|
158
|
-
let total = pathsWithValue.length;
|
|
159
|
-
total += this.files.length;
|
|
160
|
-
// calculate the number of camera images still to upload
|
|
161
|
-
let pending = pathsWithValue
|
|
162
|
-
.map(path => this.getValueByPath(path))
|
|
163
|
-
.map((value) => {
|
|
164
|
-
if (isFileDto(value)) {
|
|
165
|
-
return value.id && value.status !== 'COMPLETE';
|
|
166
|
-
}
|
|
167
|
-
else if (isCameraControlValueV1(value)) {
|
|
168
|
-
// if url is not set, it hasn't been uploaded
|
|
169
|
-
return value.id && !value.url;
|
|
170
|
-
}
|
|
171
|
-
return false;
|
|
172
|
-
})
|
|
173
|
-
.filter(hasUploaded => hasUploaded)
|
|
174
|
-
.length;
|
|
175
|
-
// add total from files that are pending
|
|
176
|
-
pending += this.files
|
|
177
|
-
.filter(value => value.status !== 'COMPLETE')
|
|
178
|
-
.length;
|
|
179
|
-
return {
|
|
180
|
-
pending,
|
|
181
|
-
total
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* This method will return the dynamic property from the JobModel that
|
|
186
|
-
* represent a group (from a form).
|
|
187
|
-
*
|
|
188
|
-
* @param name the name of the group
|
|
189
|
-
* @param init if true (default) and group is not found, initialise an empty
|
|
190
|
-
* group, otherwise throw an error
|
|
191
|
-
*/
|
|
192
|
-
getGroup(name, init = true) {
|
|
193
|
-
let prop;
|
|
194
|
-
if (this.staticProperties.includes(name)) {
|
|
195
|
-
throw Error(`invalid group name ${name}, not a dynamic property`);
|
|
196
|
-
}
|
|
197
|
-
else if (this.$this[name] === undefined) {
|
|
198
|
-
if (init) {
|
|
199
|
-
prop = this.$this[name] = {};
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
throw Error(`invalid group name ${name}, not found`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
prop = this.$this[name];
|
|
207
|
-
if (typeof prop !== 'object') {
|
|
208
|
-
throw Error(`invalid group name ${name}, not an object`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return prop;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* @param path path segments
|
|
215
|
-
*/
|
|
216
|
-
getValueByPath(path = []) {
|
|
217
|
-
return getValueByPath(path, this.$this);
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* In order to understand why we need this method it is important to
|
|
221
|
-
* understand that within the system, Jobs can be represented in one of two
|
|
222
|
-
* ways, document and relational.
|
|
223
|
-
*
|
|
224
|
-
* The important distinction is how values submitted by a form are stored.
|
|
225
|
-
*
|
|
226
|
-
* Jobs stored as documents (JSON objects) will store user values, as dynamic
|
|
227
|
-
* properties of the document.
|
|
228
|
-
*
|
|
229
|
-
* Whereas, Jobs stored as relational, will store user values in an array of
|
|
230
|
-
* {@link VasFieldDto} objects.
|
|
231
|
-
*
|
|
232
|
-
* Depending on where we are in the system, either one of these approaches can
|
|
233
|
-
* be more useful than the other.
|
|
234
|
-
*
|
|
235
|
-
* This method, assumes that the JobModel has been instantiated from a
|
|
236
|
-
* document representation, and serves to hydrate the fields array. In order
|
|
237
|
-
* to achieve this, knowledge of the {@link VasFormDto} that created the job
|
|
238
|
-
* is required.
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
* Job in document representation
|
|
242
|
-
* {
|
|
243
|
-
* id: <guid>,
|
|
244
|
-
* reference: "something"
|
|
245
|
-
* <other static job properties>...
|
|
246
|
-
* foo: {
|
|
247
|
-
* bar: "value"
|
|
248
|
-
* }
|
|
249
|
-
* }
|
|
250
|
-
*
|
|
251
|
-
* Job in relational representation
|
|
252
|
-
* {
|
|
253
|
-
* id: <guid>,
|
|
254
|
-
* reference: "something"
|
|
255
|
-
* <other static job properties>...
|
|
256
|
-
* <will not have dynamic properties>...
|
|
257
|
-
* fields: [
|
|
258
|
-
* {
|
|
259
|
-
* id: <guid>,
|
|
260
|
-
* <other field properties>,
|
|
261
|
-
* value: "value"
|
|
262
|
-
* }
|
|
263
|
-
* ]
|
|
264
|
-
* }
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
* @param formModel the VasFormModel that was used to create the job
|
|
268
|
-
* @param controlFieldIdMap This is used to determine the id each field.
|
|
269
|
-
* Either one will be found in the map, or a new one is generated.
|
|
270
|
-
* @param controlNames if a value is provided, it will be used
|
|
271
|
-
* to filter the fields that are returned.
|
|
272
|
-
* @return {Array<VasFieldDto>}
|
|
273
|
-
*/
|
|
274
|
-
hydrateFields(formModel, controlFieldIdMap = new Map(), controlNames) {
|
|
275
|
-
const fields = [];
|
|
276
|
-
formModel.groups
|
|
277
|
-
.forEach(group => {
|
|
278
|
-
group.controls.forEach(control => {
|
|
279
|
-
if (!control.name.startsWith('fields.')) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
if (controlNames && !controlNames.includes(control.name)) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
fields.push(VasFieldModel.fromDto({
|
|
286
|
-
// if the controlId exists in the map, use the associated fieldId,
|
|
287
|
-
// otherwise generate a new id for the field.
|
|
288
|
-
id: controlFieldIdMap.get(control.id) || UUID.UUID(),
|
|
289
|
-
account: this.account,
|
|
290
|
-
job: this.id,
|
|
291
|
-
createdBy: this.createdBy,
|
|
292
|
-
created: this.created,
|
|
293
|
-
modifiedBy: this.modifiedBy,
|
|
294
|
-
modified: this.modified,
|
|
295
|
-
control: control.id,
|
|
296
|
-
value: this.getValueByPath([group.name, control.name])
|
|
297
|
-
}));
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
this.fields = fields;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* A very non sophisticated way to set values in the job via paths
|
|
304
|
-
*
|
|
305
|
-
* For example:
|
|
306
|
-
*
|
|
307
|
-
* setValueByPath('value', ['foo', 'bar']);
|
|
308
|
-
*
|
|
309
|
-
* will make results in job
|
|
310
|
-
* {
|
|
311
|
-
* foo: {
|
|
312
|
-
* bar: 'value'
|
|
313
|
-
* }
|
|
314
|
-
* }
|
|
315
|
-
*
|
|
316
|
-
* @param value the value to set
|
|
317
|
-
* @param path path segments
|
|
318
|
-
*/
|
|
319
|
-
setValueByPath(value, path = []) {
|
|
320
|
-
switch (path.length) {
|
|
321
|
-
case 0: {
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
case 1: {
|
|
325
|
-
this[path[0]] = value;
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
case 2: {
|
|
329
|
-
// eslint-disable-next-line max-len
|
|
330
|
-
this.$this[path[0]][path[1]] = value;
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
case 3: {
|
|
334
|
-
// eslint-disable-next-line max-len
|
|
335
|
-
this.$this[path[0]][path[1]][path[2]] = value;
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
default: {
|
|
339
|
-
throw Error('path has too many segments');
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* @param staticOnly if true, will only output values for the static
|
|
345
|
-
* properties in the dto
|
|
346
|
-
*/
|
|
347
|
-
toDto(staticOnly = false) {
|
|
348
|
-
if (staticOnly) {
|
|
349
|
-
return {
|
|
350
|
-
id: this.id,
|
|
351
|
-
created: this.created,
|
|
352
|
-
createdBy: this.createdBy,
|
|
353
|
-
modified: this.modified,
|
|
354
|
-
modifiedBy: this.modifiedBy,
|
|
355
|
-
serverCreated: this.serverCreated,
|
|
356
|
-
serverModified: this.serverModified,
|
|
357
|
-
createdByName: this.createdByName,
|
|
358
|
-
modifiedByName: this.modifiedByName,
|
|
359
|
-
account: this.account,
|
|
360
|
-
accessGroup: this.accessGroup,
|
|
361
|
-
reference: this.reference,
|
|
362
|
-
jobDate: this.jobDate,
|
|
363
|
-
jobStatus: this.jobStatus,
|
|
364
|
-
jobType: this.jobType,
|
|
365
|
-
assigneeId: this.assigneeId,
|
|
366
|
-
formId: this.formId,
|
|
367
|
-
timeZoneOffset: this.timeZoneOffset,
|
|
368
|
-
pendingFields: this.pendingFields,
|
|
369
|
-
childModified: this.childModified,
|
|
370
|
-
version: this.version,
|
|
371
|
-
fields: this.fields,
|
|
372
|
-
files: this.files,
|
|
373
|
-
createdByDisplayName: this.createdByDisplayName,
|
|
374
|
-
modifiedByDisplayName: this.modifiedByDisplayName,
|
|
375
|
-
geoLocation: this.geoLocation
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
const dto = {};
|
|
379
|
-
[...this.staticProperties, ...this.dynamicProperties]
|
|
380
|
-
.forEach(prop => dto[prop] = this.$this[prop]);
|
|
381
|
-
return dto;
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* This method will parse a syntax that allows us to build strings from the
|
|
385
|
-
* values of from the job model. For example if the job model was:
|
|
386
|
-
*
|
|
387
|
-
* {
|
|
388
|
-
* foo: 'bar'
|
|
389
|
-
* }
|
|
390
|
-
*
|
|
391
|
-
* and we pass "i am foo {foo}", the result would be:
|
|
392
|
-
*
|
|
393
|
-
* "i am foo bar"
|
|
394
|
-
*
|
|
395
|
-
* we can also use moment to parse dates, for example if the job model was:
|
|
396
|
-
*
|
|
397
|
-
* {
|
|
398
|
-
* created: "2022-01-01T00:00:00+0000"
|
|
399
|
-
* }
|
|
400
|
-
*
|
|
401
|
-
* and we pass "{created|date:YY-MM-DD}", the result would be:
|
|
402
|
-
*
|
|
403
|
-
* "2022-01-01"
|
|
404
|
-
*
|
|
405
|
-
* @param {string} value a string with the syntax
|
|
406
|
-
* @param {ParseSyntaxOptions} options
|
|
407
|
-
* @return the results of parsing the syntax on this job
|
|
408
|
-
*/
|
|
409
|
-
parseSyntax(value, options = {
|
|
410
|
-
timeZoneOffset: 0
|
|
411
|
-
}) {
|
|
412
|
-
if (!value || typeof value !== 'string') {
|
|
413
|
-
return '';
|
|
414
|
-
}
|
|
415
|
-
return value.replace(/({[^}]*})/g, (match, token) => {
|
|
416
|
-
const syntax = token.substring(1, token.length - 1);
|
|
417
|
-
let [key, filter] = syntax.split('|');
|
|
418
|
-
key = (key || '').trim();
|
|
419
|
-
filter = (filter || '').trim();
|
|
420
|
-
let filterName, filterArg = '';
|
|
421
|
-
if (filter) {
|
|
422
|
-
const splitIndex = filter.indexOf(':');
|
|
423
|
-
if (splitIndex !== -1) {
|
|
424
|
-
filterName = filter.substring(0, splitIndex);
|
|
425
|
-
filterArg = filter.substring(splitIndex + 1);
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
filterName = filter;
|
|
429
|
-
filterArg = '';
|
|
430
|
-
}
|
|
431
|
-
filterName = (filterName || '').trim();
|
|
432
|
-
filterArg = (filterArg || '').trim();
|
|
433
|
-
}
|
|
434
|
-
const path = key.split('.');
|
|
435
|
-
const objectKey = path.shift() || '';
|
|
436
|
-
let result = '';
|
|
437
|
-
if (objectKey === 'job') {
|
|
438
|
-
result = (this.getValueByPath(path) || '').toString();
|
|
439
|
-
}
|
|
440
|
-
else if (objectKey === 'fields') {
|
|
441
|
-
result = (getValueByPath(['fields.' + path.shift(), ...path], this.getFields2()) || '').toString();
|
|
442
|
-
}
|
|
443
|
-
else if (objectKey.length) {
|
|
444
|
-
if (options.objects) {
|
|
445
|
-
if (options.objects[objectKey] === undefined) {
|
|
446
|
-
console.debug(`objectKey ${objectKey} is not present in options.object`);
|
|
447
|
-
result = '';
|
|
448
|
-
}
|
|
449
|
-
else {
|
|
450
|
-
result = (getValueByPath(path, options.objects[objectKey]) || '')
|
|
451
|
-
.toString();
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
console.debug(`objectKey ${objectKey} was used but options.object is not set`);
|
|
456
|
-
return '';
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
return '';
|
|
461
|
-
}
|
|
462
|
-
if (filterName && result) {
|
|
463
|
-
switch (filterName) {
|
|
464
|
-
case 'date': {
|
|
465
|
-
return moment(result)
|
|
466
|
-
.utcOffset(options.timeZoneOffset)
|
|
467
|
-
.format(filterArg || '');
|
|
468
|
-
}
|
|
469
|
-
default: {
|
|
470
|
-
console.warn('unknown filter %s', filterName);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return result;
|
|
475
|
-
}).trim();
|
|
476
|
-
}
|
|
477
|
-
;
|
|
478
|
-
/**
|
|
479
|
-
* @return {object}
|
|
480
|
-
*/
|
|
481
|
-
toApiDto() {
|
|
482
|
-
return {
|
|
483
|
-
...super.toApiDto(),
|
|
484
|
-
reference: this.reference || '~',
|
|
485
|
-
jobDate: this.jobDate || '~',
|
|
486
|
-
jobType: this.jobType || '~',
|
|
487
|
-
accessGroup: this.accessGroup || '~',
|
|
488
|
-
jobStatus: this.jobStatus || '~',
|
|
489
|
-
assigneeId: this.assigneeId || '~',
|
|
490
|
-
timeZoneOffset: this.timeZoneOffset || 0,
|
|
491
|
-
pendingFields: this.pendingFields || 0,
|
|
492
|
-
lastForm: this.formId || '~'
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWpvYi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWpvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQThCLE1BQU0saURBQWlELENBQUM7QUFDckgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBcUJ6RDs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsK0JBQStCO0lBRTlELFlBQ2tCLEVBQVUsRUFDVixPQUFlLEVBQ2YsYUFBcUIsRUFDckIsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsVUFBa0IsRUFDbEIsYUFBcUIsRUFDckIsY0FBc0IsRUFDdEIsT0FBZSxFQUNmLFdBQW1CLEVBQzVCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixTQUFpQixFQUNqQixPQUFlLEVBQ2YsVUFBa0IsRUFDbEIsTUFBYyxFQUNkLGNBQXNCLEVBQ3RCLGFBQXFCLEVBQ3JCLGFBQXFCLEVBQ3JCLE9BQWUsRUFDZixNQUEwQixFQUMxQixLQUF3QixFQUN4QixvQkFBNEIsRUFDNUIscUJBQTZCLEVBQzdCLFdBQXdCO1FBRS9CLEtBQUssQ0FD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QyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQzVCO29CQUNELE9BQU8sQ0FBQyxDQUFDO3dCQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQy9DO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFBQSxDQUFDO0lBRUY7O09BRUc7SUFDTSxRQUFRO1FBQ2YsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUc7WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRztZQUM1QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxHQUFHO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUc7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRztZQUNsQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUM7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRztTQUM3QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGaWxlRHRvLCBWYXNGaWxlRHRvIH0gZnJvbSAnLi92YXMtZmlsZS5kdG8nO1xuaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZ2V0VmFsdWVCeVBhdGggfSBmcm9tICcuLi91dGlscy9nZXQtdmFsdWUtYnktcGF0aCc7XG5pbXBvcnQgeyBWYXNCYXNlRHRvIH0gZnJvbSAnLi92YXMtYmFzZS5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGREdG8sIFZhc0ZpZWxkRHRvVmFsdWUgfSBmcm9tICcuL3Zhcy1maWVsZC5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGRNb2RlbCB9IGZyb20gJy4vdmFzLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IFZhc0Zvcm1Nb2RlbCB9IGZyb20gJy4vdmFzLWZvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVmFzSm9iRHRvIH0gZnJvbSAnLi92YXMtam9iLmR0byc7XG5pbXBvcnQgeyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIH0gZnJvbSAnLi92YXMtcmVzdHJpY3RlZC1hY2NvdW50LW9iamVjdC5tb2RlbCc7XG5pbXBvcnQgeyBHZW9Mb2NhdGlvbiwgZ2V0RW1wdHlHZW9Mb2NhdGlvbiB9IGZyb20gJy4uL21vZGVsL2dlby1sb2NhdGlvbic7XG5pbXBvcnQgeyBpc0NhbWVyYUNvbnRyb2xWYWx1ZVYxLCBWYXNDYW1lcmFDb250cm9sVmFsdWVNb2RlbCB9IGZyb20gJy4uL2NvbnRyb2wtdmFsdWUvdmFzLWNhbWVyYS1jb250cm9sLXZhbHVlLm1vZGVsJztcbmltcG9ydCB7IGlzQXJyYXlTdHJpbmcgfSBmcm9tICcuLi91dGlscy9pcy1hcnJheS1zdHJpbmcnO1xuaW1wb3J0IHsgVmFzRm9ybUR0byB9IGZyb20gJy4vdmFzLWZvcm0uZHRvJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFZhc0pvYk1vZGVsRHluYW1pY0ludGVyZmFjZSB7XG4gIFtzOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVN5bnRheE9wdGlvbnMge1xuICAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBhZGp1c3QgYW55IGRhdGV0aW1lIHZhbHVlcyB0aGF0IGFyZSByZWZlcmVuY2VkXG4gIC8vIGluIHRoZSBzeW50YXggc3RyaW5nLiBTZWVcbiAgLy8gaHR0cHM6Ly9tb21lbnRqc2NvbS5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbW9tZW50LzAzLW1hbmlwdWxhdGluZy8wOS11dGMtb2Zmc2V0L1xuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgYG1vbWVudGAgd2lsbCBoYW5kbGUgdGhlIHZhbHVlLlxuICB0aW1lWm9uZU9mZnNldDogbnVtYmVyLFxuICAvLyB0aGlzIGRpY3Rpb25hcnkgY2FuIGJlIHBhc3NlZCBpbiB0byBjb250YWluIG90aGVyIG9iamVjdHMgdG8gYmUgcmVmZXJlbmNlZFxuICAvLyBpbiB0aGUgc3ludGF4LiBGb3IgZXhhbXBsZSBpZiB3ZSBoYXZlIHtqb2IuZm9vfSB0aGlzIHdpbGwgcmVmZXJlbmNlIHRoZVxuICAvLyBqb2IncyBgZm9vYCBwcm9wZXJ0eSwgaG93ZXZlciBpZiB3ZSBoYXZlIFwicmVwb3J0TGF5b3V0LnRpdGxlXCIgdGhpcyB3aWxsXG4gIC8vIGV4cGVjdCB0byBmaW5kIGEgcHJvcGVydHkgb2YgYG9iamVjdHNgIGNhbGxlZCBgcmVwb3J0TGF5b3V0YCB3aGljaCB3aWxsXG4gIC8vIGhhdmUgYSBwcm9wZXJ0eSBjYWxsZWQgYHRpdGxlYFxuICBvYmplY3RzPzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxWYXNCYXNlRHRvPiB8IFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+Pjtcbn1cblxuLyoqXG4gKiBKb2JNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgVmFzSm9iTW9kZWwgZXh0ZW5kcyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJDcmVhdGVkOiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWRCeTogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJNb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZEJ5OiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWRCeU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW9kaWZpZWRCeU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWNjb3VudDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NHcm91cDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWZlcmVuY2U6IHN0cmluZyxcbiAgICBwdWJsaWMgam9iRGF0ZTogc3RyaW5nLFxuICAgIHB1YmxpYyBqb2JTdGF0dXM6IHN0cmluZyxcbiAgICBwdWJsaWMgam9iVHlwZTogc3RyaW5nLFxuICAgIHB1YmxpYyBhc3NpZ25lZUlkOiBzdHJpbmcsXG4gICAgcHVibGljIGZvcm1JZDogc3RyaW5nLFxuICAgIHB1YmxpYyB0aW1lWm9uZU9mZnNldDogbnVtYmVyLFxuICAgIHB1YmxpYyBwZW5kaW5nRmllbGRzOiBudW1iZXIsXG4gICAgcHVibGljIGNoaWxkTW9kaWZpZWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgdmVyc2lvbjogbnVtYmVyLFxuICAgIHB1YmxpYyBmaWVsZHM6IEFycmF5PFZhc0ZpZWxkRHRvPixcbiAgICBwdWJsaWMgZmlsZXM6IEFycmF5PFZhc0ZpbGVEdG8+LFxuICAgIHB1YmxpYyBjcmVhdGVkQnlEaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyBtb2RpZmllZEJ5RGlzcGxheU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgZ2VvTG9jYXRpb246IEdlb0xvY2F0aW9uXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgaWQsXG4gICAgICBjcmVhdGVkLFxuICAgICAgc2VydmVyQ3JlYXRlZCxcbiAgICAgIGNyZWF0ZWRCeSxcbiAgICAgIG1vZGlmaWVkLFxuICAgICAgc2VydmVyTW9kaWZpZWQsXG4gICAgICBtb2RpZmllZEJ5LFxuICAgICAgY3JlYXRlZEJ5TmFtZSxcbiAgICAgIG1vZGlmaWVkQnlOYW1lLFxuICAgICAgYWNjb3VudCxcbiAgICAgIGFjY2Vzc0dyb3VwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgd2l0aCB0aGUgZHluYW1pYyBpbnRlcmZhY2VcbiAgICogQHJldHVybiB7VmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlfVxuICAgKi9cbiAgZ2V0ICR0aGlzKCk6IFZhc0pvYk1vZGVsRHluYW1pY0ludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIEpvYiBkeW5hbWljIHByb3BlcnRpZXMgaS5lLiB0aG9zZSB0aGF0IGFyZSBhZGRlZCBieSB0aGVcbiAgICogZHluYW1pYyBmb3Jtc1xuICAgKi9cbiAgZ2V0IGR5bmFtaWNQcm9wZXJ0aWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IG5hdGl2ZVByb3BzID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzO1xuICAgIHJldHVybiBPYmplY3RcbiAgICAgIC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpXG4gICAgICAuZmlsdGVyKHByb3AgPT4gIW5hdGl2ZVByb3BzLmluY2x1ZGVzKHByb3ApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIEpvYiB0eXBlXG4gICAqL1xuICBnZXQgc3RhdGljUHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVmFzSm9iTW9kZWwuZW1wdHkoKSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VmFzSm9iTW9kZWx9XG4gICAqL1xuICBzdGF0aWMgZW1wdHkoKTogVmFzSm9iTW9kZWwge1xuICAgIHJldHVybiBuZXcgVmFzSm9iTW9kZWwoXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgbW9tZW50KCkudXRjT2Zmc2V0KCksXG4gICAgICAwLFxuICAgICAgJycsXG4gICAgICAwLFxuICAgICAgW10sXG4gICAgICBbXSxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICBnZXRFbXB0eUdlb0xvY2F0aW9uKClcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIGZyb21EdG8oZHRvOiBQYXJ0aWFsPFZhc0pvYkR0bz4pOiBWYXNKb2JNb2RlbCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgVmFzSm9iTW9kZWwoXG4gICAgICBkdG8uaWQgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZCB8fCAnJyxcbiAgICAgIGR0by5zZXJ2ZXJDcmVhdGVkIHx8ICcnLFxuICAgICAgZHRvLmNyZWF0ZWRCeSB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by5zZXJ2ZXJNb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZEJ5IHx8ICcnLFxuICAgICAgZHRvLmNyZWF0ZWRCeU5hbWUgfHwgJycsXG4gICAgICBkdG8ubW9kaWZpZWRCeU5hbWUgfHwgJycsXG4gICAgICBkdG8uYWNjb3VudCB8fCAnJyxcbiAgICAgIGR0by5hY2Nlc3NHcm91cCB8fCAnJyxcbiAgICAgIGR0by5yZWZlcmVuY2UgfHwgJycsXG4gICAgICBkdG8uam9iRGF0ZSB8fCAnJyxcbiAgICAgIGR0by5qb2JTdGF0dXMgfHwgJycsXG4gICAgICBkdG8uam9iVHlwZSB8fCAnJyxcbiAgICAgIGR0by5hc3NpZ25lZUlkIHx8ICcnLFxuICAgICAgZHRvLmZvcm1JZCB8fCAnJyxcbiAgICAgIGR0by50aW1lWm9uZU9mZnNldCB8fCBtb21lbnQoKS51dGNPZmZzZXQoKSxcbiAgICAgIGR0by5wZW5kaW5nRmllbGRzIHx8IDAsXG4gICAgICBkdG8uY2hpbGRNb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by52ZXJzaW9uIHx8IDAsXG4gICAgICBkdG8uZmllbGRzIHx8IFtdLFxuICAgICAgZHRvLmZpbGVzIHx8IFtdLFxuICAgICAgZHRvLmNyZWF0ZWRCeURpc3BsYXlOYW1lIHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkQnlEaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5nZW9Mb2NhdGlvbiB8fCBnZXRFbXB0eUdlb0xvY2F0aW9uKClcbiAgICApO1xuICAgIGNvbnN0IGVtcHR5S2V5cyA9IG1vZGVsLnN0YXRpY1Byb3BlcnRpZXM7XG4gICAgT2JqZWN0XG4gICAgICAua2V5cyhkdG8pXG4gICAgICAuZmlsdGVyKGtleSA9PiBlbXB0eUtleXMuaW5kZXhPZihrZXkpID09PSAtMSlcbiAgICAgIC5mb3JFYWNoKChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgbW9kZWwuJHRoaXNba2V5XSA9IChkdG8gYXMgVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlKVtrZXldXG4gICAgICApO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGluc3RhbnRpYXRlIGEgbmV3IEpvYk1vZGVsLiBUaGUgZGlmZmVyZW5jZSB3aXRoIHRoaXNcbiAgICogbWV0aG9kIG9mIGluc3RhbnRpYXRpb24gaXMgdGhhdCB3ZSBhcmUgY29taW5nIGZyb20gYSByZWxhdGlvbiBmcmFtZSBpLmUuXG4gICAqIHRoZSBqb2IgaGFzIGEgbGlzdCBvZiB7QGxpbmsgVmFzRmllbGREdG99IGluc3RlYWQgb2YgYSBKb2IgZG9jdW1lbnQuXG4gICAqXG4gICAqL1xuICBzdGF0aWMgZnJvbVJlbGF0aW9uYWwoXG4gICAgZHRvOiBQYXJ0aWFsPFZhc0pvYkR0bz4sXG4gICAgZm9ybTogVmFzRm9ybUR0b1xuICApOiBWYXNKb2JNb2RlbCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgVmFzSm9iTW9kZWwoXG4gICAgICBkdG8uaWQgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZCB8fCAnJyxcbiAgICAgIGR0by5zZXJ2ZXJDcmVhdGVkIHx8ICcnLFxuICAgICAgZHRvLmNyZWF0ZWRCeSB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by5zZXJ2ZXJNb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZEJ5IHx8ICcnLFxuICAgICAgZHRvLmNyZWF0ZWRCeU5hbWUgfHwgJycsXG4gICAgICBkdG8ubW9kaWZpZWRCeU5hbWUgfHwgJycsXG4gICAgICBkdG8uYWNjb3VudCB8fCAnJyxcbiAgICAgIGR0by5hY2Nlc3NHcm91cCB8fCAnJyxcbiAgICAgIGR0by5yZWZlcmVuY2UgfHwgJycsXG4gICAgICBkdG8uam9iRGF0ZSB8fCAnJyxcbiAgICAgIGR0by5qb2JTdGF0dXMgfHwgJycsXG4gICAgICBkdG8uam9iVHlwZSB8fCAnJyxcbiAgICAgIGR0by5hc3NpZ25lZUlkIHx8ICcnLFxuICAgICAgZHRvLmZvcm1JZCB8fCAnJyxcbiAgICAgIGR0by50aW1lWm9uZU9mZnNldCB8fCBtb21lbnQoKS51dGNPZmZzZXQoKSxcbiAgICAgIGR0by5wZW5kaW5nRmllbGRzIHx8IDAsXG4gICAgICBkdG8uY2hpbGRNb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by52ZXJzaW9uIHx8IDAsXG4gICAgICBkdG8uZmllbGRzIHx8IFtdLFxuICAgICAgZHRvLmZpbGVzIHx8IFtdLFxuICAgICAgZHRvLmNyZWF0ZWRCeURpc3BsYXlOYW1lIHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkQnlEaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5nZW9Mb2NhdGlvbiB8fCBnZXRFbXB0eUdlb0xvY2F0aW9uKClcbiAgICApO1xuXG4gICAgZm9ybS5ncm91cHNcbiAgICAgIC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgZ3JvdXAuY29udHJvbHNcbiAgICAgICAgICAuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZHRvLmZpZWxkcz8uZmluZChmID0+IGYuY29udHJvbCA9PT0gY29udHJvbC5pZCk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1vZGVsLmdldEdyb3VwKGdyb3VwLm5hbWUpW2NvbnRyb2wubmFtZV0gPSBmaWVsZC52YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Zhc0Zvcm1Nb2RlbH0gZm9ybU1vZGVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+fVxuICAgKi9cbiAgZ2V0RmllbGRzKGZvcm1Nb2RlbDogVmFzRm9ybU1vZGVsKTogUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4ge1xuICAgIGNvbnN0IGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBWYXNGaWVsZER0b1ZhbHVlIH0gPSB7fTtcbiAgICBmb3JtTW9kZWwuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgKGZpZWxkcylbY29udHJvbC5yZXBvcnRUZW1wbGF0ZU5hbWVdID1cbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVCeVBhdGgoW2dyb3VwLm5hbWUsIGNvbnRyb2wubmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZXR1cm4gYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiBhbGwgZmllbGRzIGluIHRoZSBqb2IuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8gYGdldEZpZWxkc2AgZXhjZXB0IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBvbmx5XG4gICAqIHJldHVybiB2YWx1ZXMgd2hlcmUgYSB2YWx1ZSB3YXMgc2V0LCBhcyBvcHBvc2VkIHRvIGBnZXRGaWVsZHNgIHdoaWNoIHdpbGxcbiAgICogcmV0dXJuIGEgdmFsdWUgZm9yIGV2ZXJ5IGNvbnRyb2wgZXZlbiBpZiBub3QgdmFsdWUgd2FzIHNldCwgYmVjYXVzZSBpdCB1c2VzXG4gICAqIHRoZSBmb3JtIHRvIGRyaXZlIHRoZSBsb2dpYy4gTm90ZSBhbHNvIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHZhbHVlcyBmb3JcbiAgICogYW55IEZpZWxkcyBpbiB0aGUgZmllbGRzIGFycmF5LlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPn1cbiAgICovXG4gIGdldEZpZWxkczIoKTogUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4ge1xuICAgIGxldCBmaWVsZHM6IHsgW2tleTogc3RyaW5nXTogVmFzRmllbGREdG9WYWx1ZSB9ID0ge307XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllc1xuICAgICAgLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICBPYmplY3RcbiAgICAgICAgICAua2V5cyh0aGlzLiR0aGlzW2dyb3VwTmFtZV0pXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xuICAgICAgICAgICAgZmllbGRzW2NvbnRyb2xOYW1lXSA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoW2dyb3VwTmFtZSwgY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0sIHt9KTtcbiAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IGZpZWxkc1tmaWVsZC5jb250cm9sTmFtZV0gPSBmaWVsZC52YWx1ZSk7XG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCBkZXNjcmliaW5nIGhvdyBtYW55IGF0dGFjaG1lbnRzIHdlcmUgYWRkZWQgdG8gdGhpcyBqb2JcbiAgICogKGNhbWVyYSBjb250cm9scyBhbmQgZmlsZXMpLCBhbmQgaG93IG1hbnkgaGF2ZSBub3QgYmVlbiB1cGxvYWRlZCB5ZXQuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtTW9kZWwgaW5zdGFuY2Ugb2Yge0BsaW5rIFZhc0Zvcm1Nb2RlbH0gdGhhdCB3YXMgdXNlZCB3aGVuIHRoZVxuICAgKiBqb2Igd2FzIGNyZWF0ZWRcbiAgICovXG4gIGdldEZpbGVzVXBsb2FkU3RhdHVzKFxuICAgIGZvcm1Nb2RlbDogVmFzRm9ybU1vZGVsXG4gICk6IHsgcGVuZGluZzogbnVtYmVyOyB0b3RhbDogbnVtYmVyIH0ge1xuXG4gICAgY29uc3QgcGF0aHNXaXRoVmFsdWU6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gZm9ybU1vZGVsXG4gICAgICAuZ2V0Q2FtZXJhQ29udHJvbFBhdGhzKClcbiAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBWYXNGaWxlRHRvIHwgVmFzQ2FtZXJhQ29udHJvbFZhbHVlTW9kZWwgPVxuICAgICAgICAgIHRoaXMuZ2V0VmFsdWVCeVBhdGgocGF0aCkgYXMgYW55O1xuICAgICAgICBpZiAodmFsdWUgJiYgISF2YWx1ZS5pZCkge1xuICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIocGF0aCA9PiBwYXRoICE9PSBudWxsID8gcGF0aCA6IG51bGwpXG4gICAgICAuZmlsdGVyKGlzQXJyYXlTdHJpbmcpO1xuXG4gICAgbGV0IHRvdGFsID0gcGF0aHNXaXRoVmFsdWUubGVuZ3RoO1xuXG4gICAgdG90YWwgKz0gdGhpcy5maWxlcy5sZW5ndGg7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjYW1lcmEgaW1hZ2VzIHN0aWxsIHRvIHVwbG9hZFxuICAgIGxldCBwZW5kaW5nID0gcGF0aHNXaXRoVmFsdWVcbiAgICAgIC5tYXAocGF0aCA9PiB0aGlzLmdldFZhbHVlQnlQYXRoKHBhdGgpIGFzIGFueSlcbiAgICAgIC5tYXAoKHZhbHVlOiBWYXNGaWxlRHRvIHwgVmFzQ2FtZXJhQ29udHJvbFZhbHVlTW9kZWwpID0+IHtcbiAgICAgICAgaWYgKGlzRmlsZUR0byh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuaWQgJiYgdmFsdWUuc3RhdHVzICE9PSAnQ09NUExFVEUnO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ2FtZXJhQ29udHJvbFZhbHVlVjEodmFsdWUpKSB7XG4gICAgICAgICAgLy8gaWYgdXJsIGlzIG5vdCBzZXQsIGl0IGhhc24ndCBiZWVuIHVwbG9hZGVkXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmlkICYmICF2YWx1ZS51cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaGFzVXBsb2FkZWQgPT4gaGFzVXBsb2FkZWQpXG4gICAgICAubGVuZ3RoO1xuXG4gICAgLy8gYWRkIHRvdGFsIGZyb20gZmlsZXMgdGhhdCBhcmUgcGVuZGluZ1xuICAgIHBlbmRpbmcgKz0gdGhpcy5maWxlc1xuICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5zdGF0dXMgIT09ICdDT01QTEVURScpXG4gICAgICAubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmcsXG4gICAgICB0b3RhbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGR5bmFtaWMgcHJvcGVydHkgZnJvbSB0aGUgSm9iTW9kZWwgdGhhdFxuICAgKiByZXByZXNlbnQgYSBncm91cCAoZnJvbSBhIGZvcm0pLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAgICogQHBhcmFtIGluaXQgaWYgdHJ1ZSAoZGVmYXVsdCkgYW5kIGdyb3VwIGlzIG5vdCBmb3VuZCwgaW5pdGlhbGlzZSBhbiBlbXB0eVxuICAgKiBncm91cCwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yXG4gICAqL1xuICBnZXRHcm91cChuYW1lOiBzdHJpbmcsIGluaXQgPSB0cnVlKTogUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4ge1xuICAgIGxldCBwcm9wO1xuICAgIGlmICh0aGlzLnN0YXRpY1Byb3BlcnRpZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGdyb3VwIG5hbWUgJHtuYW1lfSwgbm90IGEgZHluYW1pYyBwcm9wZXJ0eWApO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kdGhpc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaW5pdCkge1xuICAgICAgICBwcm9wID0gdGhpcy4kdGhpc1tuYW1lXSA9IHt9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgZ3JvdXAgbmFtZSAke25hbWV9LCBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcCA9IHRoaXMuJHRoaXNbbmFtZV07XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGdyb3VwIG5hbWUgJHtuYW1lfSwgbm90IGFuIG9iamVjdGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCBwYXRoIHNlZ21lbnRzXG4gICAqL1xuICBnZXRWYWx1ZUJ5UGF0aDxUIGV4dGVuZHMgVmFzRmllbGREdG9WYWx1ZT4oXG4gICAgcGF0aDogc3RyaW5nW10gPSBbXVxuICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZ2V0VmFsdWVCeVBhdGgocGF0aCwgdGhpcy4kdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB3aHkgd2UgbmVlZCB0aGlzIG1ldGhvZCBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICogdW5kZXJzdGFuZCB0aGF0IHdpdGhpbiB0aGUgc3lzdGVtLCBKb2JzIGNhbiBiZSByZXByZXNlbnRlZCBpbiBvbmUgb2YgdHdvXG4gICAqIHdheXMsIGRvY3VtZW50IGFuZCByZWxhdGlvbmFsLlxuICAgKlxuICAgKiBUaGUgaW1wb3J0YW50IGRpc3RpbmN0aW9uIGlzIGhvdyB2YWx1ZXMgc3VibWl0dGVkIGJ5IGEgZm9ybSBhcmUgc3RvcmVkLlxuICAgKlxuICAgKiBKb2JzIHN0b3JlZCBhcyBkb2N1bWVudHMgKEpTT04gb2JqZWN0cykgd2lsbCBzdG9yZSB1c2VyIHZhbHVlcywgYXMgZHluYW1pY1xuICAgKiBwcm9wZXJ0aWVzIG9mIHRoZSBkb2N1bWVudC5cbiAgICpcbiAgICogV2hlcmVhcywgSm9icyBzdG9yZWQgYXMgcmVsYXRpb25hbCwgd2lsbCBzdG9yZSB1c2VyIHZhbHVlcyBpbiBhbiBhcnJheSBvZlxuICAgKiB7QGxpbmsgVmFzRmllbGREdG99IG9iamVjdHMuXG4gICAqXG4gICAqIERlcGVuZGluZyBvbiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHN5c3RlbSwgZWl0aGVyIG9uZSBvZiB0aGVzZSBhcHByb2FjaGVzIGNhblxuICAgKiBiZSBtb3JlIHVzZWZ1bCB0aGFuIHRoZSBvdGhlci5cbiAgICpcbiAgICogVGhpcyBtZXRob2QsIGFzc3VtZXMgdGhhdCB0aGUgSm9iTW9kZWwgaGFzIGJlZW4gaW5zdGFudGlhdGVkIGZyb20gYVxuICAgKiBkb2N1bWVudCByZXByZXNlbnRhdGlvbiwgYW5kIHNlcnZlcyB0byBoeWRyYXRlIHRoZSBmaWVsZHMgYXJyYXkuIEluIG9yZGVyXG4gICAqIHRvIGFjaGlldmUgdGhpcywga25vd2xlZGdlIG9mIHRoZSB7QGxpbmsgVmFzRm9ybUR0b30gdGhhdCBjcmVhdGVkIHRoZSBqb2JcbiAgICogaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqXG4gICAqIEpvYiBpbiBkb2N1bWVudCByZXByZXNlbnRhdGlvblxuICAgKiB7XG4gICAqICAgaWQ6IDxndWlkPixcbiAgICogICByZWZlcmVuY2U6IFwic29tZXRoaW5nXCJcbiAgICogICA8b3RoZXIgc3RhdGljIGpvYiBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIGZvbzoge1xuICAgKiAgICAgYmFyOiBcInZhbHVlXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogSm9iIGluIHJlbGF0aW9uYWwgcmVwcmVzZW50YXRpb25cbiAgICoge1xuICAgKiAgIGlkOiA8Z3VpZD4sXG4gICAqICAgcmVmZXJlbmNlOiBcInNvbWV0aGluZ1wiXG4gICAqICAgPG90aGVyIHN0YXRpYyBqb2IgcHJvcGVydGllcz4uLi5cbiAgICogICA8d2lsbCBub3QgaGF2ZSBkeW5hbWljIHByb3BlcnRpZXM+Li4uXG4gICAqICAgZmllbGRzOiBbXG4gICAqICAgICB7XG4gICAqICAgICAgIGlkOiA8Z3VpZD4sXG4gICAqICAgICAgIDxvdGhlciBmaWVsZCBwcm9wZXJ0aWVzPixcbiAgICogICAgICAgdmFsdWU6IFwidmFsdWVcIlxuICAgKiAgICAgfVxuICAgKiAgIF1cbiAgICogfVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybU1vZGVsIHRoZSBWYXNGb3JtTW9kZWwgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIGpvYlxuICAgKiBAcGFyYW0gY29udHJvbEZpZWxkSWRNYXAgVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgaWQgZWFjaCBmaWVsZC5cbiAgICogRWl0aGVyIG9uZSB3aWxsIGJlIGZvdW5kIGluIHRoZSBtYXAsIG9yIGEgbmV3IG9uZSBpcyBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZXMgaWYgYSB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkXG4gICAqIHRvIGZpbHRlciB0aGUgZmllbGRzIHRoYXQgYXJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheTxWYXNGaWVsZER0bz59XG4gICAqL1xuICBoeWRyYXRlRmllbGRzKFxuICAgIGZvcm1Nb2RlbDogVmFzRm9ybU1vZGVsLFxuICAgIGNvbnRyb2xGaWVsZElkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICBjb250cm9sTmFtZXM/OiBBcnJheTxzdHJpbmc+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkczogQXJyYXk8VmFzRmllbGREdG8+ID0gW107XG4gICAgZm9ybU1vZGVsLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBncm91cC5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuXG4gICAgICAgICAgaWYgKCFjb250cm9sLm5hbWUuc3RhcnRzV2l0aCgnZmllbGRzLicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnRyb2xOYW1lcyAmJiAhY29udHJvbE5hbWVzLmluY2x1ZGVzKGNvbnRyb2wubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWVsZHMucHVzaChWYXNGaWVsZE1vZGVsLmZyb21EdG8oe1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbnRyb2xJZCBleGlzdHMgaW4gdGhlIG1hcCwgdXNlIHRoZSBhc3NvY2lhdGVkIGZpZWxkSWQsXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgZ2VuZXJhdGUgYSBuZXcgaWQgZm9yIHRoZSBmaWVsZC5cbiAgICAgICAgICAgIGlkOiBjb250cm9sRmllbGRJZE1hcC5nZXQoY29udHJvbC5pZCkgfHwgVVVJRC5VVUlEKCksXG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgICBqb2I6IHRoaXMuaWQsXG4gICAgICAgICAgICBjcmVhdGVkQnk6IHRoaXMuY3JlYXRlZEJ5LFxuICAgICAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxuICAgICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5tb2RpZmllZEJ5LFxuICAgICAgICAgICAgbW9kaWZpZWQ6IHRoaXMubW9kaWZpZWQsXG4gICAgICAgICAgICBjb250cm9sOiBjb250cm9sLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWVCeVBhdGgoXG4gICAgICAgICAgICAgIFtncm91cC5uYW1lLCBjb250cm9sLm5hbWVdXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgdmVyeSBub24gc29waGlzdGljYXRlZCB3YXkgdG8gc2V0IHZhbHVlcyBpbiB0aGUgam9iIHZpYSBwYXRoc1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogc2V0VmFsdWVCeVBhdGgoJ3ZhbHVlJywgWydmb28nLCAnYmFyJ10pO1xuICAgKlxuICAgKiB3aWxsIG1ha2UgcmVzdWx0cyBpbiBqb2JcbiAgICoge1xuICAgKiAgIGZvbzoge1xuICAgKiAgICAgYmFyOiAndmFsdWUnXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0XG4gICAqIEBwYXJhbSBwYXRoIHBhdGggc2VnbWVudHNcbiAgICovXG4gIHNldFZhbHVlQnlQYXRoKHZhbHVlOiBWYXNGaWVsZER0b1ZhbHVlLCBwYXRoOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG4gICAgc3dpdGNoIChwYXRoLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgMToge1xuICAgICAgICAodGhpcyBhcyBhbnkpW3BhdGhbMF1dID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAodGhpcy4kdGhpc1twYXRoWzBdXSBhcyBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPilbcGF0aFsxXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICgodGhpcy4kdGhpc1twYXRoWzBdXSBhcyBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPilbcGF0aFsxXV0gYXMgUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4pW3BhdGhbMl1dID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ3BhdGggaGFzIHRvbyBtYW55IHNlZ21lbnRzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzdGF0aWNPbmx5IGlmIHRydWUsIHdpbGwgb25seSBvdXRwdXQgdmFsdWVzIGZvciB0aGUgc3RhdGljXG4gICAqIHByb3BlcnRpZXMgaW4gdGhlIGR0b1xuICAgKi9cbiAgcHVibGljIHRvRHRvKHN0YXRpY09ubHkgPSBmYWxzZSk6IFZhc0pvYkR0byB7XG5cbiAgICBpZiAoc3RhdGljT25seSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcbiAgICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgICAgbW9kaWZpZWQ6IHRoaXMubW9kaWZpZWQsXG4gICAgICAgIG1vZGlmaWVkQnk6IHRoaXMubW9kaWZpZWRCeSxcbiAgICAgICAgc2VydmVyQ3JlYXRlZDogdGhpcy5zZXJ2ZXJDcmVhdGVkLFxuICAgICAgICBzZXJ2ZXJNb2RpZmllZDogdGhpcy5zZXJ2ZXJNb2RpZmllZCxcbiAgICAgICAgY3JlYXRlZEJ5TmFtZTogdGhpcy5jcmVhdGVkQnlOYW1lLFxuICAgICAgICBtb2RpZmllZEJ5TmFtZTogdGhpcy5tb2RpZmllZEJ5TmFtZSxcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICBhY2Nlc3NHcm91cDogdGhpcy5hY2Nlc3NHcm91cCxcbiAgICAgICAgcmVmZXJlbmNlOiB0aGlzLnJlZmVyZW5jZSxcbiAgICAgICAgam9iRGF0ZTogdGhpcy5qb2JEYXRlLFxuICAgICAgICBqb2JTdGF0dXM6IHRoaXMuam9iU3RhdHVzLFxuICAgICAgICBqb2JUeXBlOiB0aGlzLmpvYlR5cGUsXG4gICAgICAgIGFzc2lnbmVlSWQ6IHRoaXMuYXNzaWduZWVJZCxcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdGltZVpvbmVPZmZzZXQ6IHRoaXMudGltZVpvbmVPZmZzZXQsXG4gICAgICAgIHBlbmRpbmdGaWVsZHM6IHRoaXMucGVuZGluZ0ZpZWxkcyxcbiAgICAgICAgY2hpbGRNb2RpZmllZDogdGhpcy5jaGlsZE1vZGlmaWVkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgIGZpZWxkczogdGhpcy5maWVsZHMsXG4gICAgICAgIGZpbGVzOiB0aGlzLmZpbGVzLFxuICAgICAgICBjcmVhdGVkQnlEaXNwbGF5TmFtZTogdGhpcy5jcmVhdGVkQnlEaXNwbGF5TmFtZSxcbiAgICAgICAgbW9kaWZpZWRCeURpc3BsYXlOYW1lOiB0aGlzLm1vZGlmaWVkQnlEaXNwbGF5TmFtZSxcbiAgICAgICAgZ2VvTG9jYXRpb246IHRoaXMuZ2VvTG9jYXRpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHRvID0ge30gYXMgVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlO1xuICAgIFsuLi50aGlzLnN0YXRpY1Byb3BlcnRpZXMsIC4uLnRoaXMuZHluYW1pY1Byb3BlcnRpZXNdXG4gICAgICAuZm9yRWFjaChwcm9wID0+IGR0b1twcm9wXSA9IHRoaXMuJHRoaXNbcHJvcF0pO1xuXG4gICAgcmV0dXJuIGR0byBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSBhIHN5bnRheCB0aGF0IGFsbG93cyB1cyB0byBidWlsZCBzdHJpbmdzIGZyb20gdGhlXG4gICAqIHZhbHVlcyBvZiBmcm9tIHRoZSBqb2IgbW9kZWwuIEZvciBleGFtcGxlIGlmIHRoZSBqb2IgbW9kZWwgd2FzOlxuICAgKlxuICAgKiB7XG4gICAqICAgZm9vOiAnYmFyJ1xuICAgKiB9XG4gICAqXG4gICAqIGFuZCB3ZSBwYXNzIFwiaSBhbSBmb28ge2Zvb31cIiwgdGhlIHJlc3VsdCB3b3VsZCBiZTpcbiAgICpcbiAgICogXCJpIGFtIGZvbyBiYXJcIlxuICAgKlxuICAgKiB3ZSBjYW4gYWxzbyB1c2UgbW9tZW50IHRvIHBhcnNlIGRhdGVzLCBmb3IgZXhhbXBsZSBpZiB0aGUgam9iIG1vZGVsIHdhczpcbiAgICpcbiAgICoge1xuICAgKiAgIGNyZWF0ZWQ6IFwiMjAyMi0wMS0wMVQwMDowMDowMCswMDAwXCJcbiAgICogfVxuICAgKlxuICAgKiBhbmQgd2UgcGFzcyBcIntjcmVhdGVkfGRhdGU6WVktTU0tRER9XCIsIHRoZSByZXN1bHQgd291bGQgYmU6XG4gICAqXG4gICAqIFwiMjAyMi0wMS0wMVwiXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBhIHN0cmluZyB3aXRoIHRoZSBzeW50YXhcbiAgICogQHBhcmFtIHtQYXJzZVN5bnRheE9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybiB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIHRoZSBzeW50YXggb24gdGhpcyBqb2JcbiAgICovXG4gIHBhcnNlU3ludGF4KFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGFyc2VTeW50YXhPcHRpb25zID0ge1xuICAgICAgdGltZVpvbmVPZmZzZXQ6IDBcbiAgICB9XG4gICk6IHN0cmluZyB7XG5cbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyh7W159XSp9KS9nLCAobWF0Y2g6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3ludGF4ID0gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmxlbmd0aCAtIDEpO1xuXG4gICAgICBsZXQgW2tleSwgZmlsdGVyXSA9IHN5bnRheC5zcGxpdCgnfCcpO1xuICAgICAga2V5ID0gKGtleSB8fCAnJykudHJpbSgpO1xuICAgICAgZmlsdGVyID0gKGZpbHRlciB8fCAnJykudHJpbSgpO1xuXG4gICAgICBsZXQgZmlsdGVyTmFtZSwgZmlsdGVyQXJnOiBzdHJpbmcgPSAnJztcbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGZpbHRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChzcGxpdEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXIuc3Vic3RyaW5nKDAsIHNwbGl0SW5kZXgpO1xuICAgICAgICAgIGZpbHRlckFyZyA9IGZpbHRlci5zdWJzdHJpbmcoc3BsaXRJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXI7XG4gICAgICAgICAgZmlsdGVyQXJnID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyTmFtZSA9IChmaWx0ZXJOYW1lIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGZpbHRlckFyZyA9IChmaWx0ZXJBcmcgfHwgJycpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IG9iamVjdEtleSA9IHBhdGguc2hpZnQoKSB8fCAnJztcbiAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgIGlmIChvYmplY3RLZXkgPT09ICdqb2InKSB7XG4gICAgICAgIHJlc3VsdCA9ICh0aGlzLmdldFZhbHVlQnlQYXRoKHBhdGgpIHx8ICcnKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgPT09ICdmaWVsZHMnKSB7XG4gICAgICAgIHJlc3VsdCA9IChnZXRWYWx1ZUJ5UGF0aChcbiAgICAgICAgICBbJ2ZpZWxkcy4nICsgcGF0aC5zaGlmdCgpLCAuLi5wYXRoXSxcbiAgICAgICAgICB0aGlzLmdldEZpZWxkczIoKVxuICAgICAgICApIHx8ICcnKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdHMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RzW29iamVjdEtleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAgICAgYG9iamVjdEtleSAke29iamVjdEtleX0gaXMgbm90IHByZXNlbnQgaW4gb3B0aW9ucy5vYmplY3RgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChnZXRWYWx1ZUJ5UGF0aChwYXRoLCBvcHRpb25zLm9iamVjdHNbb2JqZWN0S2V5XSkgfHwgJycpXG4gICAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgICAgYG9iamVjdEtleSAke29iamVjdEtleX0gd2FzIHVzZWQgYnV0IG9wdGlvbnMub2JqZWN0IGlzIG5vdCBzZXRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuXG4gICAgICBpZiAoZmlsdGVyTmFtZSAmJiByZXN1bHQpIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXJOYW1lKSB7XG4gICAgICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQocmVzdWx0KVxuICAgICAgICAgICAgICAudXRjT2Zmc2V0KG9wdGlvbnMudGltZVpvbmVPZmZzZXQpXG4gICAgICAgICAgICAgIC5mb3JtYXQoZmlsdGVyQXJnIHx8ICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCd1bmtub3duIGZpbHRlciAlcycsIGZpbHRlck5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLnRyaW0oKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3ZlcnJpZGUgdG9BcGlEdG8oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci50b0FwaUR0bygpLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLnJlZmVyZW5jZSB8fCAnficsXG4gICAgICBqb2JEYXRlOiB0aGlzLmpvYkRhdGUgfHwgJ34nLFxuICAgICAgam9iVHlwZTogdGhpcy5qb2JUeXBlIHx8ICd+JyxcbiAgICAgIGFjY2Vzc0dyb3VwOiB0aGlzLmFjY2Vzc0dyb3VwIHx8ICd+JyxcbiAgICAgIGpvYlN0YXR1czogdGhpcy5qb2JTdGF0dXMgfHwgJ34nLFxuICAgICAgYXNzaWduZWVJZDogdGhpcy5hc3NpZ25lZUlkIHx8ICd+JyxcbiAgICAgIHRpbWVab25lT2Zmc2V0OiB0aGlzLnRpbWVab25lT2Zmc2V0IHx8IDAsXG4gICAgICBwZW5kaW5nRmllbGRzOiB0aGlzLnBlbmRpbmdGaWVsZHMgfHwgMCxcbiAgICAgIGxhc3RGb3JtOiB0aGlzLmZvcm1JZCB8fCAnfidcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWxvb2t1cC10eXBlLmR0by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWxvb2t1cC10eXBlLmR0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFzQWNjb3VudE9iamVjdER0byB9IGZyb20gJy4vdmFzLWFjY291bnQtb2JqZWN0LmR0byc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFzTG9va3VwVHlwZUR0byBleHRlbmRzIFZhc0FjY291bnRPYmplY3REdG8ge1xuICB0aXRsZTogc3RyaW5nO1xuICBzZXF1ZW5jZTogbnVtYmVyO1xuICBjYXRlZ29yeUdyb3VwczogQXJyYXk8c3RyaW5nPjtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWxvb2t1cC5kdG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YXMtbGliL3NyYy9saWIvZW50aXR5L3Zhcy1sb29rdXAuZHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYXNBY2NvdW50T2JqZWN0RHRvIH0gZnJvbSAnLi92YXMtYWNjb3VudC1vYmplY3QuZHRvJztcblxuZXhwb3J0IGludGVyZmFjZSBWYXNMb29rdXBEdG8gZXh0ZW5kcyBWYXNBY2NvdW50T2JqZWN0RHRvIHtcbiAgaWQ6IHN0cmluZztcbiAgY3JlYXRlZDogc3RyaW5nO1xuICBzZXJ2ZXJDcmVhdGVkOiBzdHJpbmc7XG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICBzZXJ2ZXJNb2RpZmllZDogc3RyaW5nO1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgYWNjZXNzR3JvdXA6IHN0cmluZztcbiAgbG9va3VwVHlwZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHNlcXVlbmNlOiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLW1lbWJlcnNoaXAuZHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFzLWxpYi9zcmMvbGliL2VudGl0eS92YXMtbWVtYmVyc2hpcC5kdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhc0FjY291bnRPYmplY3REdG8gfSBmcm9tICcuL3Zhcy1hY2NvdW50LW9iamVjdC5kdG8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhc01lbWJlcnNoaXBEdG8gZXh0ZW5kcyBWYXNBY2NvdW50T2JqZWN0RHRvIHtcbiAgdXNlcjogc3RyaW5nO1xuICBhZG1pbjogYm9vbGVhbjtcbiAgbG9va3VwVHlwZXM6IEFycmF5PHN0cmluZz47XG4gIGNvbnRhY3RUeXBlczogQXJyYXk8c3RyaW5nPjtcbiAgYWNjZXNzR3JvdXBzOiBBcnJheTxzdHJpbmc+O1xuICBqb2JTdGF0dXNlczogQXJyYXk8c3RyaW5nPjtcbiAgam9iVHlwZXM6IEFycmF5PHN0cmluZz47XG4gIHRhc2tUeXBlczogQXJyYXk8c3RyaW5nPjtcbn1cbiJdfQ==
|