@colijnit/relation 261.1.0 → 261.20.0
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/fesm2022/colijnit-relation.mjs +5066 -0
- package/fesm2022/colijnit-relation.mjs.map +1 -0
- package/index.d.ts +1704 -0
- package/package.json +17 -13
- package/bundles/colijnit-relation.umd.js +0 -5059
- package/bundles/colijnit-relation.umd.js.map +0 -1
- package/colijnit-relation.d.ts +0 -21
- package/colijnit-relation.metadata.json +0 -1
- package/esm2015/colijnit-relation.js +0 -22
- package/esm2015/lib/component/base/relation-base.component.js +0 -49
- package/esm2015/lib/component/base/relation-loader.component.js +0 -50
- package/esm2015/lib/component/base/relation-screen-config-base.component.js +0 -16
- package/esm2015/lib/component/relation/relation.component.js +0 -223
- package/esm2015/lib/component/relation/relation.module.js +0 -63
- package/esm2015/lib/component/relation-address/relation-address.component.js +0 -166
- package/esm2015/lib/component/relation-address/relation-address.module.js +0 -24
- package/esm2015/lib/component/relation-address-tile/relation-address-tile.component.js +0 -72
- package/esm2015/lib/component/relation-address-tile/relation-address-tile.module.js +0 -25
- package/esm2015/lib/component/relation-addresses/relation-addresses.component.js +0 -157
- package/esm2015/lib/component/relation-addresses/relation-addresses.module.js +0 -31
- package/esm2015/lib/component/relation-avatar/relation-avatar.component.js +0 -226
- package/esm2015/lib/component/relation-avatar/relation-avatar.module.js +0 -22
- package/esm2015/lib/component/relation-contact-options/relation-contact-option-list.component.js +0 -116
- package/esm2015/lib/component/relation-contact-options/relation-contact-option.component.js +0 -110
- package/esm2015/lib/component/relation-contact-options/relation-contact-options-other-types-popup.component.js +0 -44
- package/esm2015/lib/component/relation-contact-options/relation-contact-options.component.js +0 -185
- package/esm2015/lib/component/relation-contact-options/relation-contact-options.module.js +0 -35
- package/esm2015/lib/component/relation-documents/relation-documents.component.js +0 -97
- package/esm2015/lib/component/relation-documents/relation-documents.module.js +0 -24
- package/esm2015/lib/component/relation-first-name/relation-first-name.component.js +0 -35
- package/esm2015/lib/component/relation-first-name/relation-first-name.module.js +0 -24
- package/esm2015/lib/component/relation-gender/relation-gender.component.js +0 -50
- package/esm2015/lib/component/relation-gender/relation-gender.module.js +0 -23
- package/esm2015/lib/component/relation-initials/relation-initials.component.js +0 -34
- package/esm2015/lib/component/relation-initials/relation-initials.module.js +0 -24
- package/esm2015/lib/component/relation-language/relation-language.component.js +0 -66
- package/esm2015/lib/component/relation-language/relation-language.module.js +0 -25
- package/esm2015/lib/component/relation-last-name/relation-last-name.component.js +0 -33
- package/esm2015/lib/component/relation-last-name/relation-last-name.module.js +0 -24
- package/esm2015/lib/component/relation-preferences/relation-preferences.component.js +0 -69
- package/esm2015/lib/component/relation-preferences/relation-preferences.module.js +0 -23
- package/esm2015/lib/component/relation-prefix-name/relation-prefix-name.component.js +0 -34
- package/esm2015/lib/component/relation-prefix-name/relation-prefix-name.module.js +0 -24
- package/esm2015/lib/component/relation-title/relation-title.component.js +0 -67
- package/esm2015/lib/component/relation-title/relation-title.module.js +0 -25
- package/esm2015/lib/enum/icon.enum.js +0 -19
- package/esm2015/lib/enum/language-code.enum.js +0 -8
- package/esm2015/lib/enum/relman-cfg-name.enum.js +0 -862
- package/esm2015/lib/enum/relman-contact-options-cfg-names.js +0 -2
- package/esm2015/lib/enum/relman-sub-category.enum.js +0 -13
- package/esm2015/lib/interface/relation-address-cfg-names.interface.js +0 -2
- package/esm2015/lib/model/icon-svg.js +0 -18
- package/esm2015/lib/model/relation-settings-options.js +0 -7
- package/esm2015/lib/model/relation-settings.js +0 -9
- package/esm2015/lib/relation-version.js +0 -10
- package/esm2015/lib/res/dictionary/dictionaries.js +0 -9
- package/esm2015/lib/service/error.service.js +0 -75
- package/esm2015/lib/service/icon-cache.service.js +0 -51
- package/esm2015/lib/service/relation-base.service.js +0 -271
- package/esm2015/lib/service/relation-connector-adapter.service.js +0 -413
- package/esm2015/lib/service/relation-connector.service.js +0 -160
- package/esm2015/lib/service/relation-event.service.js +0 -16
- package/esm2015/lib/service/relation-screen-configuration.service.js +0 -51
- package/esm2015/lib/service/relation-settings.service.js +0 -65
- package/esm2015/lib/service/relation.service.js +0 -42
- package/esm2015/lib/translation/relation-dictionary.service.js +0 -77
- package/esm2015/lib/translation/relation-localize.pipe.js +0 -26
- package/esm2015/lib/translation/relation-translation.module.js +0 -26
- package/esm2015/lib/translation/relation-translation.service.js +0 -17
- package/esm2015/public_api.js +0 -34
- package/fesm2015/colijnit-relation.js +0 -4293
- package/fesm2015/colijnit-relation.js.map +0 -1
- package/lib/component/base/relation-base.component.d.ts +0 -23
- package/lib/component/base/relation-loader.component.d.ts +0 -12
- package/lib/component/base/relation-screen-config-base.component.d.ts +0 -14
- package/lib/component/relation/relation.component.d.ts +0 -36
- package/lib/component/relation/relation.module.d.ts +0 -2
- package/lib/component/relation-address/relation-address.component.d.ts +0 -35
- package/lib/component/relation-address/relation-address.module.d.ts +0 -2
- package/lib/component/relation-address-tile/relation-address-tile.component.d.ts +0 -19
- package/lib/component/relation-address-tile/relation-address-tile.module.d.ts +0 -2
- package/lib/component/relation-addresses/relation-addresses.component.d.ts +0 -31
- package/lib/component/relation-addresses/relation-addresses.module.d.ts +0 -2
- package/lib/component/relation-avatar/relation-avatar.component.d.ts +0 -47
- package/lib/component/relation-avatar/relation-avatar.module.d.ts +0 -2
- package/lib/component/relation-contact-options/relation-contact-option-list.component.d.ts +0 -24
- package/lib/component/relation-contact-options/relation-contact-option.component.d.ts +0 -34
- package/lib/component/relation-contact-options/relation-contact-options-other-types-popup.component.d.ts +0 -22
- package/lib/component/relation-contact-options/relation-contact-options.component.d.ts +0 -44
- package/lib/component/relation-contact-options/relation-contact-options.module.d.ts +0 -2
- package/lib/component/relation-documents/relation-documents.component.d.ts +0 -18
- package/lib/component/relation-documents/relation-documents.module.d.ts +0 -2
- package/lib/component/relation-first-name/relation-first-name.component.d.ts +0 -4
- package/lib/component/relation-first-name/relation-first-name.module.d.ts +0 -2
- package/lib/component/relation-gender/relation-gender.component.d.ts +0 -7
- package/lib/component/relation-gender/relation-gender.module.d.ts +0 -2
- package/lib/component/relation-initials/relation-initials.component.d.ts +0 -4
- package/lib/component/relation-initials/relation-initials.module.d.ts +0 -2
- package/lib/component/relation-language/relation-language.component.d.ts +0 -12
- package/lib/component/relation-language/relation-language.module.d.ts +0 -2
- package/lib/component/relation-last-name/relation-last-name.component.d.ts +0 -4
- package/lib/component/relation-last-name/relation-last-name.module.d.ts +0 -2
- package/lib/component/relation-preferences/relation-preferences.component.d.ts +0 -13
- package/lib/component/relation-preferences/relation-preferences.module.d.ts +0 -2
- package/lib/component/relation-prefix-name/relation-prefix-name.component.d.ts +0 -4
- package/lib/component/relation-prefix-name/relation-prefix-name.module.d.ts +0 -2
- package/lib/component/relation-title/relation-title.component.d.ts +0 -13
- package/lib/component/relation-title/relation-title.module.d.ts +0 -2
- package/lib/enum/icon.enum.d.ts +0 -17
- package/lib/enum/language-code.enum.d.ts +0 -6
- package/lib/enum/relman-cfg-name.enum.d.ts +0 -857
- package/lib/enum/relman-contact-options-cfg-names.d.ts +0 -6
- package/lib/enum/relman-sub-category.enum.d.ts +0 -10
- package/lib/interface/relation-address-cfg-names.interface.d.ts +0 -8
- package/lib/model/icon-svg.d.ts +0 -4
- package/lib/model/relation-settings-options.d.ts +0 -4
- package/lib/model/relation-settings.d.ts +0 -5
- package/lib/relation-version.d.ts +0 -6
- package/lib/res/dictionary/dictionaries.d.ts +0 -31988
- package/lib/service/error.service.d.ts +0 -11
- package/lib/service/icon-cache.service.d.ts +0 -18
- package/lib/service/relation-base.service.d.ts +0 -65
- package/lib/service/relation-connector-adapter.service.d.ts +0 -67
- package/lib/service/relation-connector.service.d.ts +0 -52
- package/lib/service/relation-event.service.d.ts +0 -6
- package/lib/service/relation-screen-configuration.service.d.ts +0 -13
- package/lib/service/relation-settings.service.d.ts +0 -16
- package/lib/service/relation.service.d.ts +0 -10
- package/lib/translation/relation-dictionary.service.d.ts +0 -19
- package/lib/translation/relation-localize.pipe.d.ts +0 -7
- package/lib/translation/relation-translation.module.d.ts +0 -4
- package/lib/translation/relation-translation.service.d.ts +0 -6
- package/public_api.d.ts +0 -33
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
|
|
4
|
-
import { RelationSettingsService } from './relation-settings.service';
|
|
5
|
-
import { ObjectConfiguration } from '@colijnit/ioneconnector/build/model/object-configuration';
|
|
6
|
-
import { RelationApi } from '@colijnit/relationapi';
|
|
7
|
-
import { MainApi } from '@colijnit/mainapi';
|
|
8
|
-
import { RelationSmallObject } from '@colijnit/relationapi/build/model/relation-small-object.bo';
|
|
9
|
-
import { CustomerFullObject } from '@colijnit/relationapi/build/model/customer-full-object.bo';
|
|
10
|
-
import { SupplierFullObject } from '@colijnit/relationapi/build/model/supplier-full-object.bo';
|
|
11
|
-
import { EmployeeFullObject } from '@colijnit/relationapi/build/model/employee-full-object.bo';
|
|
12
|
-
import { ErrorService } from './error.service';
|
|
13
|
-
import { RelationNameKind } from '@colijnit/relationapi/build/enum/relation-name-kind.enum';
|
|
14
|
-
import { RelationEventService } from './relation-event.service';
|
|
15
|
-
import { Title } from '@colijnit/mainapi/build/model/title.bo';
|
|
16
|
-
import { ModuleName } from '@colijnit/mainapi/build/enum/module-name.enum';
|
|
17
|
-
import { RelationPrivacySetting } from '@colijnit/relationapi/build/model/relation-privacy-setting.bo';
|
|
18
|
-
import { PrivacySetting } from '@colijnit/mainapi/build/model/privacy-setting.bo';
|
|
19
|
-
import { Language } from '@colijnit/mainapi/build/model/language.bo';
|
|
20
|
-
import { SequenceName } from '@colijnit/mainapi/build/enum/sequence-name.enum';
|
|
21
|
-
import { Country } from '@colijnit/ioneconnector/build/model/country.bo';
|
|
22
|
-
import { GetPostalCodeRetrievalOutputParams } from '@colijnit/mainapi/build/model/get-postal-code-retrieval-output-params';
|
|
23
|
-
import { Address } from '@colijnit/relationapi/build/model/address.bo';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "./relation-settings.service";
|
|
26
|
-
import * as i2 from "./error.service";
|
|
27
|
-
import * as i3 from "./relation-event.service";
|
|
28
|
-
export class RelationConnectorAdapterService {
|
|
29
|
-
constructor(_settingsService,
|
|
30
|
-
// private _selectMultipleCacheService: TransactionSelectMultipleCacheService,
|
|
31
|
-
// private _selectMultipleParameterizedCacheService: TransactionSelectMultipleParameterizedCacheService,
|
|
32
|
-
_errorService, _relationEventService) {
|
|
33
|
-
this._settingsService = _settingsService;
|
|
34
|
-
this._errorService = _errorService;
|
|
35
|
-
this._relationEventService = _relationEventService;
|
|
36
|
-
this._boFactory = new BusinessObjectFactory();
|
|
37
|
-
}
|
|
38
|
-
ngOnDestroy() {
|
|
39
|
-
if (this._loaderSub) {
|
|
40
|
-
this._loaderSub.unsubscribe();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
connect() {
|
|
44
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
this.connector = new RelationApi(this._settingsService.settings);
|
|
46
|
-
this._loaderSub = this.connector.showLoader.subscribe((value) => this._relationEventService.showLoader.next(value));
|
|
47
|
-
this.loginResponse = yield this.connector.connect();
|
|
48
|
-
this.mainConnector = new MainApi(this._settingsService.settings);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
logOut() {
|
|
52
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
this._loaderSub.unsubscribe();
|
|
54
|
-
yield this.connector.logOut();
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
commit() {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
return this.connector.commit();
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
getObjectConfiguration(screenCfgModule, params, insertMode) {
|
|
63
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
const response = yield this.mainConnector.getObjectConfigurations(screenCfgModule, params, insertMode);
|
|
65
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
66
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(ObjectConfiguration, response.resultObjects);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this._handleExceptionFromResponse(response);
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
getDocumentContent(documentId, thumbnail = true) {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
const response = yield this.mainConnector.getDocumentContent(documentId, thumbnail);
|
|
77
|
-
if (response && response.validationResult && response.validationResult.success && response.resultObject.documentContent) {
|
|
78
|
-
return response.resultObject.documentContent;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
this._handleExceptionFromResponse(response);
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
getCountries() {
|
|
87
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
-
const response = yield this.mainConnector.selectMultiple(ModuleName.SimpleBaseData, 'Country');
|
|
89
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
90
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(Country, response.resultObjects);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this._handleExceptionFromResponse(response);
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
getPostalCodeRetrieval(postalCode, houseNr) {
|
|
99
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
const response = yield this.mainConnector.getPostalCodeRetrieval(postalCode, houseNr);
|
|
101
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
102
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(GetPostalCodeRetrievalOutputParams, response.resultObject);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
getRelationSmallObject(id) {
|
|
110
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
const response = yield this.connector.getRelationSmallObject(id);
|
|
112
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
113
|
-
return this._boFactory.makeWithRawBackendData(RelationSmallObject, response.resultObject);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
this._handleExceptionFromResponse(response);
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
getRelationNameKindByCustomerNr(relationNr) {
|
|
122
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
-
const response = yield this.connector.getRelationNameKindByCustomerNr(relationNr);
|
|
124
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
125
|
-
return response.resultObject && response.resultObject.toLowerCase() === 'b' ? RelationNameKind.Company : RelationNameKind.Private;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this._handleExceptionFromResponse(response);
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
getTitles() {
|
|
134
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
const response = yield this.mainConnector.selectMultiple(ModuleName.SimpleBaseData, 'Title');
|
|
136
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
137
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(Title, response.resultObjects);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
this._handleExceptionFromResponse(response);
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
getLanguages() {
|
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
const response = yield this.mainConnector.selectMultiple(ModuleName.SimpleBaseData, 'Language');
|
|
148
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
149
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(Language, response.resultObjects);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this._handleExceptionFromResponse(response);
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
getNextContactOptionSequenceNumber() {
|
|
158
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
-
const response = yield this.mainConnector.getSequenceValue(SequenceName.CommunicationNumber);
|
|
160
|
-
if (response) {
|
|
161
|
-
return response;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
this._handleExceptionFromResponse(response);
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
getRelationPrivacySettings() {
|
|
170
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
171
|
-
const privacySettings = [];
|
|
172
|
-
const basePrivacySettings = yield this.getPrivacySettings();
|
|
173
|
-
for (let i = 0, len = basePrivacySettings.length; i < len; i++) {
|
|
174
|
-
const basePrivSetting = basePrivacySettings[i];
|
|
175
|
-
const newRelPrivSet = this._boFactory.instantiateNewBo(RelationPrivacySetting);
|
|
176
|
-
newRelPrivSet.applyBasePrivacySettingValues(basePrivSetting);
|
|
177
|
-
privacySettings.push(newRelPrivSet);
|
|
178
|
-
}
|
|
179
|
-
return privacySettings;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
getPrivacySettings() {
|
|
183
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
-
const result = yield this.mainConnector.selectMultiple(ModuleName.SimpleBaseData, 'PrivacySettingDTO');
|
|
185
|
-
if (result.validationResult && result.validationResult.success) {
|
|
186
|
-
return this._boFactory.makeBOArrayFromRawBackendDataArray(PrivacySetting, result.resultObjects);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
this._handleExceptionFromResponse(result);
|
|
190
|
-
return [];
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
lockCustomerFullObject(relationNr) {
|
|
195
|
-
return new Promise((resolve, reject) => {
|
|
196
|
-
return this.connector.lockCustomerById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
197
|
-
resolve(result.validationResult);
|
|
198
|
-
}));
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
getFirstCustomerForContact(relationNo) {
|
|
202
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
-
const result = yield this.connector.getFirstCustomerForContact(relationNo, true);
|
|
204
|
-
if (result.validationResult && result.validationResult.success) {
|
|
205
|
-
return this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
this._handleExceptionFromResponse(result);
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
getCustomerFullObject(relationNo) {
|
|
214
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
215
|
-
const result = yield this.connector.getCustomerFullObject(relationNo, true);
|
|
216
|
-
if (result.validationResult && result.validationResult.success) {
|
|
217
|
-
return this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this._handleExceptionFromResponse(result);
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
insertCustomer(relation) {
|
|
226
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
227
|
-
return new Promise((resolve, reject) => {
|
|
228
|
-
return this.connector.insertCustomer(relation).then((result) => {
|
|
229
|
-
if (result.validationResult && result.validationResult.success) {
|
|
230
|
-
resolve(this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
this._handleExceptionFromResponse(result);
|
|
234
|
-
reject(null);
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
updateCustomer(relation) {
|
|
241
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
242
|
-
return new Promise((resolve, reject) => {
|
|
243
|
-
return this.connector.updateCustomer(relation, true).then((result) => {
|
|
244
|
-
if (result.validationResult && result.validationResult.success) {
|
|
245
|
-
resolve(this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
this._handleExceptionFromResponse(result);
|
|
249
|
-
reject(null);
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
lockSupplierFullObject(relationNr) {
|
|
256
|
-
return new Promise((resolve, reject) => {
|
|
257
|
-
return this.connector.lockSupplierById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
258
|
-
resolve(result.validationResult);
|
|
259
|
-
}));
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
getSupplierFullObject(relationNo) {
|
|
263
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
264
|
-
const result = yield this.connector.getSupplierFullObject(relationNo, true);
|
|
265
|
-
if (result.validationResult && result.validationResult.success) {
|
|
266
|
-
return this._boFactory.makeWithRawBackendData(SupplierFullObject, result.resultObject);
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
this._handleExceptionFromResponse(result);
|
|
270
|
-
return null;
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
insertSupplier(relation) {
|
|
275
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
276
|
-
return new Promise((resolve, reject) => {
|
|
277
|
-
return this.connector.insertSupplier(relation).then((result) => {
|
|
278
|
-
if (result.validationResult && result.validationResult.success) {
|
|
279
|
-
resolve(this._boFactory.makeWithRawBackendData(SupplierFullObject, result.resultObject));
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
this._handleExceptionFromResponse(result);
|
|
283
|
-
reject(null);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
updateSupplier(relation) {
|
|
290
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
291
|
-
return new Promise((resolve, reject) => {
|
|
292
|
-
return this.connector.updateSupplier(relation, true).then((result) => {
|
|
293
|
-
if (result.validationResult && result.validationResult.success) {
|
|
294
|
-
resolve(this._boFactory.makeWithRawBackendData(SupplierFullObject, result.resultObject));
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
this._handleExceptionFromResponse(result);
|
|
298
|
-
reject(null);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
lockEmployeeFullObject(relationNr) {
|
|
305
|
-
return new Promise((resolve, reject) => {
|
|
306
|
-
return this.connector.lockEmployeeById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
307
|
-
resolve(result.validationResult);
|
|
308
|
-
}));
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
getEmployeeFullObject(relationNo) {
|
|
312
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
313
|
-
const result = yield this.connector.getEmployeeFullObject(relationNo);
|
|
314
|
-
if (result.validationResult && result.validationResult.success) {
|
|
315
|
-
return this._boFactory.makeWithRawBackendData(EmployeeFullObject, result.resultObject);
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
this._handleExceptionFromResponse(result);
|
|
319
|
-
return null;
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
insertEmployee(relation) {
|
|
324
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
325
|
-
return new Promise((resolve, reject) => {
|
|
326
|
-
return this.connector.insertEmployee(relation).then((result) => {
|
|
327
|
-
if (result.validationResult && result.validationResult.success) {
|
|
328
|
-
resolve(this._boFactory.makeWithRawBackendData(EmployeeFullObject, result.resultObject));
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
this._handleExceptionFromResponse(result);
|
|
332
|
-
reject(null);
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
updateEmployee(relation) {
|
|
339
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
340
|
-
return new Promise((resolve, reject) => {
|
|
341
|
-
return this.connector.updateEmployee(relation).then((result) => {
|
|
342
|
-
if (result.validationResult && result.validationResult.success) {
|
|
343
|
-
resolve(this._boFactory.makeWithRawBackendData(EmployeeFullObject, result.resultObject));
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
this._handleExceptionFromResponse(result);
|
|
347
|
-
reject(null);
|
|
348
|
-
}
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
lockBranchFullObject(relationNr) {
|
|
354
|
-
return new Promise((resolve, reject) => {
|
|
355
|
-
return this.connector.lockBranchById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
356
|
-
resolve(result.validationResult);
|
|
357
|
-
}));
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
lockCompanyFullObject(relationNr) {
|
|
361
|
-
return new Promise((resolve, reject) => {
|
|
362
|
-
return this.connector.lockCompanyById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
363
|
-
resolve(result.validationResult);
|
|
364
|
-
}));
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
lockContactPerson(relationNr) {
|
|
368
|
-
return new Promise((resolve, reject) => {
|
|
369
|
-
return this.connector.lockContactPersonById(relationNr).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
370
|
-
resolve(result.validationResult);
|
|
371
|
-
}));
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
insertAddress(address) {
|
|
375
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
376
|
-
const response = yield this.connector.insertAddress(address);
|
|
377
|
-
if (response.validationResult && response.validationResult.success) {
|
|
378
|
-
return this._boFactory.makeWithRawBackendData(Address, response.resultObject);
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
this._handleExceptionFromResponse(response);
|
|
382
|
-
return null;
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
updateAddress(address) {
|
|
387
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
388
|
-
const response = yield this.connector.updateAddress(address);
|
|
389
|
-
if (response.validationResult && response.validationResult.success) {
|
|
390
|
-
return this._boFactory.makeWithRawBackendData(Address, response.resultObject);
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
this._handleExceptionFromResponse(response);
|
|
394
|
-
return null;
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
_handleExceptionFromResponse(result) {
|
|
399
|
-
this._errorService.showValidationError(result);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
RelationConnectorAdapterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RelationConnectorAdapterService_Factory() { return new RelationConnectorAdapterService(i0.ɵɵinject(i1.RelationSettingsService), i0.ɵɵinject(i2.ErrorService), i0.ɵɵinject(i3.RelationEventService)); }, token: RelationConnectorAdapterService, providedIn: "root" });
|
|
403
|
-
RelationConnectorAdapterService.decorators = [
|
|
404
|
-
{ type: Injectable, args: [{
|
|
405
|
-
providedIn: 'root'
|
|
406
|
-
},] }
|
|
407
|
-
];
|
|
408
|
-
RelationConnectorAdapterService.ctorParameters = () => [
|
|
409
|
-
{ type: RelationSettingsService },
|
|
410
|
-
{ type: ErrorService },
|
|
411
|
-
{ type: RelationEventService }
|
|
412
|
-
];
|
|
413
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24tY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlbGF0aW9uL3NyYy9saWIvc2VydmljZS9yZWxhdGlvbi1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBRXBHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFFL0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDekUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0RBQStE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QTtJQUVPLDRCQUE0QixDQUFDLE1BQStCO1FBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQzs7OztZQXhWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTFCTyx1QkFBdUI7WUFVdkIsWUFBWTtZQUVaLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnknO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7UmVsYXRpb25TZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vcmVsYXRpb24tc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7T2JqZWN0Q29uZmlndXJhdGlvbn0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb2JqZWN0LWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YSc7XHJcbmltcG9ydCB7UmVsYXRpb25BcGl9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaSc7XHJcbmltcG9ydCB7TWFpbkFwaX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGknO1xyXG5pbXBvcnQge1JlbGF0aW9uU21hbGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1zbWFsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL3ZhbGlkYXRpb24tcmVzdWx0JztcclxuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7U3VwcGxpZXJGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvc3VwcGxpZXItZnVsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge0VtcGxveWVlRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL2VtcGxveWVlLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4vZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9uRXZlbnRTZXJ2aWNlfSBmcm9tICcuL3JlbGF0aW9uLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luUmVzcG9uc2V9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2xvZ2luLXJlc3BvbnNlJztcclxuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvdGl0bGUuYm8nO1xyXG5pbXBvcnQge01vZHVsZU5hbWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vbW9kdWxlLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7UmVsYXRpb25Qcml2YWN5U2V0dGluZ30gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ibyc7XHJcbmltcG9ydCB7UHJpdmFjeVNldHRpbmd9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3ByaXZhY3ktc2V0dGluZy5ibyc7XHJcbmltcG9ydCB7TGFuZ3VhZ2V9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2xhbmd1YWdlLmJvJztcclxuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vc2VxdWVuY2UtbmFtZS5lbnVtJztcclxuaW1wb3J0IHtDb3VudHJ5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9jb3VudHJ5LmJvJztcclxuaW1wb3J0IHtHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9nZXQtcG9zdGFsLWNvZGUtcmV0cmlldmFsLW91dHB1dC1wYXJhbXMnO1xyXG5pbXBvcnQge0FkZHJlc3N9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9hZGRyZXNzLmJvJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlbGF0aW9uQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IFJlbGF0aW9uQXBpO1xyXG4gIHB1YmxpYyBtYWluQ29ubmVjdG9yOiBNYWluQXBpO1xyXG4gIHB1YmxpYyBsb2dpblJlc3BvbnNlOiBMb2dpblJlc3BvbnNlO1xyXG5cclxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuICBwcml2YXRlIF9sb2FkZXJTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IFJlbGF0aW9uU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBfc2VsZWN0TXVsdGlwbGVDYWNoZVNlcnZpY2U6IFRyYW5zYWN0aW9uU2VsZWN0TXVsdGlwbGVDYWNoZVNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIF9zZWxlY3RNdWx0aXBsZVBhcmFtZXRlcml6ZWRDYWNoZVNlcnZpY2U6IFRyYW5zYWN0aW9uU2VsZWN0TXVsdGlwbGVQYXJhbWV0ZXJpemVkQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZWxhdGlvbkV2ZW50U2VydmljZTogUmVsYXRpb25FdmVudFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX2xvYWRlclN1Yikge1xyXG4gICAgICB0aGlzLl9sb2FkZXJTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jb25uZWN0b3IgPSBuZXcgUmVsYXRpb25BcGkodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzKTtcclxuICAgIHRoaXMuX2xvYWRlclN1YiA9IHRoaXMuY29ubmVjdG9yLnNob3dMb2FkZXIuc3Vic2NyaWJlKCh2YWx1ZTogYm9vbGVhbikgPT4gdGhpcy5fcmVsYXRpb25FdmVudFNlcnZpY2Uuc2hvd0xvYWRlci5uZXh0KHZhbHVlKSk7XHJcbiAgICB0aGlzLmxvZ2luUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgICB0aGlzLm1haW5Db25uZWN0b3IgPSBuZXcgTWFpbkFwaSh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ091dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2xvYWRlclN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0b3IubG9nT3V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29tbWl0KCk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jb21taXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRPYmplY3RDb25maWd1cmF0aW9uKHNjcmVlbkNmZ01vZHVsZTogc3RyaW5nLCBwYXJhbXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgaW5zZXJ0TW9kZT86IGJvb2xlYW4pOiBQcm9taXNlPE9iamVjdENvbmZpZ3VyYXRpb25bXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmdldE9iamVjdENvbmZpZ3VyYXRpb25zKHNjcmVlbkNmZ01vZHVsZSwgcGFyYW1zLCBpbnNlcnRNb2RlKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPE9iamVjdENvbmZpZ3VyYXRpb25bXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShPYmplY3RDb25maWd1cmF0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERvY3VtZW50Q29udGVudChkb2N1bWVudElkOiBudW1iZXIsIHRodW1ibmFpbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmdldERvY3VtZW50Q29udGVudChkb2N1bWVudElkLCB0aHVtYm5haWwpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5kb2N1bWVudENvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5kb2N1bWVudENvbnRlbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb3VudHJpZXMoKTogUHJvbWlzZTxDb3VudHJ5W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5zZWxlY3RNdWx0aXBsZShNb2R1bGVOYW1lLlNpbXBsZUJhc2VEYXRhLCAnQ291bnRyeScpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDb3VudHJ5LCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIENvdW50cnlbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBvc3RhbENvZGVSZXRyaWV2YWwocG9zdGFsQ29kZTogc3RyaW5nLCBob3VzZU5yOiBzdHJpbmcpOiBQcm9taXNlPEdldFBvc3RhbENvZGVSZXRyaWV2YWxPdXRwdXRQYXJhbXM+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5nZXRQb3N0YWxDb2RlUmV0cmlldmFsKHBvc3RhbENvZGUsIGhvdXNlTnIpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgR2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uU21hbGxPYmplY3QoaWQ6IG51bWJlcik6IFByb21pc2U8UmVsYXRpb25TbWFsbE9iamVjdD4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVsYXRpb25TbWFsbE9iamVjdChpZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZWxhdGlvblNtYWxsT2JqZWN0Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFJlbGF0aW9uU21hbGxPYmplY3QsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbk5hbWVLaW5kQnlDdXN0b21lck5yKHJlbGF0aW9uTnI6IG51bWJlcik6IFByb21pc2U8UmVsYXRpb25OYW1lS2luZD4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVsYXRpb25OYW1lS2luZEJ5Q3VzdG9tZXJOcihyZWxhdGlvbk5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0ICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC50b0xvd2VyQ2FzZSgpID09PSAnYicgPyBSZWxhdGlvbk5hbWVLaW5kLkNvbXBhbnkgOiBSZWxhdGlvbk5hbWVLaW5kLlByaXZhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUaXRsZXMoKTogUHJvbWlzZTxUaXRsZVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3Iuc2VsZWN0TXVsdGlwbGUoTW9kdWxlTmFtZS5TaW1wbGVCYXNlRGF0YSwgJ1RpdGxlJyk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRpdGxlLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFRpdGxlW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRMYW5ndWFnZXMoKTogUHJvbWlzZTxMYW5ndWFnZVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3Iuc2VsZWN0TXVsdGlwbGUoTW9kdWxlTmFtZS5TaW1wbGVCYXNlRGF0YSwgJ0xhbmd1YWdlJyk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KExhbmd1YWdlLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIExhbmd1YWdlW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXROZXh0Q29udGFjdE9wdGlvblNlcXVlbmNlTnVtYmVyKCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0U2VxdWVuY2VWYWx1ZShTZXF1ZW5jZU5hbWUuQ29tbXVuaWNhdGlvbk51bWJlcik7XHJcbiAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIHVua25vd24gYXMgbnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxSZWxhdGlvblByaXZhY3lTZXR0aW5nW10+IHtcclxuICAgIGNvbnN0IHByaXZhY3lTZXR0aW5nczogUmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3QgYmFzZVByaXZhY3lTZXR0aW5nczogUHJpdmFjeVNldHRpbmdbXSA9IGF3YWl0IHRoaXMuZ2V0UHJpdmFjeVNldHRpbmdzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBsZW46IG51bWJlciA9IGJhc2VQcml2YWN5U2V0dGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgYmFzZVByaXZTZXR0aW5nOiBQcml2YWN5U2V0dGluZyA9IGJhc2VQcml2YWN5U2V0dGluZ3NbaV07XHJcbiAgICAgIGNvbnN0IG5ld1JlbFByaXZTZXQ6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcgPSA8UmVsYXRpb25Qcml2YWN5U2V0dGluZz48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkuaW5zdGFudGlhdGVOZXdCbyhSZWxhdGlvblByaXZhY3lTZXR0aW5nKTtcclxuICAgICAgbmV3UmVsUHJpdlNldC5hcHBseUJhc2VQcml2YWN5U2V0dGluZ1ZhbHVlcyhiYXNlUHJpdlNldHRpbmcpO1xyXG4gICAgICBwcml2YWN5U2V0dGluZ3MucHVzaChuZXdSZWxQcml2U2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YWN5U2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8UHJpdmFjeVNldHRpbmdbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5zZWxlY3RNdWx0aXBsZShNb2R1bGVOYW1lLlNpbXBsZUJhc2VEYXRhLCAnUHJpdmFjeVNldHRpbmdEVE8nKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQcml2YWN5U2V0dGluZywgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgUHJpdmFjeVNldHRpbmdbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9ja0N1c3RvbWVyRnVsbE9iamVjdChyZWxhdGlvbk5yOiBudW1iZXIpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvY2tDdXN0b21lckJ5SWQocmVsYXRpb25OcikudGhlbihhc3luYyAocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEZpcnN0Q3VzdG9tZXJGb3JDb250YWN0KHJlbGF0aW9uTm86IG51bWJlcik6IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Rmlyc3RDdXN0b21lckZvckNvbnRhY3QocmVsYXRpb25ObywgdHJ1ZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEN1c3RvbWVyRnVsbE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDdXN0b21lckZ1bGxPYmplY3QocmVsYXRpb25ObzogbnVtYmVyKTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDdXN0b21lckZ1bGxPYmplY3QocmVsYXRpb25ObywgdHJ1ZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEN1c3RvbWVyRnVsbE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbnNlcnRDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHJlbGF0aW9uKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnVwZGF0ZUN1c3RvbWVyKHJlbGF0aW9uLCB0cnVlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrU3VwcGxpZXJGdWxsT2JqZWN0KHJlbGF0aW9uTnI6IG51bWJlcik6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1N1cHBsaWVyQnlJZChyZWxhdGlvbk5yKS50aGVuKGFzeW5jIChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQudmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3VwcGxpZXJGdWxsT2JqZWN0KHJlbGF0aW9uTm86IG51bWJlcik6IFByb21pc2U8U3VwcGxpZXJGdWxsT2JqZWN0PiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U3VwcGxpZXJGdWxsT2JqZWN0KHJlbGF0aW9uTm8sIHRydWUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFN1cHBsaWVyRnVsbE9iamVjdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBTdXBwbGllckZ1bGxPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGluc2VydFN1cHBsaWVyKHJlbGF0aW9uOiBTdXBwbGllckZ1bGxPYmplY3QpOiBQcm9taXNlPFN1cHBsaWVyRnVsbE9iamVjdD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuaW5zZXJ0U3VwcGxpZXIocmVsYXRpb24pLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTdXBwbGllckZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVN1cHBsaWVyKHJlbGF0aW9uOiBTdXBwbGllckZ1bGxPYmplY3QpOiBQcm9taXNlPFN1cHBsaWVyRnVsbE9iamVjdD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IudXBkYXRlU3VwcGxpZXIocmVsYXRpb24sIHRydWUpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTdXBwbGllckZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tFbXBsb3llZUZ1bGxPYmplY3QocmVsYXRpb25OcjogbnVtYmVyKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2NrRW1wbG95ZWVCeUlkKHJlbGF0aW9uTnIpLnRoZW4oYXN5bmMgKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICByZXNvbHZlKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRFbXBsb3llZUZ1bGxPYmplY3QocmVsYXRpb25ObzogbnVtYmVyKTogUHJvbWlzZTxFbXBsb3llZUZ1bGxPYmplY3Q+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRFbXBsb3llZUZ1bGxPYmplY3QocmVsYXRpb25Obyk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoRW1wbG95ZWVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEVtcGxveWVlRnVsbE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5zZXJ0RW1wbG95ZWUocmVsYXRpb246IEVtcGxveWVlRnVsbE9iamVjdCk6IFByb21pc2U8RW1wbG95ZWVGdWxsT2JqZWN0PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbnNlcnRFbXBsb3llZShyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEVtcGxveWVlRnVsbE9iamVjdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRW1wbG95ZWUocmVsYXRpb246IEVtcGxveWVlRnVsbE9iamVjdCk6IFByb21pc2U8RW1wbG95ZWVGdWxsT2JqZWN0PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVFbXBsb3llZShyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEVtcGxveWVlRnVsbE9iamVjdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9ja0JyYW5jaEZ1bGxPYmplY3QocmVsYXRpb25OcjogbnVtYmVyKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2NrQnJhbmNoQnlJZChyZWxhdGlvbk5yKS50aGVuKGFzeW5jIChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQudmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9ja0NvbXBhbnlGdWxsT2JqZWN0KHJlbGF0aW9uTnI6IG51bWJlcik6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja0NvbXBhbnlCeUlkKHJlbGF0aW9uTnIpLnRoZW4oYXN5bmMgKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICByZXNvbHZlKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrQ29udGFjdFBlcnNvbihyZWxhdGlvbk5yOiBudW1iZXIpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvY2tDb250YWN0UGVyc29uQnlJZChyZWxhdGlvbk5yKS50aGVuKGFzeW5jIChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQudmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5zZXJ0QWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5pbnNlcnRBZGRyZXNzKGFkZHJlc3MpO1xyXG4gICAgaWYgKHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBZGRyZXNzLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIEFkZHJlc3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnVwZGF0ZUFkZHJlc3MoYWRkcmVzcyk7XHJcbiAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFkZHJlc3MsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgQWRkcmVzcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93VmFsaWRhdGlvbkVycm9yKHJlc3VsdCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|