@ondewo/csi-client-angular 5.0.0 → 5.2.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/api/ondewo/csi/conversation.pb.d.ts +4 -1
- package/api/ondewo/s2t/speech-to-text.pb.d.ts +5 -1
- package/fesm2022/ondewo-csi-client-angular.mjs +60 -53
- package/fesm2022/ondewo-csi-client-angular.mjs.map +1 -1
- package/package.json +1 -3
- package/esm2022/api/google/api/annotations.pb.mjs +0 -2
- package/esm2022/api/google/api/http.pb.mjs +0 -524
- package/esm2022/api/google/rpc/status.pb.mjs +0 -138
- package/esm2022/api/google/type/latlng.pb.mjs +0 -119
- package/esm2022/api/ondewo/csi/conversation.pb.mjs +0 -2070
- package/esm2022/api/ondewo/csi/conversation.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/csi/conversation.pbsc.mjs +0 -315
- package/esm2022/api/ondewo/nlu/agent.pb.mjs +0 -11502
- package/esm2022/api/ondewo/nlu/agent.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/agent.pbsc.mjs +0 -1246
- package/esm2022/api/ondewo/nlu/aiservices.pb.mjs +0 -5313
- package/esm2022/api/ondewo/nlu/aiservices.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/aiservices.pbsc.mjs +0 -374
- package/esm2022/api/ondewo/nlu/ccai-project.pb.mjs +0 -2691
- package/esm2022/api/ondewo/nlu/ccai-project.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/ccai-project.pbsc.mjs +0 -224
- package/esm2022/api/ondewo/nlu/common.pb.mjs +0 -1963
- package/esm2022/api/ondewo/nlu/context.pb.mjs +0 -1380
- package/esm2022/api/ondewo/nlu/context.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/context.pbsc.mjs +0 -225
- package/esm2022/api/ondewo/nlu/entity-type.pb.mjs +0 -3909
- package/esm2022/api/ondewo/nlu/entity-type.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/entity-type.pbsc.mjs +0 -526
- package/esm2022/api/ondewo/nlu/intent.pb.mjs +0 -11252
- package/esm2022/api/ondewo/nlu/intent.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/intent.pbsc.mjs +0 -856
- package/esm2022/api/ondewo/nlu/operation-metadata.pb.mjs +0 -487
- package/esm2022/api/ondewo/nlu/operations.pb.mjs +0 -1003
- package/esm2022/api/ondewo/nlu/operations.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/operations.pbsc.mjs +0 -165
- package/esm2022/api/ondewo/nlu/project-role.pb.mjs +0 -1061
- package/esm2022/api/ondewo/nlu/project-role.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/project-role.pbsc.mjs +0 -195
- package/esm2022/api/ondewo/nlu/project-statistics.pb.mjs +0 -460
- package/esm2022/api/ondewo/nlu/project-statistics.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/project-statistics.pbsc.mjs +0 -285
- package/esm2022/api/ondewo/nlu/server-statistics.pb.mjs +0 -103
- package/esm2022/api/ondewo/nlu/server-statistics.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/server-statistics.pbsc.mjs +0 -136
- package/esm2022/api/ondewo/nlu/session.pb.mjs +0 -13750
- package/esm2022/api/ondewo/nlu/session.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/session.pbsc.mjs +0 -1246
- package/esm2022/api/ondewo/nlu/user.pb.mjs +0 -3865
- package/esm2022/api/ondewo/nlu/user.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/user.pbsc.mjs +0 -706
- package/esm2022/api/ondewo/nlu/utility.pb.mjs +0 -3302
- package/esm2022/api/ondewo/nlu/utility.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/utility.pbsc.mjs +0 -284
- package/esm2022/api/ondewo/nlu/webhook.pb.mjs +0 -1596
- package/esm2022/api/ondewo/nlu/webhook.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/nlu/webhook.pbsc.mjs +0 -225
- package/esm2022/api/ondewo/s2t/speech-to-text.pb.mjs +0 -8346
- package/esm2022/api/ondewo/s2t/speech-to-text.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/s2t/speech-to-text.pbsc.mjs +0 -495
- package/esm2022/api/ondewo/t2s/text-to-speech.pb.mjs +0 -7974
- package/esm2022/api/ondewo/t2s/text-to-speech.pbconf.mjs +0 -13
- package/esm2022/api/ondewo/t2s/text-to-speech.pbsc.mjs +0 -525
- package/esm2022/ondewo-csi-client-angular.mjs +0 -5
- package/esm2022/public-api.mjs +0 -58
|
@@ -1,3909 +0,0 @@
|
|
|
1
|
-
import { BinaryReader, BinaryWriter } from 'google-protobuf';
|
|
2
|
-
import * as googleProtobuf002 from '@ngx-grpc/well-known-types';
|
|
3
|
-
import * as googleProtobuf003 from '@ngx-grpc/well-known-types';
|
|
4
|
-
import * as googleProtobuf006 from '@ngx-grpc/well-known-types';
|
|
5
|
-
import * as ondewoNlu009 from '../../ondewo/nlu/common.pb';
|
|
6
|
-
export var EntityTypeView;
|
|
7
|
-
(function (EntityTypeView) {
|
|
8
|
-
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_UNSPECIFIED"] = 0] = "ENTITY_TYPE_VIEW_UNSPECIFIED";
|
|
9
|
-
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_FULL"] = 1] = "ENTITY_TYPE_VIEW_FULL";
|
|
10
|
-
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_PARTIAL"] = 2] = "ENTITY_TYPE_VIEW_PARTIAL";
|
|
11
|
-
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_SHALLOW"] = 3] = "ENTITY_TYPE_VIEW_SHALLOW";
|
|
12
|
-
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_MINIMUM"] = 4] = "ENTITY_TYPE_VIEW_MINIMUM";
|
|
13
|
-
})(EntityTypeView || (EntityTypeView = {}));
|
|
14
|
-
export var EntityTypeCategory;
|
|
15
|
-
(function (EntityTypeCategory) {
|
|
16
|
-
EntityTypeCategory[EntityTypeCategory["ALL_ENTITY_TYPES"] = 0] = "ALL_ENTITY_TYPES";
|
|
17
|
-
EntityTypeCategory[EntityTypeCategory["DEFAULT_ENTITY_TYPES"] = 1] = "DEFAULT_ENTITY_TYPES";
|
|
18
|
-
EntityTypeCategory[EntityTypeCategory["USER_DEFINED_ENTITY_TYPES"] = 2] = "USER_DEFINED_ENTITY_TYPES";
|
|
19
|
-
})(EntityTypeCategory || (EntityTypeCategory = {}));
|
|
20
|
-
/**
|
|
21
|
-
* Message implementation for ondewo.nlu.EntityType
|
|
22
|
-
*/
|
|
23
|
-
export class EntityType {
|
|
24
|
-
static { this.id = 'ondewo.nlu.EntityType'; }
|
|
25
|
-
/**
|
|
26
|
-
* Deserialize binary data to message
|
|
27
|
-
* @param instance message instance
|
|
28
|
-
*/
|
|
29
|
-
static deserializeBinary(bytes) {
|
|
30
|
-
const instance = new EntityType();
|
|
31
|
-
EntityType.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
32
|
-
return instance;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Check all the properties and set default protobuf values if necessary
|
|
36
|
-
* @param _instance message instance
|
|
37
|
-
*/
|
|
38
|
-
static refineValues(_instance) {
|
|
39
|
-
_instance.name = _instance.name || '';
|
|
40
|
-
_instance.displayName = _instance.displayName || '';
|
|
41
|
-
_instance.kind = _instance.kind || 0;
|
|
42
|
-
_instance.autoExpansionMode = _instance.autoExpansionMode || 0;
|
|
43
|
-
_instance.entities = _instance.entities || [];
|
|
44
|
-
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
45
|
-
_instance.entityCount = _instance.entityCount || 0;
|
|
46
|
-
_instance.status = _instance.status || 0;
|
|
47
|
-
_instance.synonymCount = _instance.synonymCount || 0;
|
|
48
|
-
_instance.createdAt = _instance.createdAt || undefined;
|
|
49
|
-
_instance.modifiedAt = _instance.modifiedAt || undefined;
|
|
50
|
-
_instance.createdBy = _instance.createdBy || '';
|
|
51
|
-
_instance.modifiedBy = _instance.modifiedBy || '';
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
55
|
-
* @param _instance message instance
|
|
56
|
-
* @param _reader binary reader instance
|
|
57
|
-
*/
|
|
58
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
59
|
-
while (_reader.nextField()) {
|
|
60
|
-
if (_reader.isEndGroup())
|
|
61
|
-
break;
|
|
62
|
-
switch (_reader.getFieldNumber()) {
|
|
63
|
-
case 1:
|
|
64
|
-
_instance.name = _reader.readString();
|
|
65
|
-
break;
|
|
66
|
-
case 2:
|
|
67
|
-
_instance.displayName = _reader.readString();
|
|
68
|
-
break;
|
|
69
|
-
case 3:
|
|
70
|
-
_instance.kind = _reader.readEnum();
|
|
71
|
-
break;
|
|
72
|
-
case 4:
|
|
73
|
-
_instance.autoExpansionMode = _reader.readEnum();
|
|
74
|
-
break;
|
|
75
|
-
case 6:
|
|
76
|
-
const messageInitializer6 = new EntityType.Entity();
|
|
77
|
-
_reader.readMessage(messageInitializer6, EntityType.Entity.deserializeBinaryFromReader);
|
|
78
|
-
(_instance.entities = _instance.entities || []).push(messageInitializer6);
|
|
79
|
-
break;
|
|
80
|
-
case 10:
|
|
81
|
-
_instance.nextPageToken = _reader.readString();
|
|
82
|
-
break;
|
|
83
|
-
case 11:
|
|
84
|
-
_instance.entityCount = _reader.readInt32();
|
|
85
|
-
break;
|
|
86
|
-
case 12:
|
|
87
|
-
_instance.status = _reader.readEnum();
|
|
88
|
-
break;
|
|
89
|
-
case 13:
|
|
90
|
-
_instance.synonymCount = _reader.readInt32();
|
|
91
|
-
break;
|
|
92
|
-
case 14:
|
|
93
|
-
_instance.createdAt = new googleProtobuf003.Timestamp();
|
|
94
|
-
_reader.readMessage(_instance.createdAt, googleProtobuf003.Timestamp.deserializeBinaryFromReader);
|
|
95
|
-
break;
|
|
96
|
-
case 15:
|
|
97
|
-
_instance.modifiedAt = new googleProtobuf003.Timestamp();
|
|
98
|
-
_reader.readMessage(_instance.modifiedAt, googleProtobuf003.Timestamp.deserializeBinaryFromReader);
|
|
99
|
-
break;
|
|
100
|
-
case 16:
|
|
101
|
-
_instance.createdBy = _reader.readString();
|
|
102
|
-
break;
|
|
103
|
-
case 17:
|
|
104
|
-
_instance.modifiedBy = _reader.readString();
|
|
105
|
-
break;
|
|
106
|
-
default:
|
|
107
|
-
_reader.skipField();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
EntityType.refineValues(_instance);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Serializes a message to binary format using provided binary reader
|
|
114
|
-
* @param _instance message instance
|
|
115
|
-
* @param _writer binary writer instance
|
|
116
|
-
*/
|
|
117
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
118
|
-
if (_instance.name) {
|
|
119
|
-
_writer.writeString(1, _instance.name);
|
|
120
|
-
}
|
|
121
|
-
if (_instance.displayName) {
|
|
122
|
-
_writer.writeString(2, _instance.displayName);
|
|
123
|
-
}
|
|
124
|
-
if (_instance.kind) {
|
|
125
|
-
_writer.writeEnum(3, _instance.kind);
|
|
126
|
-
}
|
|
127
|
-
if (_instance.autoExpansionMode) {
|
|
128
|
-
_writer.writeEnum(4, _instance.autoExpansionMode);
|
|
129
|
-
}
|
|
130
|
-
if (_instance.entities && _instance.entities.length) {
|
|
131
|
-
_writer.writeRepeatedMessage(6, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
132
|
-
}
|
|
133
|
-
if (_instance.nextPageToken) {
|
|
134
|
-
_writer.writeString(10, _instance.nextPageToken);
|
|
135
|
-
}
|
|
136
|
-
if (_instance.entityCount) {
|
|
137
|
-
_writer.writeInt32(11, _instance.entityCount);
|
|
138
|
-
}
|
|
139
|
-
if (_instance.status) {
|
|
140
|
-
_writer.writeEnum(12, _instance.status);
|
|
141
|
-
}
|
|
142
|
-
if (_instance.synonymCount) {
|
|
143
|
-
_writer.writeInt32(13, _instance.synonymCount);
|
|
144
|
-
}
|
|
145
|
-
if (_instance.createdAt) {
|
|
146
|
-
_writer.writeMessage(14, _instance.createdAt, googleProtobuf003.Timestamp.serializeBinaryToWriter);
|
|
147
|
-
}
|
|
148
|
-
if (_instance.modifiedAt) {
|
|
149
|
-
_writer.writeMessage(15, _instance.modifiedAt, googleProtobuf003.Timestamp.serializeBinaryToWriter);
|
|
150
|
-
}
|
|
151
|
-
if (_instance.createdBy) {
|
|
152
|
-
_writer.writeString(16, _instance.createdBy);
|
|
153
|
-
}
|
|
154
|
-
if (_instance.modifiedBy) {
|
|
155
|
-
_writer.writeString(17, _instance.modifiedBy);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
160
|
-
* @param _value initial values object or instance of EntityType to deeply clone from
|
|
161
|
-
*/
|
|
162
|
-
constructor(_value) {
|
|
163
|
-
_value = _value || {};
|
|
164
|
-
this.name = _value.name;
|
|
165
|
-
this.displayName = _value.displayName;
|
|
166
|
-
this.kind = _value.kind;
|
|
167
|
-
this.autoExpansionMode = _value.autoExpansionMode;
|
|
168
|
-
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
169
|
-
this.nextPageToken = _value.nextPageToken;
|
|
170
|
-
this.entityCount = _value.entityCount;
|
|
171
|
-
this.status = _value.status;
|
|
172
|
-
this.synonymCount = _value.synonymCount;
|
|
173
|
-
this.createdAt = _value.createdAt
|
|
174
|
-
? new googleProtobuf003.Timestamp(_value.createdAt)
|
|
175
|
-
: undefined;
|
|
176
|
-
this.modifiedAt = _value.modifiedAt
|
|
177
|
-
? new googleProtobuf003.Timestamp(_value.modifiedAt)
|
|
178
|
-
: undefined;
|
|
179
|
-
this.createdBy = _value.createdBy;
|
|
180
|
-
this.modifiedBy = _value.modifiedBy;
|
|
181
|
-
EntityType.refineValues(this);
|
|
182
|
-
}
|
|
183
|
-
get name() {
|
|
184
|
-
return this._name;
|
|
185
|
-
}
|
|
186
|
-
set name(value) {
|
|
187
|
-
this._name = value;
|
|
188
|
-
}
|
|
189
|
-
get displayName() {
|
|
190
|
-
return this._displayName;
|
|
191
|
-
}
|
|
192
|
-
set displayName(value) {
|
|
193
|
-
this._displayName = value;
|
|
194
|
-
}
|
|
195
|
-
get kind() {
|
|
196
|
-
return this._kind;
|
|
197
|
-
}
|
|
198
|
-
set kind(value) {
|
|
199
|
-
this._kind = value;
|
|
200
|
-
}
|
|
201
|
-
get autoExpansionMode() {
|
|
202
|
-
return this._autoExpansionMode;
|
|
203
|
-
}
|
|
204
|
-
set autoExpansionMode(value) {
|
|
205
|
-
this._autoExpansionMode = value;
|
|
206
|
-
}
|
|
207
|
-
get entities() {
|
|
208
|
-
return this._entities;
|
|
209
|
-
}
|
|
210
|
-
set entities(value) {
|
|
211
|
-
this._entities = value;
|
|
212
|
-
}
|
|
213
|
-
get nextPageToken() {
|
|
214
|
-
return this._nextPageToken;
|
|
215
|
-
}
|
|
216
|
-
set nextPageToken(value) {
|
|
217
|
-
this._nextPageToken = value;
|
|
218
|
-
}
|
|
219
|
-
get entityCount() {
|
|
220
|
-
return this._entityCount;
|
|
221
|
-
}
|
|
222
|
-
set entityCount(value) {
|
|
223
|
-
this._entityCount = value;
|
|
224
|
-
}
|
|
225
|
-
get status() {
|
|
226
|
-
return this._status;
|
|
227
|
-
}
|
|
228
|
-
set status(value) {
|
|
229
|
-
this._status = value;
|
|
230
|
-
}
|
|
231
|
-
get synonymCount() {
|
|
232
|
-
return this._synonymCount;
|
|
233
|
-
}
|
|
234
|
-
set synonymCount(value) {
|
|
235
|
-
this._synonymCount = value;
|
|
236
|
-
}
|
|
237
|
-
get createdAt() {
|
|
238
|
-
return this._createdAt;
|
|
239
|
-
}
|
|
240
|
-
set createdAt(value) {
|
|
241
|
-
this._createdAt = value;
|
|
242
|
-
}
|
|
243
|
-
get modifiedAt() {
|
|
244
|
-
return this._modifiedAt;
|
|
245
|
-
}
|
|
246
|
-
set modifiedAt(value) {
|
|
247
|
-
this._modifiedAt = value;
|
|
248
|
-
}
|
|
249
|
-
get createdBy() {
|
|
250
|
-
return this._createdBy;
|
|
251
|
-
}
|
|
252
|
-
set createdBy(value) {
|
|
253
|
-
this._createdBy = value;
|
|
254
|
-
}
|
|
255
|
-
get modifiedBy() {
|
|
256
|
-
return this._modifiedBy;
|
|
257
|
-
}
|
|
258
|
-
set modifiedBy(value) {
|
|
259
|
-
this._modifiedBy = value;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Serialize message to binary data
|
|
263
|
-
* @param instance message instance
|
|
264
|
-
*/
|
|
265
|
-
serializeBinary() {
|
|
266
|
-
const writer = new BinaryWriter();
|
|
267
|
-
EntityType.serializeBinaryToWriter(this, writer);
|
|
268
|
-
return writer.getResultBuffer();
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
272
|
-
*/
|
|
273
|
-
toObject() {
|
|
274
|
-
return {
|
|
275
|
-
name: this.name,
|
|
276
|
-
displayName: this.displayName,
|
|
277
|
-
kind: this.kind,
|
|
278
|
-
autoExpansionMode: this.autoExpansionMode,
|
|
279
|
-
entities: (this.entities || []).map(m => m.toObject()),
|
|
280
|
-
nextPageToken: this.nextPageToken,
|
|
281
|
-
entityCount: this.entityCount,
|
|
282
|
-
status: this.status,
|
|
283
|
-
synonymCount: this.synonymCount,
|
|
284
|
-
createdAt: this.createdAt ? this.createdAt.toObject() : undefined,
|
|
285
|
-
modifiedAt: this.modifiedAt ? this.modifiedAt.toObject() : undefined,
|
|
286
|
-
createdBy: this.createdBy,
|
|
287
|
-
modifiedBy: this.modifiedBy
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
292
|
-
*/
|
|
293
|
-
toJSON() {
|
|
294
|
-
return this.toObject();
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
298
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
299
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
300
|
-
*/
|
|
301
|
-
toProtobufJSON(
|
|
302
|
-
// @ts-ignore
|
|
303
|
-
options) {
|
|
304
|
-
return {
|
|
305
|
-
name: this.name,
|
|
306
|
-
displayName: this.displayName,
|
|
307
|
-
kind: EntityType.Kind[this.kind === null || this.kind === undefined ? 0 : this.kind],
|
|
308
|
-
autoExpansionMode: EntityType.AutoExpansionMode[this.autoExpansionMode === null ||
|
|
309
|
-
this.autoExpansionMode === undefined
|
|
310
|
-
? 0
|
|
311
|
-
: this.autoExpansionMode],
|
|
312
|
-
entities: (this.entities || []).map(m => m.toProtobufJSON(options)),
|
|
313
|
-
nextPageToken: this.nextPageToken,
|
|
314
|
-
entityCount: this.entityCount,
|
|
315
|
-
status: EntityType.EntityTypeStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
316
|
-
synonymCount: this.synonymCount,
|
|
317
|
-
createdAt: this.createdAt ? this.createdAt.toProtobufJSON(options) : null,
|
|
318
|
-
modifiedAt: this.modifiedAt
|
|
319
|
-
? this.modifiedAt.toProtobufJSON(options)
|
|
320
|
-
: null,
|
|
321
|
-
createdBy: this.createdBy,
|
|
322
|
-
modifiedBy: this.modifiedBy
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
(function (EntityType) {
|
|
327
|
-
let Kind;
|
|
328
|
-
(function (Kind) {
|
|
329
|
-
Kind[Kind["KIND_UNSPECIFIED"] = 0] = "KIND_UNSPECIFIED";
|
|
330
|
-
Kind[Kind["KIND_MAP"] = 1] = "KIND_MAP";
|
|
331
|
-
Kind[Kind["KIND_LIST"] = 2] = "KIND_LIST";
|
|
332
|
-
})(Kind = EntityType.Kind || (EntityType.Kind = {}));
|
|
333
|
-
let EntityTypeStatus;
|
|
334
|
-
(function (EntityTypeStatus) {
|
|
335
|
-
EntityTypeStatus[EntityTypeStatus["ACTIVE"] = 0] = "ACTIVE";
|
|
336
|
-
EntityTypeStatus[EntityTypeStatus["INACTIVE"] = 1] = "INACTIVE";
|
|
337
|
-
})(EntityTypeStatus = EntityType.EntityTypeStatus || (EntityType.EntityTypeStatus = {}));
|
|
338
|
-
let AutoExpansionMode;
|
|
339
|
-
(function (AutoExpansionMode) {
|
|
340
|
-
AutoExpansionMode[AutoExpansionMode["AUTO_EXPANSION_MODE_UNSPECIFIED"] = 0] = "AUTO_EXPANSION_MODE_UNSPECIFIED";
|
|
341
|
-
AutoExpansionMode[AutoExpansionMode["AUTO_EXPANSION_MODE_DEFAULT"] = 1] = "AUTO_EXPANSION_MODE_DEFAULT";
|
|
342
|
-
})(AutoExpansionMode = EntityType.AutoExpansionMode || (EntityType.AutoExpansionMode = {}));
|
|
343
|
-
/**
|
|
344
|
-
* Message implementation for ondewo.nlu.EntityType.Entity
|
|
345
|
-
*/
|
|
346
|
-
class Entity {
|
|
347
|
-
static { this.id = 'ondewo.nlu.EntityType.Entity'; }
|
|
348
|
-
/**
|
|
349
|
-
* Deserialize binary data to message
|
|
350
|
-
* @param instance message instance
|
|
351
|
-
*/
|
|
352
|
-
static deserializeBinary(bytes) {
|
|
353
|
-
const instance = new Entity();
|
|
354
|
-
Entity.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
355
|
-
return instance;
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Check all the properties and set default protobuf values if necessary
|
|
359
|
-
* @param _instance message instance
|
|
360
|
-
*/
|
|
361
|
-
static refineValues(_instance) {
|
|
362
|
-
_instance.value = _instance.value || '';
|
|
363
|
-
_instance.synonyms = _instance.synonyms || [];
|
|
364
|
-
_instance.name = _instance.name || '';
|
|
365
|
-
_instance.displayName = _instance.displayName || '';
|
|
366
|
-
_instance.synonymCount = _instance.synonymCount || 0;
|
|
367
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
368
|
-
_instance.createdAt = _instance.createdAt || undefined;
|
|
369
|
-
_instance.modifiedAt = _instance.modifiedAt || undefined;
|
|
370
|
-
_instance.createdBy = _instance.createdBy || '';
|
|
371
|
-
_instance.modifiedBy = _instance.modifiedBy || '';
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
375
|
-
* @param _instance message instance
|
|
376
|
-
* @param _reader binary reader instance
|
|
377
|
-
*/
|
|
378
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
379
|
-
while (_reader.nextField()) {
|
|
380
|
-
if (_reader.isEndGroup())
|
|
381
|
-
break;
|
|
382
|
-
switch (_reader.getFieldNumber()) {
|
|
383
|
-
case 1:
|
|
384
|
-
_instance.value = _reader.readString();
|
|
385
|
-
break;
|
|
386
|
-
case 2:
|
|
387
|
-
(_instance.synonyms = _instance.synonyms || []).push(_reader.readString());
|
|
388
|
-
break;
|
|
389
|
-
case 3:
|
|
390
|
-
_instance.name = _reader.readString();
|
|
391
|
-
break;
|
|
392
|
-
case 4:
|
|
393
|
-
_instance.displayName = _reader.readString();
|
|
394
|
-
break;
|
|
395
|
-
case 5:
|
|
396
|
-
_instance.synonymCount = _reader.readInt32();
|
|
397
|
-
break;
|
|
398
|
-
case 6:
|
|
399
|
-
_instance.languageCode = _reader.readString();
|
|
400
|
-
break;
|
|
401
|
-
case 7:
|
|
402
|
-
_instance.createdAt = new googleProtobuf003.Timestamp();
|
|
403
|
-
_reader.readMessage(_instance.createdAt, googleProtobuf003.Timestamp.deserializeBinaryFromReader);
|
|
404
|
-
break;
|
|
405
|
-
case 8:
|
|
406
|
-
_instance.modifiedAt = new googleProtobuf003.Timestamp();
|
|
407
|
-
_reader.readMessage(_instance.modifiedAt, googleProtobuf003.Timestamp.deserializeBinaryFromReader);
|
|
408
|
-
break;
|
|
409
|
-
case 9:
|
|
410
|
-
_instance.createdBy = _reader.readString();
|
|
411
|
-
break;
|
|
412
|
-
case 10:
|
|
413
|
-
_instance.modifiedBy = _reader.readString();
|
|
414
|
-
break;
|
|
415
|
-
default:
|
|
416
|
-
_reader.skipField();
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
Entity.refineValues(_instance);
|
|
420
|
-
}
|
|
421
|
-
/**
|
|
422
|
-
* Serializes a message to binary format using provided binary reader
|
|
423
|
-
* @param _instance message instance
|
|
424
|
-
* @param _writer binary writer instance
|
|
425
|
-
*/
|
|
426
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
427
|
-
if (_instance.value) {
|
|
428
|
-
_writer.writeString(1, _instance.value);
|
|
429
|
-
}
|
|
430
|
-
if (_instance.synonyms && _instance.synonyms.length) {
|
|
431
|
-
_writer.writeRepeatedString(2, _instance.synonyms);
|
|
432
|
-
}
|
|
433
|
-
if (_instance.name) {
|
|
434
|
-
_writer.writeString(3, _instance.name);
|
|
435
|
-
}
|
|
436
|
-
if (_instance.displayName) {
|
|
437
|
-
_writer.writeString(4, _instance.displayName);
|
|
438
|
-
}
|
|
439
|
-
if (_instance.synonymCount) {
|
|
440
|
-
_writer.writeInt32(5, _instance.synonymCount);
|
|
441
|
-
}
|
|
442
|
-
if (_instance.languageCode) {
|
|
443
|
-
_writer.writeString(6, _instance.languageCode);
|
|
444
|
-
}
|
|
445
|
-
if (_instance.createdAt) {
|
|
446
|
-
_writer.writeMessage(7, _instance.createdAt, googleProtobuf003.Timestamp.serializeBinaryToWriter);
|
|
447
|
-
}
|
|
448
|
-
if (_instance.modifiedAt) {
|
|
449
|
-
_writer.writeMessage(8, _instance.modifiedAt, googleProtobuf003.Timestamp.serializeBinaryToWriter);
|
|
450
|
-
}
|
|
451
|
-
if (_instance.createdBy) {
|
|
452
|
-
_writer.writeString(9, _instance.createdBy);
|
|
453
|
-
}
|
|
454
|
-
if (_instance.modifiedBy) {
|
|
455
|
-
_writer.writeString(10, _instance.modifiedBy);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
460
|
-
* @param _value initial values object or instance of Entity to deeply clone from
|
|
461
|
-
*/
|
|
462
|
-
constructor(_value) {
|
|
463
|
-
_value = _value || {};
|
|
464
|
-
this.value = _value.value;
|
|
465
|
-
this.synonyms = (_value.synonyms || []).slice();
|
|
466
|
-
this.name = _value.name;
|
|
467
|
-
this.displayName = _value.displayName;
|
|
468
|
-
this.synonymCount = _value.synonymCount;
|
|
469
|
-
this.languageCode = _value.languageCode;
|
|
470
|
-
this.createdAt = _value.createdAt
|
|
471
|
-
? new googleProtobuf003.Timestamp(_value.createdAt)
|
|
472
|
-
: undefined;
|
|
473
|
-
this.modifiedAt = _value.modifiedAt
|
|
474
|
-
? new googleProtobuf003.Timestamp(_value.modifiedAt)
|
|
475
|
-
: undefined;
|
|
476
|
-
this.createdBy = _value.createdBy;
|
|
477
|
-
this.modifiedBy = _value.modifiedBy;
|
|
478
|
-
Entity.refineValues(this);
|
|
479
|
-
}
|
|
480
|
-
get value() {
|
|
481
|
-
return this._value;
|
|
482
|
-
}
|
|
483
|
-
set value(value) {
|
|
484
|
-
this._value = value;
|
|
485
|
-
}
|
|
486
|
-
get synonyms() {
|
|
487
|
-
return this._synonyms;
|
|
488
|
-
}
|
|
489
|
-
set synonyms(value) {
|
|
490
|
-
this._synonyms = value;
|
|
491
|
-
}
|
|
492
|
-
get name() {
|
|
493
|
-
return this._name;
|
|
494
|
-
}
|
|
495
|
-
set name(value) {
|
|
496
|
-
this._name = value;
|
|
497
|
-
}
|
|
498
|
-
get displayName() {
|
|
499
|
-
return this._displayName;
|
|
500
|
-
}
|
|
501
|
-
set displayName(value) {
|
|
502
|
-
this._displayName = value;
|
|
503
|
-
}
|
|
504
|
-
get synonymCount() {
|
|
505
|
-
return this._synonymCount;
|
|
506
|
-
}
|
|
507
|
-
set synonymCount(value) {
|
|
508
|
-
this._synonymCount = value;
|
|
509
|
-
}
|
|
510
|
-
get languageCode() {
|
|
511
|
-
return this._languageCode;
|
|
512
|
-
}
|
|
513
|
-
set languageCode(value) {
|
|
514
|
-
this._languageCode = value;
|
|
515
|
-
}
|
|
516
|
-
get createdAt() {
|
|
517
|
-
return this._createdAt;
|
|
518
|
-
}
|
|
519
|
-
set createdAt(value) {
|
|
520
|
-
this._createdAt = value;
|
|
521
|
-
}
|
|
522
|
-
get modifiedAt() {
|
|
523
|
-
return this._modifiedAt;
|
|
524
|
-
}
|
|
525
|
-
set modifiedAt(value) {
|
|
526
|
-
this._modifiedAt = value;
|
|
527
|
-
}
|
|
528
|
-
get createdBy() {
|
|
529
|
-
return this._createdBy;
|
|
530
|
-
}
|
|
531
|
-
set createdBy(value) {
|
|
532
|
-
this._createdBy = value;
|
|
533
|
-
}
|
|
534
|
-
get modifiedBy() {
|
|
535
|
-
return this._modifiedBy;
|
|
536
|
-
}
|
|
537
|
-
set modifiedBy(value) {
|
|
538
|
-
this._modifiedBy = value;
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* Serialize message to binary data
|
|
542
|
-
* @param instance message instance
|
|
543
|
-
*/
|
|
544
|
-
serializeBinary() {
|
|
545
|
-
const writer = new BinaryWriter();
|
|
546
|
-
Entity.serializeBinaryToWriter(this, writer);
|
|
547
|
-
return writer.getResultBuffer();
|
|
548
|
-
}
|
|
549
|
-
/**
|
|
550
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
551
|
-
*/
|
|
552
|
-
toObject() {
|
|
553
|
-
return {
|
|
554
|
-
value: this.value,
|
|
555
|
-
synonyms: (this.synonyms || []).slice(),
|
|
556
|
-
name: this.name,
|
|
557
|
-
displayName: this.displayName,
|
|
558
|
-
synonymCount: this.synonymCount,
|
|
559
|
-
languageCode: this.languageCode,
|
|
560
|
-
createdAt: this.createdAt ? this.createdAt.toObject() : undefined,
|
|
561
|
-
modifiedAt: this.modifiedAt ? this.modifiedAt.toObject() : undefined,
|
|
562
|
-
createdBy: this.createdBy,
|
|
563
|
-
modifiedBy: this.modifiedBy
|
|
564
|
-
};
|
|
565
|
-
}
|
|
566
|
-
/**
|
|
567
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
568
|
-
*/
|
|
569
|
-
toJSON() {
|
|
570
|
-
return this.toObject();
|
|
571
|
-
}
|
|
572
|
-
/**
|
|
573
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
574
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
575
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
576
|
-
*/
|
|
577
|
-
toProtobufJSON(
|
|
578
|
-
// @ts-ignore
|
|
579
|
-
options) {
|
|
580
|
-
return {
|
|
581
|
-
value: this.value,
|
|
582
|
-
synonyms: (this.synonyms || []).slice(),
|
|
583
|
-
name: this.name,
|
|
584
|
-
displayName: this.displayName,
|
|
585
|
-
synonymCount: this.synonymCount,
|
|
586
|
-
languageCode: this.languageCode,
|
|
587
|
-
createdAt: this.createdAt
|
|
588
|
-
? this.createdAt.toProtobufJSON(options)
|
|
589
|
-
: null,
|
|
590
|
-
modifiedAt: this.modifiedAt
|
|
591
|
-
? this.modifiedAt.toProtobufJSON(options)
|
|
592
|
-
: null,
|
|
593
|
-
createdBy: this.createdBy,
|
|
594
|
-
modifiedBy: this.modifiedBy
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
EntityType.Entity = Entity;
|
|
599
|
-
})(EntityType || (EntityType = {}));
|
|
600
|
-
/**
|
|
601
|
-
* Message implementation for ondewo.nlu.ListEntityTypesRequest
|
|
602
|
-
*/
|
|
603
|
-
export class ListEntityTypesRequest {
|
|
604
|
-
static { this.id = 'ondewo.nlu.ListEntityTypesRequest'; }
|
|
605
|
-
/**
|
|
606
|
-
* Deserialize binary data to message
|
|
607
|
-
* @param instance message instance
|
|
608
|
-
*/
|
|
609
|
-
static deserializeBinary(bytes) {
|
|
610
|
-
const instance = new ListEntityTypesRequest();
|
|
611
|
-
ListEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
612
|
-
return instance;
|
|
613
|
-
}
|
|
614
|
-
/**
|
|
615
|
-
* Check all the properties and set default protobuf values if necessary
|
|
616
|
-
* @param _instance message instance
|
|
617
|
-
*/
|
|
618
|
-
static refineValues(_instance) {
|
|
619
|
-
_instance.parent = _instance.parent || '';
|
|
620
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
621
|
-
_instance.pageToken = _instance.pageToken || '';
|
|
622
|
-
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
623
|
-
_instance.filterByCategory = _instance.filterByCategory || 0;
|
|
624
|
-
_instance.sortByField = _instance.sortByField || undefined;
|
|
625
|
-
}
|
|
626
|
-
/**
|
|
627
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
628
|
-
* @param _instance message instance
|
|
629
|
-
* @param _reader binary reader instance
|
|
630
|
-
*/
|
|
631
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
632
|
-
while (_reader.nextField()) {
|
|
633
|
-
if (_reader.isEndGroup())
|
|
634
|
-
break;
|
|
635
|
-
switch (_reader.getFieldNumber()) {
|
|
636
|
-
case 1:
|
|
637
|
-
_instance.parent = _reader.readString();
|
|
638
|
-
break;
|
|
639
|
-
case 2:
|
|
640
|
-
_instance.languageCode = _reader.readString();
|
|
641
|
-
break;
|
|
642
|
-
case 4:
|
|
643
|
-
_instance.pageToken = _reader.readString();
|
|
644
|
-
break;
|
|
645
|
-
case 5:
|
|
646
|
-
_instance.entityTypeView = _reader.readEnum();
|
|
647
|
-
break;
|
|
648
|
-
case 6:
|
|
649
|
-
_instance.filterByCategory = _reader.readEnum();
|
|
650
|
-
break;
|
|
651
|
-
case 7:
|
|
652
|
-
_instance.sortByField = new EntityTypeSorting();
|
|
653
|
-
_reader.readMessage(_instance.sortByField, EntityTypeSorting.deserializeBinaryFromReader);
|
|
654
|
-
break;
|
|
655
|
-
default:
|
|
656
|
-
_reader.skipField();
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
ListEntityTypesRequest.refineValues(_instance);
|
|
660
|
-
}
|
|
661
|
-
/**
|
|
662
|
-
* Serializes a message to binary format using provided binary reader
|
|
663
|
-
* @param _instance message instance
|
|
664
|
-
* @param _writer binary writer instance
|
|
665
|
-
*/
|
|
666
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
667
|
-
if (_instance.parent) {
|
|
668
|
-
_writer.writeString(1, _instance.parent);
|
|
669
|
-
}
|
|
670
|
-
if (_instance.languageCode) {
|
|
671
|
-
_writer.writeString(2, _instance.languageCode);
|
|
672
|
-
}
|
|
673
|
-
if (_instance.pageToken) {
|
|
674
|
-
_writer.writeString(4, _instance.pageToken);
|
|
675
|
-
}
|
|
676
|
-
if (_instance.entityTypeView) {
|
|
677
|
-
_writer.writeEnum(5, _instance.entityTypeView);
|
|
678
|
-
}
|
|
679
|
-
if (_instance.filterByCategory) {
|
|
680
|
-
_writer.writeEnum(6, _instance.filterByCategory);
|
|
681
|
-
}
|
|
682
|
-
if (_instance.sortByField) {
|
|
683
|
-
_writer.writeMessage(7, _instance.sortByField, EntityTypeSorting.serializeBinaryToWriter);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
/**
|
|
687
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
688
|
-
* @param _value initial values object or instance of ListEntityTypesRequest to deeply clone from
|
|
689
|
-
*/
|
|
690
|
-
constructor(_value) {
|
|
691
|
-
_value = _value || {};
|
|
692
|
-
this.parent = _value.parent;
|
|
693
|
-
this.languageCode = _value.languageCode;
|
|
694
|
-
this.pageToken = _value.pageToken;
|
|
695
|
-
this.entityTypeView = _value.entityTypeView;
|
|
696
|
-
this.filterByCategory = _value.filterByCategory;
|
|
697
|
-
this.sortByField = _value.sortByField
|
|
698
|
-
? new EntityTypeSorting(_value.sortByField)
|
|
699
|
-
: undefined;
|
|
700
|
-
ListEntityTypesRequest.refineValues(this);
|
|
701
|
-
}
|
|
702
|
-
get parent() {
|
|
703
|
-
return this._parent;
|
|
704
|
-
}
|
|
705
|
-
set parent(value) {
|
|
706
|
-
this._parent = value;
|
|
707
|
-
}
|
|
708
|
-
get languageCode() {
|
|
709
|
-
return this._languageCode;
|
|
710
|
-
}
|
|
711
|
-
set languageCode(value) {
|
|
712
|
-
this._languageCode = value;
|
|
713
|
-
}
|
|
714
|
-
get pageToken() {
|
|
715
|
-
return this._pageToken;
|
|
716
|
-
}
|
|
717
|
-
set pageToken(value) {
|
|
718
|
-
this._pageToken = value;
|
|
719
|
-
}
|
|
720
|
-
get entityTypeView() {
|
|
721
|
-
return this._entityTypeView;
|
|
722
|
-
}
|
|
723
|
-
set entityTypeView(value) {
|
|
724
|
-
this._entityTypeView = value;
|
|
725
|
-
}
|
|
726
|
-
get filterByCategory() {
|
|
727
|
-
return this._filterByCategory;
|
|
728
|
-
}
|
|
729
|
-
set filterByCategory(value) {
|
|
730
|
-
this._filterByCategory = value;
|
|
731
|
-
}
|
|
732
|
-
get sortByField() {
|
|
733
|
-
return this._sortByField;
|
|
734
|
-
}
|
|
735
|
-
set sortByField(value) {
|
|
736
|
-
this._sortByField = value;
|
|
737
|
-
}
|
|
738
|
-
/**
|
|
739
|
-
* Serialize message to binary data
|
|
740
|
-
* @param instance message instance
|
|
741
|
-
*/
|
|
742
|
-
serializeBinary() {
|
|
743
|
-
const writer = new BinaryWriter();
|
|
744
|
-
ListEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
745
|
-
return writer.getResultBuffer();
|
|
746
|
-
}
|
|
747
|
-
/**
|
|
748
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
749
|
-
*/
|
|
750
|
-
toObject() {
|
|
751
|
-
return {
|
|
752
|
-
parent: this.parent,
|
|
753
|
-
languageCode: this.languageCode,
|
|
754
|
-
pageToken: this.pageToken,
|
|
755
|
-
entityTypeView: this.entityTypeView,
|
|
756
|
-
filterByCategory: this.filterByCategory,
|
|
757
|
-
sortByField: this.sortByField ? this.sortByField.toObject() : undefined
|
|
758
|
-
};
|
|
759
|
-
}
|
|
760
|
-
/**
|
|
761
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
762
|
-
*/
|
|
763
|
-
toJSON() {
|
|
764
|
-
return this.toObject();
|
|
765
|
-
}
|
|
766
|
-
/**
|
|
767
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
768
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
769
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
770
|
-
*/
|
|
771
|
-
toProtobufJSON(
|
|
772
|
-
// @ts-ignore
|
|
773
|
-
options) {
|
|
774
|
-
return {
|
|
775
|
-
parent: this.parent,
|
|
776
|
-
languageCode: this.languageCode,
|
|
777
|
-
pageToken: this.pageToken,
|
|
778
|
-
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
779
|
-
? 0
|
|
780
|
-
: this.entityTypeView],
|
|
781
|
-
filterByCategory: EntityTypeCategory[this.filterByCategory === null || this.filterByCategory === undefined
|
|
782
|
-
? 0
|
|
783
|
-
: this.filterByCategory],
|
|
784
|
-
sortByField: this.sortByField
|
|
785
|
-
? this.sortByField.toProtobufJSON(options)
|
|
786
|
-
: null
|
|
787
|
-
};
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
/**
|
|
791
|
-
* Message implementation for ondewo.nlu.ListEntityTypesResponse
|
|
792
|
-
*/
|
|
793
|
-
export class ListEntityTypesResponse {
|
|
794
|
-
static { this.id = 'ondewo.nlu.ListEntityTypesResponse'; }
|
|
795
|
-
/**
|
|
796
|
-
* Deserialize binary data to message
|
|
797
|
-
* @param instance message instance
|
|
798
|
-
*/
|
|
799
|
-
static deserializeBinary(bytes) {
|
|
800
|
-
const instance = new ListEntityTypesResponse();
|
|
801
|
-
ListEntityTypesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
802
|
-
return instance;
|
|
803
|
-
}
|
|
804
|
-
/**
|
|
805
|
-
* Check all the properties and set default protobuf values if necessary
|
|
806
|
-
* @param _instance message instance
|
|
807
|
-
*/
|
|
808
|
-
static refineValues(_instance) {
|
|
809
|
-
_instance.entityTypes = _instance.entityTypes || [];
|
|
810
|
-
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
811
|
-
}
|
|
812
|
-
/**
|
|
813
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
814
|
-
* @param _instance message instance
|
|
815
|
-
* @param _reader binary reader instance
|
|
816
|
-
*/
|
|
817
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
818
|
-
while (_reader.nextField()) {
|
|
819
|
-
if (_reader.isEndGroup())
|
|
820
|
-
break;
|
|
821
|
-
switch (_reader.getFieldNumber()) {
|
|
822
|
-
case 1:
|
|
823
|
-
const messageInitializer1 = new EntityType();
|
|
824
|
-
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
825
|
-
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
826
|
-
break;
|
|
827
|
-
case 2:
|
|
828
|
-
_instance.nextPageToken = _reader.readString();
|
|
829
|
-
break;
|
|
830
|
-
default:
|
|
831
|
-
_reader.skipField();
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
ListEntityTypesResponse.refineValues(_instance);
|
|
835
|
-
}
|
|
836
|
-
/**
|
|
837
|
-
* Serializes a message to binary format using provided binary reader
|
|
838
|
-
* @param _instance message instance
|
|
839
|
-
* @param _writer binary writer instance
|
|
840
|
-
*/
|
|
841
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
842
|
-
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
843
|
-
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
844
|
-
}
|
|
845
|
-
if (_instance.nextPageToken) {
|
|
846
|
-
_writer.writeString(2, _instance.nextPageToken);
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
/**
|
|
850
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
851
|
-
* @param _value initial values object or instance of ListEntityTypesResponse to deeply clone from
|
|
852
|
-
*/
|
|
853
|
-
constructor(_value) {
|
|
854
|
-
_value = _value || {};
|
|
855
|
-
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
856
|
-
this.nextPageToken = _value.nextPageToken;
|
|
857
|
-
ListEntityTypesResponse.refineValues(this);
|
|
858
|
-
}
|
|
859
|
-
get entityTypes() {
|
|
860
|
-
return this._entityTypes;
|
|
861
|
-
}
|
|
862
|
-
set entityTypes(value) {
|
|
863
|
-
this._entityTypes = value;
|
|
864
|
-
}
|
|
865
|
-
get nextPageToken() {
|
|
866
|
-
return this._nextPageToken;
|
|
867
|
-
}
|
|
868
|
-
set nextPageToken(value) {
|
|
869
|
-
this._nextPageToken = value;
|
|
870
|
-
}
|
|
871
|
-
/**
|
|
872
|
-
* Serialize message to binary data
|
|
873
|
-
* @param instance message instance
|
|
874
|
-
*/
|
|
875
|
-
serializeBinary() {
|
|
876
|
-
const writer = new BinaryWriter();
|
|
877
|
-
ListEntityTypesResponse.serializeBinaryToWriter(this, writer);
|
|
878
|
-
return writer.getResultBuffer();
|
|
879
|
-
}
|
|
880
|
-
/**
|
|
881
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
882
|
-
*/
|
|
883
|
-
toObject() {
|
|
884
|
-
return {
|
|
885
|
-
entityTypes: (this.entityTypes || []).map(m => m.toObject()),
|
|
886
|
-
nextPageToken: this.nextPageToken
|
|
887
|
-
};
|
|
888
|
-
}
|
|
889
|
-
/**
|
|
890
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
891
|
-
*/
|
|
892
|
-
toJSON() {
|
|
893
|
-
return this.toObject();
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
897
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
898
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
899
|
-
*/
|
|
900
|
-
toProtobufJSON(
|
|
901
|
-
// @ts-ignore
|
|
902
|
-
options) {
|
|
903
|
-
return {
|
|
904
|
-
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options)),
|
|
905
|
-
nextPageToken: this.nextPageToken
|
|
906
|
-
};
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
/**
|
|
910
|
-
* Message implementation for ondewo.nlu.GetEntityTypeRequest
|
|
911
|
-
*/
|
|
912
|
-
export class GetEntityTypeRequest {
|
|
913
|
-
static { this.id = 'ondewo.nlu.GetEntityTypeRequest'; }
|
|
914
|
-
/**
|
|
915
|
-
* Deserialize binary data to message
|
|
916
|
-
* @param instance message instance
|
|
917
|
-
*/
|
|
918
|
-
static deserializeBinary(bytes) {
|
|
919
|
-
const instance = new GetEntityTypeRequest();
|
|
920
|
-
GetEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
921
|
-
return instance;
|
|
922
|
-
}
|
|
923
|
-
/**
|
|
924
|
-
* Check all the properties and set default protobuf values if necessary
|
|
925
|
-
* @param _instance message instance
|
|
926
|
-
*/
|
|
927
|
-
static refineValues(_instance) {
|
|
928
|
-
_instance.name = _instance.name || '';
|
|
929
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
930
|
-
_instance.pageToken = _instance.pageToken || '';
|
|
931
|
-
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
932
|
-
}
|
|
933
|
-
/**
|
|
934
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
935
|
-
* @param _instance message instance
|
|
936
|
-
* @param _reader binary reader instance
|
|
937
|
-
*/
|
|
938
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
939
|
-
while (_reader.nextField()) {
|
|
940
|
-
if (_reader.isEndGroup())
|
|
941
|
-
break;
|
|
942
|
-
switch (_reader.getFieldNumber()) {
|
|
943
|
-
case 1:
|
|
944
|
-
_instance.name = _reader.readString();
|
|
945
|
-
break;
|
|
946
|
-
case 2:
|
|
947
|
-
_instance.languageCode = _reader.readString();
|
|
948
|
-
break;
|
|
949
|
-
case 5:
|
|
950
|
-
_instance.pageToken = _reader.readString();
|
|
951
|
-
break;
|
|
952
|
-
case 6:
|
|
953
|
-
_instance.entityTypeView = _reader.readEnum();
|
|
954
|
-
break;
|
|
955
|
-
default:
|
|
956
|
-
_reader.skipField();
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
GetEntityTypeRequest.refineValues(_instance);
|
|
960
|
-
}
|
|
961
|
-
/**
|
|
962
|
-
* Serializes a message to binary format using provided binary reader
|
|
963
|
-
* @param _instance message instance
|
|
964
|
-
* @param _writer binary writer instance
|
|
965
|
-
*/
|
|
966
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
967
|
-
if (_instance.name) {
|
|
968
|
-
_writer.writeString(1, _instance.name);
|
|
969
|
-
}
|
|
970
|
-
if (_instance.languageCode) {
|
|
971
|
-
_writer.writeString(2, _instance.languageCode);
|
|
972
|
-
}
|
|
973
|
-
if (_instance.pageToken) {
|
|
974
|
-
_writer.writeString(5, _instance.pageToken);
|
|
975
|
-
}
|
|
976
|
-
if (_instance.entityTypeView) {
|
|
977
|
-
_writer.writeEnum(6, _instance.entityTypeView);
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
/**
|
|
981
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
982
|
-
* @param _value initial values object or instance of GetEntityTypeRequest to deeply clone from
|
|
983
|
-
*/
|
|
984
|
-
constructor(_value) {
|
|
985
|
-
_value = _value || {};
|
|
986
|
-
this.name = _value.name;
|
|
987
|
-
this.languageCode = _value.languageCode;
|
|
988
|
-
this.pageToken = _value.pageToken;
|
|
989
|
-
this.entityTypeView = _value.entityTypeView;
|
|
990
|
-
GetEntityTypeRequest.refineValues(this);
|
|
991
|
-
}
|
|
992
|
-
get name() {
|
|
993
|
-
return this._name;
|
|
994
|
-
}
|
|
995
|
-
set name(value) {
|
|
996
|
-
this._name = value;
|
|
997
|
-
}
|
|
998
|
-
get languageCode() {
|
|
999
|
-
return this._languageCode;
|
|
1000
|
-
}
|
|
1001
|
-
set languageCode(value) {
|
|
1002
|
-
this._languageCode = value;
|
|
1003
|
-
}
|
|
1004
|
-
get pageToken() {
|
|
1005
|
-
return this._pageToken;
|
|
1006
|
-
}
|
|
1007
|
-
set pageToken(value) {
|
|
1008
|
-
this._pageToken = value;
|
|
1009
|
-
}
|
|
1010
|
-
get entityTypeView() {
|
|
1011
|
-
return this._entityTypeView;
|
|
1012
|
-
}
|
|
1013
|
-
set entityTypeView(value) {
|
|
1014
|
-
this._entityTypeView = value;
|
|
1015
|
-
}
|
|
1016
|
-
/**
|
|
1017
|
-
* Serialize message to binary data
|
|
1018
|
-
* @param instance message instance
|
|
1019
|
-
*/
|
|
1020
|
-
serializeBinary() {
|
|
1021
|
-
const writer = new BinaryWriter();
|
|
1022
|
-
GetEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1023
|
-
return writer.getResultBuffer();
|
|
1024
|
-
}
|
|
1025
|
-
/**
|
|
1026
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1027
|
-
*/
|
|
1028
|
-
toObject() {
|
|
1029
|
-
return {
|
|
1030
|
-
name: this.name,
|
|
1031
|
-
languageCode: this.languageCode,
|
|
1032
|
-
pageToken: this.pageToken,
|
|
1033
|
-
entityTypeView: this.entityTypeView
|
|
1034
|
-
};
|
|
1035
|
-
}
|
|
1036
|
-
/**
|
|
1037
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1038
|
-
*/
|
|
1039
|
-
toJSON() {
|
|
1040
|
-
return this.toObject();
|
|
1041
|
-
}
|
|
1042
|
-
/**
|
|
1043
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1044
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1045
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1046
|
-
*/
|
|
1047
|
-
toProtobufJSON(
|
|
1048
|
-
// @ts-ignore
|
|
1049
|
-
options) {
|
|
1050
|
-
return {
|
|
1051
|
-
name: this.name,
|
|
1052
|
-
languageCode: this.languageCode,
|
|
1053
|
-
pageToken: this.pageToken,
|
|
1054
|
-
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
1055
|
-
? 0
|
|
1056
|
-
: this.entityTypeView]
|
|
1057
|
-
};
|
|
1058
|
-
}
|
|
1059
|
-
}
|
|
1060
|
-
/**
|
|
1061
|
-
* Message implementation for ondewo.nlu.CreateEntityTypeRequest
|
|
1062
|
-
*/
|
|
1063
|
-
export class CreateEntityTypeRequest {
|
|
1064
|
-
static { this.id = 'ondewo.nlu.CreateEntityTypeRequest'; }
|
|
1065
|
-
/**
|
|
1066
|
-
* Deserialize binary data to message
|
|
1067
|
-
* @param instance message instance
|
|
1068
|
-
*/
|
|
1069
|
-
static deserializeBinary(bytes) {
|
|
1070
|
-
const instance = new CreateEntityTypeRequest();
|
|
1071
|
-
CreateEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1072
|
-
return instance;
|
|
1073
|
-
}
|
|
1074
|
-
/**
|
|
1075
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1076
|
-
* @param _instance message instance
|
|
1077
|
-
*/
|
|
1078
|
-
static refineValues(_instance) {
|
|
1079
|
-
_instance.parent = _instance.parent || '';
|
|
1080
|
-
_instance.entityType = _instance.entityType || undefined;
|
|
1081
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
1082
|
-
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
1083
|
-
}
|
|
1084
|
-
/**
|
|
1085
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1086
|
-
* @param _instance message instance
|
|
1087
|
-
* @param _reader binary reader instance
|
|
1088
|
-
*/
|
|
1089
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1090
|
-
while (_reader.nextField()) {
|
|
1091
|
-
if (_reader.isEndGroup())
|
|
1092
|
-
break;
|
|
1093
|
-
switch (_reader.getFieldNumber()) {
|
|
1094
|
-
case 1:
|
|
1095
|
-
_instance.parent = _reader.readString();
|
|
1096
|
-
break;
|
|
1097
|
-
case 2:
|
|
1098
|
-
_instance.entityType = new EntityType();
|
|
1099
|
-
_reader.readMessage(_instance.entityType, EntityType.deserializeBinaryFromReader);
|
|
1100
|
-
break;
|
|
1101
|
-
case 3:
|
|
1102
|
-
_instance.languageCode = _reader.readString();
|
|
1103
|
-
break;
|
|
1104
|
-
case 6:
|
|
1105
|
-
_instance.entityTypeView = _reader.readEnum();
|
|
1106
|
-
break;
|
|
1107
|
-
default:
|
|
1108
|
-
_reader.skipField();
|
|
1109
|
-
}
|
|
1110
|
-
}
|
|
1111
|
-
CreateEntityTypeRequest.refineValues(_instance);
|
|
1112
|
-
}
|
|
1113
|
-
/**
|
|
1114
|
-
* Serializes a message to binary format using provided binary reader
|
|
1115
|
-
* @param _instance message instance
|
|
1116
|
-
* @param _writer binary writer instance
|
|
1117
|
-
*/
|
|
1118
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1119
|
-
if (_instance.parent) {
|
|
1120
|
-
_writer.writeString(1, _instance.parent);
|
|
1121
|
-
}
|
|
1122
|
-
if (_instance.entityType) {
|
|
1123
|
-
_writer.writeMessage(2, _instance.entityType, EntityType.serializeBinaryToWriter);
|
|
1124
|
-
}
|
|
1125
|
-
if (_instance.languageCode) {
|
|
1126
|
-
_writer.writeString(3, _instance.languageCode);
|
|
1127
|
-
}
|
|
1128
|
-
if (_instance.entityTypeView) {
|
|
1129
|
-
_writer.writeEnum(6, _instance.entityTypeView);
|
|
1130
|
-
}
|
|
1131
|
-
}
|
|
1132
|
-
/**
|
|
1133
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1134
|
-
* @param _value initial values object or instance of CreateEntityTypeRequest to deeply clone from
|
|
1135
|
-
*/
|
|
1136
|
-
constructor(_value) {
|
|
1137
|
-
_value = _value || {};
|
|
1138
|
-
this.parent = _value.parent;
|
|
1139
|
-
this.entityType = _value.entityType
|
|
1140
|
-
? new EntityType(_value.entityType)
|
|
1141
|
-
: undefined;
|
|
1142
|
-
this.languageCode = _value.languageCode;
|
|
1143
|
-
this.entityTypeView = _value.entityTypeView;
|
|
1144
|
-
CreateEntityTypeRequest.refineValues(this);
|
|
1145
|
-
}
|
|
1146
|
-
get parent() {
|
|
1147
|
-
return this._parent;
|
|
1148
|
-
}
|
|
1149
|
-
set parent(value) {
|
|
1150
|
-
this._parent = value;
|
|
1151
|
-
}
|
|
1152
|
-
get entityType() {
|
|
1153
|
-
return this._entityType;
|
|
1154
|
-
}
|
|
1155
|
-
set entityType(value) {
|
|
1156
|
-
this._entityType = value;
|
|
1157
|
-
}
|
|
1158
|
-
get languageCode() {
|
|
1159
|
-
return this._languageCode;
|
|
1160
|
-
}
|
|
1161
|
-
set languageCode(value) {
|
|
1162
|
-
this._languageCode = value;
|
|
1163
|
-
}
|
|
1164
|
-
get entityTypeView() {
|
|
1165
|
-
return this._entityTypeView;
|
|
1166
|
-
}
|
|
1167
|
-
set entityTypeView(value) {
|
|
1168
|
-
this._entityTypeView = value;
|
|
1169
|
-
}
|
|
1170
|
-
/**
|
|
1171
|
-
* Serialize message to binary data
|
|
1172
|
-
* @param instance message instance
|
|
1173
|
-
*/
|
|
1174
|
-
serializeBinary() {
|
|
1175
|
-
const writer = new BinaryWriter();
|
|
1176
|
-
CreateEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1177
|
-
return writer.getResultBuffer();
|
|
1178
|
-
}
|
|
1179
|
-
/**
|
|
1180
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1181
|
-
*/
|
|
1182
|
-
toObject() {
|
|
1183
|
-
return {
|
|
1184
|
-
parent: this.parent,
|
|
1185
|
-
entityType: this.entityType ? this.entityType.toObject() : undefined,
|
|
1186
|
-
languageCode: this.languageCode,
|
|
1187
|
-
entityTypeView: this.entityTypeView
|
|
1188
|
-
};
|
|
1189
|
-
}
|
|
1190
|
-
/**
|
|
1191
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1192
|
-
*/
|
|
1193
|
-
toJSON() {
|
|
1194
|
-
return this.toObject();
|
|
1195
|
-
}
|
|
1196
|
-
/**
|
|
1197
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1198
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1199
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1200
|
-
*/
|
|
1201
|
-
toProtobufJSON(
|
|
1202
|
-
// @ts-ignore
|
|
1203
|
-
options) {
|
|
1204
|
-
return {
|
|
1205
|
-
parent: this.parent,
|
|
1206
|
-
entityType: this.entityType
|
|
1207
|
-
? this.entityType.toProtobufJSON(options)
|
|
1208
|
-
: null,
|
|
1209
|
-
languageCode: this.languageCode,
|
|
1210
|
-
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
1211
|
-
? 0
|
|
1212
|
-
: this.entityTypeView]
|
|
1213
|
-
};
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
/**
|
|
1217
|
-
* Message implementation for ondewo.nlu.UpdateEntityTypeRequest
|
|
1218
|
-
*/
|
|
1219
|
-
export class UpdateEntityTypeRequest {
|
|
1220
|
-
static { this.id = 'ondewo.nlu.UpdateEntityTypeRequest'; }
|
|
1221
|
-
/**
|
|
1222
|
-
* Deserialize binary data to message
|
|
1223
|
-
* @param instance message instance
|
|
1224
|
-
*/
|
|
1225
|
-
static deserializeBinary(bytes) {
|
|
1226
|
-
const instance = new UpdateEntityTypeRequest();
|
|
1227
|
-
UpdateEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1228
|
-
return instance;
|
|
1229
|
-
}
|
|
1230
|
-
/**
|
|
1231
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1232
|
-
* @param _instance message instance
|
|
1233
|
-
*/
|
|
1234
|
-
static refineValues(_instance) {
|
|
1235
|
-
_instance.entityType = _instance.entityType || undefined;
|
|
1236
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
1237
|
-
_instance.updateMask = _instance.updateMask || undefined;
|
|
1238
|
-
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
1239
|
-
}
|
|
1240
|
-
/**
|
|
1241
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1242
|
-
* @param _instance message instance
|
|
1243
|
-
* @param _reader binary reader instance
|
|
1244
|
-
*/
|
|
1245
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1246
|
-
while (_reader.nextField()) {
|
|
1247
|
-
if (_reader.isEndGroup())
|
|
1248
|
-
break;
|
|
1249
|
-
switch (_reader.getFieldNumber()) {
|
|
1250
|
-
case 1:
|
|
1251
|
-
_instance.entityType = new EntityType();
|
|
1252
|
-
_reader.readMessage(_instance.entityType, EntityType.deserializeBinaryFromReader);
|
|
1253
|
-
break;
|
|
1254
|
-
case 2:
|
|
1255
|
-
_instance.languageCode = _reader.readString();
|
|
1256
|
-
break;
|
|
1257
|
-
case 3:
|
|
1258
|
-
_instance.updateMask = new googleProtobuf002.FieldMask();
|
|
1259
|
-
_reader.readMessage(_instance.updateMask, googleProtobuf002.FieldMask.deserializeBinaryFromReader);
|
|
1260
|
-
break;
|
|
1261
|
-
case 6:
|
|
1262
|
-
_instance.entityTypeView = _reader.readEnum();
|
|
1263
|
-
break;
|
|
1264
|
-
default:
|
|
1265
|
-
_reader.skipField();
|
|
1266
|
-
}
|
|
1267
|
-
}
|
|
1268
|
-
UpdateEntityTypeRequest.refineValues(_instance);
|
|
1269
|
-
}
|
|
1270
|
-
/**
|
|
1271
|
-
* Serializes a message to binary format using provided binary reader
|
|
1272
|
-
* @param _instance message instance
|
|
1273
|
-
* @param _writer binary writer instance
|
|
1274
|
-
*/
|
|
1275
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1276
|
-
if (_instance.entityType) {
|
|
1277
|
-
_writer.writeMessage(1, _instance.entityType, EntityType.serializeBinaryToWriter);
|
|
1278
|
-
}
|
|
1279
|
-
if (_instance.languageCode) {
|
|
1280
|
-
_writer.writeString(2, _instance.languageCode);
|
|
1281
|
-
}
|
|
1282
|
-
if (_instance.updateMask) {
|
|
1283
|
-
_writer.writeMessage(3, _instance.updateMask, googleProtobuf002.FieldMask.serializeBinaryToWriter);
|
|
1284
|
-
}
|
|
1285
|
-
if (_instance.entityTypeView) {
|
|
1286
|
-
_writer.writeEnum(6, _instance.entityTypeView);
|
|
1287
|
-
}
|
|
1288
|
-
}
|
|
1289
|
-
/**
|
|
1290
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1291
|
-
* @param _value initial values object or instance of UpdateEntityTypeRequest to deeply clone from
|
|
1292
|
-
*/
|
|
1293
|
-
constructor(_value) {
|
|
1294
|
-
_value = _value || {};
|
|
1295
|
-
this.entityType = _value.entityType
|
|
1296
|
-
? new EntityType(_value.entityType)
|
|
1297
|
-
: undefined;
|
|
1298
|
-
this.languageCode = _value.languageCode;
|
|
1299
|
-
this.updateMask = _value.updateMask
|
|
1300
|
-
? new googleProtobuf002.FieldMask(_value.updateMask)
|
|
1301
|
-
: undefined;
|
|
1302
|
-
this.entityTypeView = _value.entityTypeView;
|
|
1303
|
-
UpdateEntityTypeRequest.refineValues(this);
|
|
1304
|
-
}
|
|
1305
|
-
get entityType() {
|
|
1306
|
-
return this._entityType;
|
|
1307
|
-
}
|
|
1308
|
-
set entityType(value) {
|
|
1309
|
-
this._entityType = value;
|
|
1310
|
-
}
|
|
1311
|
-
get languageCode() {
|
|
1312
|
-
return this._languageCode;
|
|
1313
|
-
}
|
|
1314
|
-
set languageCode(value) {
|
|
1315
|
-
this._languageCode = value;
|
|
1316
|
-
}
|
|
1317
|
-
get updateMask() {
|
|
1318
|
-
return this._updateMask;
|
|
1319
|
-
}
|
|
1320
|
-
set updateMask(value) {
|
|
1321
|
-
this._updateMask = value;
|
|
1322
|
-
}
|
|
1323
|
-
get entityTypeView() {
|
|
1324
|
-
return this._entityTypeView;
|
|
1325
|
-
}
|
|
1326
|
-
set entityTypeView(value) {
|
|
1327
|
-
this._entityTypeView = value;
|
|
1328
|
-
}
|
|
1329
|
-
/**
|
|
1330
|
-
* Serialize message to binary data
|
|
1331
|
-
* @param instance message instance
|
|
1332
|
-
*/
|
|
1333
|
-
serializeBinary() {
|
|
1334
|
-
const writer = new BinaryWriter();
|
|
1335
|
-
UpdateEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1336
|
-
return writer.getResultBuffer();
|
|
1337
|
-
}
|
|
1338
|
-
/**
|
|
1339
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1340
|
-
*/
|
|
1341
|
-
toObject() {
|
|
1342
|
-
return {
|
|
1343
|
-
entityType: this.entityType ? this.entityType.toObject() : undefined,
|
|
1344
|
-
languageCode: this.languageCode,
|
|
1345
|
-
updateMask: this.updateMask ? this.updateMask.toObject() : undefined,
|
|
1346
|
-
entityTypeView: this.entityTypeView
|
|
1347
|
-
};
|
|
1348
|
-
}
|
|
1349
|
-
/**
|
|
1350
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1351
|
-
*/
|
|
1352
|
-
toJSON() {
|
|
1353
|
-
return this.toObject();
|
|
1354
|
-
}
|
|
1355
|
-
/**
|
|
1356
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1357
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1358
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1359
|
-
*/
|
|
1360
|
-
toProtobufJSON(
|
|
1361
|
-
// @ts-ignore
|
|
1362
|
-
options) {
|
|
1363
|
-
return {
|
|
1364
|
-
entityType: this.entityType
|
|
1365
|
-
? this.entityType.toProtobufJSON(options)
|
|
1366
|
-
: null,
|
|
1367
|
-
languageCode: this.languageCode,
|
|
1368
|
-
updateMask: this.updateMask
|
|
1369
|
-
? this.updateMask.toProtobufJSON(options)
|
|
1370
|
-
: null,
|
|
1371
|
-
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
1372
|
-
? 0
|
|
1373
|
-
: this.entityTypeView]
|
|
1374
|
-
};
|
|
1375
|
-
}
|
|
1376
|
-
}
|
|
1377
|
-
/**
|
|
1378
|
-
* Message implementation for ondewo.nlu.DeleteEntityTypeRequest
|
|
1379
|
-
*/
|
|
1380
|
-
export class DeleteEntityTypeRequest {
|
|
1381
|
-
static { this.id = 'ondewo.nlu.DeleteEntityTypeRequest'; }
|
|
1382
|
-
/**
|
|
1383
|
-
* Deserialize binary data to message
|
|
1384
|
-
* @param instance message instance
|
|
1385
|
-
*/
|
|
1386
|
-
static deserializeBinary(bytes) {
|
|
1387
|
-
const instance = new DeleteEntityTypeRequest();
|
|
1388
|
-
DeleteEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1389
|
-
return instance;
|
|
1390
|
-
}
|
|
1391
|
-
/**
|
|
1392
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1393
|
-
* @param _instance message instance
|
|
1394
|
-
*/
|
|
1395
|
-
static refineValues(_instance) {
|
|
1396
|
-
_instance.name = _instance.name || '';
|
|
1397
|
-
}
|
|
1398
|
-
/**
|
|
1399
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1400
|
-
* @param _instance message instance
|
|
1401
|
-
* @param _reader binary reader instance
|
|
1402
|
-
*/
|
|
1403
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1404
|
-
while (_reader.nextField()) {
|
|
1405
|
-
if (_reader.isEndGroup())
|
|
1406
|
-
break;
|
|
1407
|
-
switch (_reader.getFieldNumber()) {
|
|
1408
|
-
case 1:
|
|
1409
|
-
_instance.name = _reader.readString();
|
|
1410
|
-
break;
|
|
1411
|
-
default:
|
|
1412
|
-
_reader.skipField();
|
|
1413
|
-
}
|
|
1414
|
-
}
|
|
1415
|
-
DeleteEntityTypeRequest.refineValues(_instance);
|
|
1416
|
-
}
|
|
1417
|
-
/**
|
|
1418
|
-
* Serializes a message to binary format using provided binary reader
|
|
1419
|
-
* @param _instance message instance
|
|
1420
|
-
* @param _writer binary writer instance
|
|
1421
|
-
*/
|
|
1422
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1423
|
-
if (_instance.name) {
|
|
1424
|
-
_writer.writeString(1, _instance.name);
|
|
1425
|
-
}
|
|
1426
|
-
}
|
|
1427
|
-
/**
|
|
1428
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1429
|
-
* @param _value initial values object or instance of DeleteEntityTypeRequest to deeply clone from
|
|
1430
|
-
*/
|
|
1431
|
-
constructor(_value) {
|
|
1432
|
-
_value = _value || {};
|
|
1433
|
-
this.name = _value.name;
|
|
1434
|
-
DeleteEntityTypeRequest.refineValues(this);
|
|
1435
|
-
}
|
|
1436
|
-
get name() {
|
|
1437
|
-
return this._name;
|
|
1438
|
-
}
|
|
1439
|
-
set name(value) {
|
|
1440
|
-
this._name = value;
|
|
1441
|
-
}
|
|
1442
|
-
/**
|
|
1443
|
-
* Serialize message to binary data
|
|
1444
|
-
* @param instance message instance
|
|
1445
|
-
*/
|
|
1446
|
-
serializeBinary() {
|
|
1447
|
-
const writer = new BinaryWriter();
|
|
1448
|
-
DeleteEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1449
|
-
return writer.getResultBuffer();
|
|
1450
|
-
}
|
|
1451
|
-
/**
|
|
1452
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1453
|
-
*/
|
|
1454
|
-
toObject() {
|
|
1455
|
-
return {
|
|
1456
|
-
name: this.name
|
|
1457
|
-
};
|
|
1458
|
-
}
|
|
1459
|
-
/**
|
|
1460
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1461
|
-
*/
|
|
1462
|
-
toJSON() {
|
|
1463
|
-
return this.toObject();
|
|
1464
|
-
}
|
|
1465
|
-
/**
|
|
1466
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1467
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1468
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1469
|
-
*/
|
|
1470
|
-
toProtobufJSON(
|
|
1471
|
-
// @ts-ignore
|
|
1472
|
-
options) {
|
|
1473
|
-
return {
|
|
1474
|
-
name: this.name
|
|
1475
|
-
};
|
|
1476
|
-
}
|
|
1477
|
-
}
|
|
1478
|
-
/**
|
|
1479
|
-
* Message implementation for ondewo.nlu.BatchUpdateEntityTypesRequest
|
|
1480
|
-
*/
|
|
1481
|
-
export class BatchUpdateEntityTypesRequest {
|
|
1482
|
-
static { this.id = 'ondewo.nlu.BatchUpdateEntityTypesRequest'; }
|
|
1483
|
-
/**
|
|
1484
|
-
* Deserialize binary data to message
|
|
1485
|
-
* @param instance message instance
|
|
1486
|
-
*/
|
|
1487
|
-
static deserializeBinary(bytes) {
|
|
1488
|
-
const instance = new BatchUpdateEntityTypesRequest();
|
|
1489
|
-
BatchUpdateEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1490
|
-
return instance;
|
|
1491
|
-
}
|
|
1492
|
-
/**
|
|
1493
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1494
|
-
* @param _instance message instance
|
|
1495
|
-
*/
|
|
1496
|
-
static refineValues(_instance) {
|
|
1497
|
-
_instance.parent = _instance.parent || '';
|
|
1498
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
1499
|
-
_instance.updateMask = _instance.updateMask || undefined;
|
|
1500
|
-
}
|
|
1501
|
-
/**
|
|
1502
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1503
|
-
* @param _instance message instance
|
|
1504
|
-
* @param _reader binary reader instance
|
|
1505
|
-
*/
|
|
1506
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1507
|
-
while (_reader.nextField()) {
|
|
1508
|
-
if (_reader.isEndGroup())
|
|
1509
|
-
break;
|
|
1510
|
-
switch (_reader.getFieldNumber()) {
|
|
1511
|
-
case 1:
|
|
1512
|
-
_instance.parent = _reader.readString();
|
|
1513
|
-
break;
|
|
1514
|
-
case 2:
|
|
1515
|
-
_instance.entityTypeBatchUri = _reader.readString();
|
|
1516
|
-
break;
|
|
1517
|
-
case 3:
|
|
1518
|
-
_instance.entityTypeBatchInline = new EntityTypeBatch();
|
|
1519
|
-
_reader.readMessage(_instance.entityTypeBatchInline, EntityTypeBatch.deserializeBinaryFromReader);
|
|
1520
|
-
break;
|
|
1521
|
-
case 4:
|
|
1522
|
-
_instance.languageCode = _reader.readString();
|
|
1523
|
-
break;
|
|
1524
|
-
case 5:
|
|
1525
|
-
_instance.updateMask = new googleProtobuf002.FieldMask();
|
|
1526
|
-
_reader.readMessage(_instance.updateMask, googleProtobuf002.FieldMask.deserializeBinaryFromReader);
|
|
1527
|
-
break;
|
|
1528
|
-
default:
|
|
1529
|
-
_reader.skipField();
|
|
1530
|
-
}
|
|
1531
|
-
}
|
|
1532
|
-
BatchUpdateEntityTypesRequest.refineValues(_instance);
|
|
1533
|
-
}
|
|
1534
|
-
/**
|
|
1535
|
-
* Serializes a message to binary format using provided binary reader
|
|
1536
|
-
* @param _instance message instance
|
|
1537
|
-
* @param _writer binary writer instance
|
|
1538
|
-
*/
|
|
1539
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1540
|
-
if (_instance.parent) {
|
|
1541
|
-
_writer.writeString(1, _instance.parent);
|
|
1542
|
-
}
|
|
1543
|
-
if (_instance.entityTypeBatchUri || _instance.entityTypeBatchUri === '') {
|
|
1544
|
-
_writer.writeString(2, _instance.entityTypeBatchUri);
|
|
1545
|
-
}
|
|
1546
|
-
if (_instance.entityTypeBatchInline) {
|
|
1547
|
-
_writer.writeMessage(3, _instance.entityTypeBatchInline, EntityTypeBatch.serializeBinaryToWriter);
|
|
1548
|
-
}
|
|
1549
|
-
if (_instance.languageCode) {
|
|
1550
|
-
_writer.writeString(4, _instance.languageCode);
|
|
1551
|
-
}
|
|
1552
|
-
if (_instance.updateMask) {
|
|
1553
|
-
_writer.writeMessage(5, _instance.updateMask, googleProtobuf002.FieldMask.serializeBinaryToWriter);
|
|
1554
|
-
}
|
|
1555
|
-
}
|
|
1556
|
-
/**
|
|
1557
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1558
|
-
* @param _value initial values object or instance of BatchUpdateEntityTypesRequest to deeply clone from
|
|
1559
|
-
*/
|
|
1560
|
-
constructor(_value) {
|
|
1561
|
-
this._entityTypeBatch = BatchUpdateEntityTypesRequest.EntityTypeBatchCase.none;
|
|
1562
|
-
_value = _value || {};
|
|
1563
|
-
this.parent = _value.parent;
|
|
1564
|
-
this.entityTypeBatchUri = _value.entityTypeBatchUri;
|
|
1565
|
-
this.entityTypeBatchInline = _value.entityTypeBatchInline
|
|
1566
|
-
? new EntityTypeBatch(_value.entityTypeBatchInline)
|
|
1567
|
-
: undefined;
|
|
1568
|
-
this.languageCode = _value.languageCode;
|
|
1569
|
-
this.updateMask = _value.updateMask
|
|
1570
|
-
? new googleProtobuf002.FieldMask(_value.updateMask)
|
|
1571
|
-
: undefined;
|
|
1572
|
-
BatchUpdateEntityTypesRequest.refineValues(this);
|
|
1573
|
-
}
|
|
1574
|
-
get parent() {
|
|
1575
|
-
return this._parent;
|
|
1576
|
-
}
|
|
1577
|
-
set parent(value) {
|
|
1578
|
-
this._parent = value;
|
|
1579
|
-
}
|
|
1580
|
-
get entityTypeBatchUri() {
|
|
1581
|
-
return this._entityTypeBatchUri;
|
|
1582
|
-
}
|
|
1583
|
-
set entityTypeBatchUri(value) {
|
|
1584
|
-
if (value !== undefined && value !== null) {
|
|
1585
|
-
this._entityTypeBatchInline = undefined;
|
|
1586
|
-
this._entityTypeBatch =
|
|
1587
|
-
BatchUpdateEntityTypesRequest.EntityTypeBatchCase.entityTypeBatchUri;
|
|
1588
|
-
}
|
|
1589
|
-
this._entityTypeBatchUri = value;
|
|
1590
|
-
}
|
|
1591
|
-
get entityTypeBatchInline() {
|
|
1592
|
-
return this._entityTypeBatchInline;
|
|
1593
|
-
}
|
|
1594
|
-
set entityTypeBatchInline(value) {
|
|
1595
|
-
if (value !== undefined && value !== null) {
|
|
1596
|
-
this._entityTypeBatchUri = undefined;
|
|
1597
|
-
this._entityTypeBatch =
|
|
1598
|
-
BatchUpdateEntityTypesRequest.EntityTypeBatchCase.entityTypeBatchInline;
|
|
1599
|
-
}
|
|
1600
|
-
this._entityTypeBatchInline = value;
|
|
1601
|
-
}
|
|
1602
|
-
get languageCode() {
|
|
1603
|
-
return this._languageCode;
|
|
1604
|
-
}
|
|
1605
|
-
set languageCode(value) {
|
|
1606
|
-
this._languageCode = value;
|
|
1607
|
-
}
|
|
1608
|
-
get updateMask() {
|
|
1609
|
-
return this._updateMask;
|
|
1610
|
-
}
|
|
1611
|
-
set updateMask(value) {
|
|
1612
|
-
this._updateMask = value;
|
|
1613
|
-
}
|
|
1614
|
-
get entityTypeBatch() {
|
|
1615
|
-
return this._entityTypeBatch;
|
|
1616
|
-
}
|
|
1617
|
-
/**
|
|
1618
|
-
* Serialize message to binary data
|
|
1619
|
-
* @param instance message instance
|
|
1620
|
-
*/
|
|
1621
|
-
serializeBinary() {
|
|
1622
|
-
const writer = new BinaryWriter();
|
|
1623
|
-
BatchUpdateEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
1624
|
-
return writer.getResultBuffer();
|
|
1625
|
-
}
|
|
1626
|
-
/**
|
|
1627
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1628
|
-
*/
|
|
1629
|
-
toObject() {
|
|
1630
|
-
return {
|
|
1631
|
-
parent: this.parent,
|
|
1632
|
-
entityTypeBatchUri: this.entityTypeBatchUri,
|
|
1633
|
-
entityTypeBatchInline: this.entityTypeBatchInline
|
|
1634
|
-
? this.entityTypeBatchInline.toObject()
|
|
1635
|
-
: undefined,
|
|
1636
|
-
languageCode: this.languageCode,
|
|
1637
|
-
updateMask: this.updateMask ? this.updateMask.toObject() : undefined
|
|
1638
|
-
};
|
|
1639
|
-
}
|
|
1640
|
-
/**
|
|
1641
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1642
|
-
*/
|
|
1643
|
-
toJSON() {
|
|
1644
|
-
return this.toObject();
|
|
1645
|
-
}
|
|
1646
|
-
/**
|
|
1647
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1648
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1649
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1650
|
-
*/
|
|
1651
|
-
toProtobufJSON(
|
|
1652
|
-
// @ts-ignore
|
|
1653
|
-
options) {
|
|
1654
|
-
return {
|
|
1655
|
-
parent: this.parent,
|
|
1656
|
-
entityTypeBatchUri: this.entityTypeBatchUri === null ||
|
|
1657
|
-
this.entityTypeBatchUri === undefined
|
|
1658
|
-
? null
|
|
1659
|
-
: this.entityTypeBatchUri,
|
|
1660
|
-
entityTypeBatchInline: this.entityTypeBatchInline
|
|
1661
|
-
? this.entityTypeBatchInline.toProtobufJSON(options)
|
|
1662
|
-
: null,
|
|
1663
|
-
languageCode: this.languageCode,
|
|
1664
|
-
updateMask: this.updateMask
|
|
1665
|
-
? this.updateMask.toProtobufJSON(options)
|
|
1666
|
-
: null
|
|
1667
|
-
};
|
|
1668
|
-
}
|
|
1669
|
-
}
|
|
1670
|
-
(function (BatchUpdateEntityTypesRequest) {
|
|
1671
|
-
let EntityTypeBatchCase;
|
|
1672
|
-
(function (EntityTypeBatchCase) {
|
|
1673
|
-
EntityTypeBatchCase[EntityTypeBatchCase["none"] = 0] = "none";
|
|
1674
|
-
EntityTypeBatchCase[EntityTypeBatchCase["entityTypeBatchUri"] = 1] = "entityTypeBatchUri";
|
|
1675
|
-
EntityTypeBatchCase[EntityTypeBatchCase["entityTypeBatchInline"] = 2] = "entityTypeBatchInline";
|
|
1676
|
-
})(EntityTypeBatchCase = BatchUpdateEntityTypesRequest.EntityTypeBatchCase || (BatchUpdateEntityTypesRequest.EntityTypeBatchCase = {}));
|
|
1677
|
-
})(BatchUpdateEntityTypesRequest || (BatchUpdateEntityTypesRequest = {}));
|
|
1678
|
-
/**
|
|
1679
|
-
* Message implementation for ondewo.nlu.BatchUpdateEntityTypesResponse
|
|
1680
|
-
*/
|
|
1681
|
-
export class BatchUpdateEntityTypesResponse {
|
|
1682
|
-
static { this.id = 'ondewo.nlu.BatchUpdateEntityTypesResponse'; }
|
|
1683
|
-
/**
|
|
1684
|
-
* Deserialize binary data to message
|
|
1685
|
-
* @param instance message instance
|
|
1686
|
-
*/
|
|
1687
|
-
static deserializeBinary(bytes) {
|
|
1688
|
-
const instance = new BatchUpdateEntityTypesResponse();
|
|
1689
|
-
BatchUpdateEntityTypesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1690
|
-
return instance;
|
|
1691
|
-
}
|
|
1692
|
-
/**
|
|
1693
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1694
|
-
* @param _instance message instance
|
|
1695
|
-
*/
|
|
1696
|
-
static refineValues(_instance) {
|
|
1697
|
-
_instance.entityTypes = _instance.entityTypes || [];
|
|
1698
|
-
}
|
|
1699
|
-
/**
|
|
1700
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1701
|
-
* @param _instance message instance
|
|
1702
|
-
* @param _reader binary reader instance
|
|
1703
|
-
*/
|
|
1704
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1705
|
-
while (_reader.nextField()) {
|
|
1706
|
-
if (_reader.isEndGroup())
|
|
1707
|
-
break;
|
|
1708
|
-
switch (_reader.getFieldNumber()) {
|
|
1709
|
-
case 1:
|
|
1710
|
-
const messageInitializer1 = new EntityType();
|
|
1711
|
-
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
1712
|
-
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
1713
|
-
break;
|
|
1714
|
-
default:
|
|
1715
|
-
_reader.skipField();
|
|
1716
|
-
}
|
|
1717
|
-
}
|
|
1718
|
-
BatchUpdateEntityTypesResponse.refineValues(_instance);
|
|
1719
|
-
}
|
|
1720
|
-
/**
|
|
1721
|
-
* Serializes a message to binary format using provided binary reader
|
|
1722
|
-
* @param _instance message instance
|
|
1723
|
-
* @param _writer binary writer instance
|
|
1724
|
-
*/
|
|
1725
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1726
|
-
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
1727
|
-
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
1728
|
-
}
|
|
1729
|
-
}
|
|
1730
|
-
/**
|
|
1731
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1732
|
-
* @param _value initial values object or instance of BatchUpdateEntityTypesResponse to deeply clone from
|
|
1733
|
-
*/
|
|
1734
|
-
constructor(_value) {
|
|
1735
|
-
_value = _value || {};
|
|
1736
|
-
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
1737
|
-
BatchUpdateEntityTypesResponse.refineValues(this);
|
|
1738
|
-
}
|
|
1739
|
-
get entityTypes() {
|
|
1740
|
-
return this._entityTypes;
|
|
1741
|
-
}
|
|
1742
|
-
set entityTypes(value) {
|
|
1743
|
-
this._entityTypes = value;
|
|
1744
|
-
}
|
|
1745
|
-
/**
|
|
1746
|
-
* Serialize message to binary data
|
|
1747
|
-
* @param instance message instance
|
|
1748
|
-
*/
|
|
1749
|
-
serializeBinary() {
|
|
1750
|
-
const writer = new BinaryWriter();
|
|
1751
|
-
BatchUpdateEntityTypesResponse.serializeBinaryToWriter(this, writer);
|
|
1752
|
-
return writer.getResultBuffer();
|
|
1753
|
-
}
|
|
1754
|
-
/**
|
|
1755
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1756
|
-
*/
|
|
1757
|
-
toObject() {
|
|
1758
|
-
return {
|
|
1759
|
-
entityTypes: (this.entityTypes || []).map(m => m.toObject())
|
|
1760
|
-
};
|
|
1761
|
-
}
|
|
1762
|
-
/**
|
|
1763
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1764
|
-
*/
|
|
1765
|
-
toJSON() {
|
|
1766
|
-
return this.toObject();
|
|
1767
|
-
}
|
|
1768
|
-
/**
|
|
1769
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1770
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1771
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1772
|
-
*/
|
|
1773
|
-
toProtobufJSON(
|
|
1774
|
-
// @ts-ignore
|
|
1775
|
-
options) {
|
|
1776
|
-
return {
|
|
1777
|
-
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options))
|
|
1778
|
-
};
|
|
1779
|
-
}
|
|
1780
|
-
}
|
|
1781
|
-
/**
|
|
1782
|
-
* Message implementation for ondewo.nlu.BatchDeleteEntityTypesRequest
|
|
1783
|
-
*/
|
|
1784
|
-
export class BatchDeleteEntityTypesRequest {
|
|
1785
|
-
static { this.id = 'ondewo.nlu.BatchDeleteEntityTypesRequest'; }
|
|
1786
|
-
/**
|
|
1787
|
-
* Deserialize binary data to message
|
|
1788
|
-
* @param instance message instance
|
|
1789
|
-
*/
|
|
1790
|
-
static deserializeBinary(bytes) {
|
|
1791
|
-
const instance = new BatchDeleteEntityTypesRequest();
|
|
1792
|
-
BatchDeleteEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1793
|
-
return instance;
|
|
1794
|
-
}
|
|
1795
|
-
/**
|
|
1796
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1797
|
-
* @param _instance message instance
|
|
1798
|
-
*/
|
|
1799
|
-
static refineValues(_instance) {
|
|
1800
|
-
_instance.parent = _instance.parent || '';
|
|
1801
|
-
_instance.entityTypeNames = _instance.entityTypeNames || [];
|
|
1802
|
-
}
|
|
1803
|
-
/**
|
|
1804
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1805
|
-
* @param _instance message instance
|
|
1806
|
-
* @param _reader binary reader instance
|
|
1807
|
-
*/
|
|
1808
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1809
|
-
while (_reader.nextField()) {
|
|
1810
|
-
if (_reader.isEndGroup())
|
|
1811
|
-
break;
|
|
1812
|
-
switch (_reader.getFieldNumber()) {
|
|
1813
|
-
case 1:
|
|
1814
|
-
_instance.parent = _reader.readString();
|
|
1815
|
-
break;
|
|
1816
|
-
case 2:
|
|
1817
|
-
(_instance.entityTypeNames = _instance.entityTypeNames || []).push(_reader.readString());
|
|
1818
|
-
break;
|
|
1819
|
-
default:
|
|
1820
|
-
_reader.skipField();
|
|
1821
|
-
}
|
|
1822
|
-
}
|
|
1823
|
-
BatchDeleteEntityTypesRequest.refineValues(_instance);
|
|
1824
|
-
}
|
|
1825
|
-
/**
|
|
1826
|
-
* Serializes a message to binary format using provided binary reader
|
|
1827
|
-
* @param _instance message instance
|
|
1828
|
-
* @param _writer binary writer instance
|
|
1829
|
-
*/
|
|
1830
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1831
|
-
if (_instance.parent) {
|
|
1832
|
-
_writer.writeString(1, _instance.parent);
|
|
1833
|
-
}
|
|
1834
|
-
if (_instance.entityTypeNames && _instance.entityTypeNames.length) {
|
|
1835
|
-
_writer.writeRepeatedString(2, _instance.entityTypeNames);
|
|
1836
|
-
}
|
|
1837
|
-
}
|
|
1838
|
-
/**
|
|
1839
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1840
|
-
* @param _value initial values object or instance of BatchDeleteEntityTypesRequest to deeply clone from
|
|
1841
|
-
*/
|
|
1842
|
-
constructor(_value) {
|
|
1843
|
-
_value = _value || {};
|
|
1844
|
-
this.parent = _value.parent;
|
|
1845
|
-
this.entityTypeNames = (_value.entityTypeNames || []).slice();
|
|
1846
|
-
BatchDeleteEntityTypesRequest.refineValues(this);
|
|
1847
|
-
}
|
|
1848
|
-
get parent() {
|
|
1849
|
-
return this._parent;
|
|
1850
|
-
}
|
|
1851
|
-
set parent(value) {
|
|
1852
|
-
this._parent = value;
|
|
1853
|
-
}
|
|
1854
|
-
get entityTypeNames() {
|
|
1855
|
-
return this._entityTypeNames;
|
|
1856
|
-
}
|
|
1857
|
-
set entityTypeNames(value) {
|
|
1858
|
-
this._entityTypeNames = value;
|
|
1859
|
-
}
|
|
1860
|
-
/**
|
|
1861
|
-
* Serialize message to binary data
|
|
1862
|
-
* @param instance message instance
|
|
1863
|
-
*/
|
|
1864
|
-
serializeBinary() {
|
|
1865
|
-
const writer = new BinaryWriter();
|
|
1866
|
-
BatchDeleteEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
1867
|
-
return writer.getResultBuffer();
|
|
1868
|
-
}
|
|
1869
|
-
/**
|
|
1870
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1871
|
-
*/
|
|
1872
|
-
toObject() {
|
|
1873
|
-
return {
|
|
1874
|
-
parent: this.parent,
|
|
1875
|
-
entityTypeNames: (this.entityTypeNames || []).slice()
|
|
1876
|
-
};
|
|
1877
|
-
}
|
|
1878
|
-
/**
|
|
1879
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1880
|
-
*/
|
|
1881
|
-
toJSON() {
|
|
1882
|
-
return this.toObject();
|
|
1883
|
-
}
|
|
1884
|
-
/**
|
|
1885
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1886
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1887
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1888
|
-
*/
|
|
1889
|
-
toProtobufJSON(
|
|
1890
|
-
// @ts-ignore
|
|
1891
|
-
options) {
|
|
1892
|
-
return {
|
|
1893
|
-
parent: this.parent,
|
|
1894
|
-
entityTypeNames: (this.entityTypeNames || []).slice()
|
|
1895
|
-
};
|
|
1896
|
-
}
|
|
1897
|
-
}
|
|
1898
|
-
/**
|
|
1899
|
-
* Message implementation for ondewo.nlu.EntityTypeBatch
|
|
1900
|
-
*/
|
|
1901
|
-
export class EntityTypeBatch {
|
|
1902
|
-
static { this.id = 'ondewo.nlu.EntityTypeBatch'; }
|
|
1903
|
-
/**
|
|
1904
|
-
* Deserialize binary data to message
|
|
1905
|
-
* @param instance message instance
|
|
1906
|
-
*/
|
|
1907
|
-
static deserializeBinary(bytes) {
|
|
1908
|
-
const instance = new EntityTypeBatch();
|
|
1909
|
-
EntityTypeBatch.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1910
|
-
return instance;
|
|
1911
|
-
}
|
|
1912
|
-
/**
|
|
1913
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1914
|
-
* @param _instance message instance
|
|
1915
|
-
*/
|
|
1916
|
-
static refineValues(_instance) {
|
|
1917
|
-
_instance.entityTypes = _instance.entityTypes || [];
|
|
1918
|
-
}
|
|
1919
|
-
/**
|
|
1920
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1921
|
-
* @param _instance message instance
|
|
1922
|
-
* @param _reader binary reader instance
|
|
1923
|
-
*/
|
|
1924
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1925
|
-
while (_reader.nextField()) {
|
|
1926
|
-
if (_reader.isEndGroup())
|
|
1927
|
-
break;
|
|
1928
|
-
switch (_reader.getFieldNumber()) {
|
|
1929
|
-
case 1:
|
|
1930
|
-
const messageInitializer1 = new EntityType();
|
|
1931
|
-
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
1932
|
-
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
1933
|
-
break;
|
|
1934
|
-
default:
|
|
1935
|
-
_reader.skipField();
|
|
1936
|
-
}
|
|
1937
|
-
}
|
|
1938
|
-
EntityTypeBatch.refineValues(_instance);
|
|
1939
|
-
}
|
|
1940
|
-
/**
|
|
1941
|
-
* Serializes a message to binary format using provided binary reader
|
|
1942
|
-
* @param _instance message instance
|
|
1943
|
-
* @param _writer binary writer instance
|
|
1944
|
-
*/
|
|
1945
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1946
|
-
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
1947
|
-
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
1948
|
-
}
|
|
1949
|
-
}
|
|
1950
|
-
/**
|
|
1951
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1952
|
-
* @param _value initial values object or instance of EntityTypeBatch to deeply clone from
|
|
1953
|
-
*/
|
|
1954
|
-
constructor(_value) {
|
|
1955
|
-
_value = _value || {};
|
|
1956
|
-
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
1957
|
-
EntityTypeBatch.refineValues(this);
|
|
1958
|
-
}
|
|
1959
|
-
get entityTypes() {
|
|
1960
|
-
return this._entityTypes;
|
|
1961
|
-
}
|
|
1962
|
-
set entityTypes(value) {
|
|
1963
|
-
this._entityTypes = value;
|
|
1964
|
-
}
|
|
1965
|
-
/**
|
|
1966
|
-
* Serialize message to binary data
|
|
1967
|
-
* @param instance message instance
|
|
1968
|
-
*/
|
|
1969
|
-
serializeBinary() {
|
|
1970
|
-
const writer = new BinaryWriter();
|
|
1971
|
-
EntityTypeBatch.serializeBinaryToWriter(this, writer);
|
|
1972
|
-
return writer.getResultBuffer();
|
|
1973
|
-
}
|
|
1974
|
-
/**
|
|
1975
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1976
|
-
*/
|
|
1977
|
-
toObject() {
|
|
1978
|
-
return {
|
|
1979
|
-
entityTypes: (this.entityTypes || []).map(m => m.toObject())
|
|
1980
|
-
};
|
|
1981
|
-
}
|
|
1982
|
-
/**
|
|
1983
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1984
|
-
*/
|
|
1985
|
-
toJSON() {
|
|
1986
|
-
return this.toObject();
|
|
1987
|
-
}
|
|
1988
|
-
/**
|
|
1989
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1990
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1991
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1992
|
-
*/
|
|
1993
|
-
toProtobufJSON(
|
|
1994
|
-
// @ts-ignore
|
|
1995
|
-
options) {
|
|
1996
|
-
return {
|
|
1997
|
-
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options))
|
|
1998
|
-
};
|
|
1999
|
-
}
|
|
2000
|
-
}
|
|
2001
|
-
/**
|
|
2002
|
-
* Message implementation for ondewo.nlu.EntityTypeSorting
|
|
2003
|
-
*/
|
|
2004
|
-
export class EntityTypeSorting {
|
|
2005
|
-
static { this.id = 'ondewo.nlu.EntityTypeSorting'; }
|
|
2006
|
-
/**
|
|
2007
|
-
* Deserialize binary data to message
|
|
2008
|
-
* @param instance message instance
|
|
2009
|
-
*/
|
|
2010
|
-
static deserializeBinary(bytes) {
|
|
2011
|
-
const instance = new EntityTypeSorting();
|
|
2012
|
-
EntityTypeSorting.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2013
|
-
return instance;
|
|
2014
|
-
}
|
|
2015
|
-
/**
|
|
2016
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2017
|
-
* @param _instance message instance
|
|
2018
|
-
*/
|
|
2019
|
-
static refineValues(_instance) {
|
|
2020
|
-
_instance.sortingField = _instance.sortingField || 0;
|
|
2021
|
-
_instance.sortingMode = _instance.sortingMode || 0;
|
|
2022
|
-
}
|
|
2023
|
-
/**
|
|
2024
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2025
|
-
* @param _instance message instance
|
|
2026
|
-
* @param _reader binary reader instance
|
|
2027
|
-
*/
|
|
2028
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2029
|
-
while (_reader.nextField()) {
|
|
2030
|
-
if (_reader.isEndGroup())
|
|
2031
|
-
break;
|
|
2032
|
-
switch (_reader.getFieldNumber()) {
|
|
2033
|
-
case 1:
|
|
2034
|
-
_instance.sortingField = _reader.readEnum();
|
|
2035
|
-
break;
|
|
2036
|
-
case 2:
|
|
2037
|
-
_instance.sortingMode = _reader.readEnum();
|
|
2038
|
-
break;
|
|
2039
|
-
default:
|
|
2040
|
-
_reader.skipField();
|
|
2041
|
-
}
|
|
2042
|
-
}
|
|
2043
|
-
EntityTypeSorting.refineValues(_instance);
|
|
2044
|
-
}
|
|
2045
|
-
/**
|
|
2046
|
-
* Serializes a message to binary format using provided binary reader
|
|
2047
|
-
* @param _instance message instance
|
|
2048
|
-
* @param _writer binary writer instance
|
|
2049
|
-
*/
|
|
2050
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2051
|
-
if (_instance.sortingField) {
|
|
2052
|
-
_writer.writeEnum(1, _instance.sortingField);
|
|
2053
|
-
}
|
|
2054
|
-
if (_instance.sortingMode) {
|
|
2055
|
-
_writer.writeEnum(2, _instance.sortingMode);
|
|
2056
|
-
}
|
|
2057
|
-
}
|
|
2058
|
-
/**
|
|
2059
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2060
|
-
* @param _value initial values object or instance of EntityTypeSorting to deeply clone from
|
|
2061
|
-
*/
|
|
2062
|
-
constructor(_value) {
|
|
2063
|
-
_value = _value || {};
|
|
2064
|
-
this.sortingField = _value.sortingField;
|
|
2065
|
-
this.sortingMode = _value.sortingMode;
|
|
2066
|
-
EntityTypeSorting.refineValues(this);
|
|
2067
|
-
}
|
|
2068
|
-
get sortingField() {
|
|
2069
|
-
return this._sortingField;
|
|
2070
|
-
}
|
|
2071
|
-
set sortingField(value) {
|
|
2072
|
-
this._sortingField = value;
|
|
2073
|
-
}
|
|
2074
|
-
get sortingMode() {
|
|
2075
|
-
return this._sortingMode;
|
|
2076
|
-
}
|
|
2077
|
-
set sortingMode(value) {
|
|
2078
|
-
this._sortingMode = value;
|
|
2079
|
-
}
|
|
2080
|
-
/**
|
|
2081
|
-
* Serialize message to binary data
|
|
2082
|
-
* @param instance message instance
|
|
2083
|
-
*/
|
|
2084
|
-
serializeBinary() {
|
|
2085
|
-
const writer = new BinaryWriter();
|
|
2086
|
-
EntityTypeSorting.serializeBinaryToWriter(this, writer);
|
|
2087
|
-
return writer.getResultBuffer();
|
|
2088
|
-
}
|
|
2089
|
-
/**
|
|
2090
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2091
|
-
*/
|
|
2092
|
-
toObject() {
|
|
2093
|
-
return {
|
|
2094
|
-
sortingField: this.sortingField,
|
|
2095
|
-
sortingMode: this.sortingMode
|
|
2096
|
-
};
|
|
2097
|
-
}
|
|
2098
|
-
/**
|
|
2099
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2100
|
-
*/
|
|
2101
|
-
toJSON() {
|
|
2102
|
-
return this.toObject();
|
|
2103
|
-
}
|
|
2104
|
-
/**
|
|
2105
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2106
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2107
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2108
|
-
*/
|
|
2109
|
-
toProtobufJSON(
|
|
2110
|
-
// @ts-ignore
|
|
2111
|
-
options) {
|
|
2112
|
-
return {
|
|
2113
|
-
sortingField: EntityTypeSorting.EntityTypeSortingField[this.sortingField === null || this.sortingField === undefined
|
|
2114
|
-
? 0
|
|
2115
|
-
: this.sortingField],
|
|
2116
|
-
sortingMode: ondewoNlu009.SortingMode[this.sortingMode === null || this.sortingMode === undefined
|
|
2117
|
-
? 0
|
|
2118
|
-
: this.sortingMode]
|
|
2119
|
-
};
|
|
2120
|
-
}
|
|
2121
|
-
}
|
|
2122
|
-
(function (EntityTypeSorting) {
|
|
2123
|
-
let EntityTypeSortingField;
|
|
2124
|
-
(function (EntityTypeSortingField) {
|
|
2125
|
-
EntityTypeSortingField[EntityTypeSortingField["NO_ENTITY_TYPE_SORTING"] = 0] = "NO_ENTITY_TYPE_SORTING";
|
|
2126
|
-
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_NAME"] = 1] = "SORT_ENTITY_TYPE_BY_NAME";
|
|
2127
|
-
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_CREATION_DATE"] = 2] = "SORT_ENTITY_TYPE_BY_CREATION_DATE";
|
|
2128
|
-
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_LAST_UPDATED"] = 3] = "SORT_ENTITY_TYPE_BY_LAST_UPDATED";
|
|
2129
|
-
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_ENTITY_VALUE_COUNT"] = 4] = "SORT_ENTITY_TYPE_BY_ENTITY_VALUE_COUNT";
|
|
2130
|
-
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_SYNONYM_COUNT"] = 5] = "SORT_ENTITY_TYPE_BY_SYNONYM_COUNT";
|
|
2131
|
-
})(EntityTypeSortingField = EntityTypeSorting.EntityTypeSortingField || (EntityTypeSorting.EntityTypeSortingField = {}));
|
|
2132
|
-
})(EntityTypeSorting || (EntityTypeSorting = {}));
|
|
2133
|
-
/**
|
|
2134
|
-
* Message implementation for ondewo.nlu.EntityStatus
|
|
2135
|
-
*/
|
|
2136
|
-
export class EntityStatus {
|
|
2137
|
-
static { this.id = 'ondewo.nlu.EntityStatus'; }
|
|
2138
|
-
/**
|
|
2139
|
-
* Deserialize binary data to message
|
|
2140
|
-
* @param instance message instance
|
|
2141
|
-
*/
|
|
2142
|
-
static deserializeBinary(bytes) {
|
|
2143
|
-
const instance = new EntityStatus();
|
|
2144
|
-
EntityStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2145
|
-
return instance;
|
|
2146
|
-
}
|
|
2147
|
-
/**
|
|
2148
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2149
|
-
* @param _instance message instance
|
|
2150
|
-
*/
|
|
2151
|
-
static refineValues(_instance) { }
|
|
2152
|
-
/**
|
|
2153
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2154
|
-
* @param _instance message instance
|
|
2155
|
-
* @param _reader binary reader instance
|
|
2156
|
-
*/
|
|
2157
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2158
|
-
while (_reader.nextField()) {
|
|
2159
|
-
if (_reader.isEndGroup())
|
|
2160
|
-
break;
|
|
2161
|
-
switch (_reader.getFieldNumber()) {
|
|
2162
|
-
case 1:
|
|
2163
|
-
_instance.entity = new EntityType.Entity();
|
|
2164
|
-
_reader.readMessage(_instance.entity, EntityType.Entity.deserializeBinaryFromReader);
|
|
2165
|
-
break;
|
|
2166
|
-
case 2:
|
|
2167
|
-
_instance.errorMessage = _reader.readString();
|
|
2168
|
-
break;
|
|
2169
|
-
default:
|
|
2170
|
-
_reader.skipField();
|
|
2171
|
-
}
|
|
2172
|
-
}
|
|
2173
|
-
EntityStatus.refineValues(_instance);
|
|
2174
|
-
}
|
|
2175
|
-
/**
|
|
2176
|
-
* Serializes a message to binary format using provided binary reader
|
|
2177
|
-
* @param _instance message instance
|
|
2178
|
-
* @param _writer binary writer instance
|
|
2179
|
-
*/
|
|
2180
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2181
|
-
if (_instance.entity) {
|
|
2182
|
-
_writer.writeMessage(1, _instance.entity, EntityType.Entity.serializeBinaryToWriter);
|
|
2183
|
-
}
|
|
2184
|
-
if (_instance.errorMessage || _instance.errorMessage === '') {
|
|
2185
|
-
_writer.writeString(2, _instance.errorMessage);
|
|
2186
|
-
}
|
|
2187
|
-
}
|
|
2188
|
-
/**
|
|
2189
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2190
|
-
* @param _value initial values object or instance of EntityStatus to deeply clone from
|
|
2191
|
-
*/
|
|
2192
|
-
constructor(_value) {
|
|
2193
|
-
this._entityOrStatus = EntityStatus.EntityOrStatusCase.none;
|
|
2194
|
-
_value = _value || {};
|
|
2195
|
-
this.entity = _value.entity
|
|
2196
|
-
? new EntityType.Entity(_value.entity)
|
|
2197
|
-
: undefined;
|
|
2198
|
-
this.errorMessage = _value.errorMessage;
|
|
2199
|
-
EntityStatus.refineValues(this);
|
|
2200
|
-
}
|
|
2201
|
-
get entity() {
|
|
2202
|
-
return this._entity;
|
|
2203
|
-
}
|
|
2204
|
-
set entity(value) {
|
|
2205
|
-
if (value !== undefined && value !== null) {
|
|
2206
|
-
this._errorMessage = undefined;
|
|
2207
|
-
this._entityOrStatus = EntityStatus.EntityOrStatusCase.entity;
|
|
2208
|
-
}
|
|
2209
|
-
this._entity = value;
|
|
2210
|
-
}
|
|
2211
|
-
get errorMessage() {
|
|
2212
|
-
return this._errorMessage;
|
|
2213
|
-
}
|
|
2214
|
-
set errorMessage(value) {
|
|
2215
|
-
if (value !== undefined && value !== null) {
|
|
2216
|
-
this._entity = undefined;
|
|
2217
|
-
this._entityOrStatus = EntityStatus.EntityOrStatusCase.errorMessage;
|
|
2218
|
-
}
|
|
2219
|
-
this._errorMessage = value;
|
|
2220
|
-
}
|
|
2221
|
-
get entityOrStatus() {
|
|
2222
|
-
return this._entityOrStatus;
|
|
2223
|
-
}
|
|
2224
|
-
/**
|
|
2225
|
-
* Serialize message to binary data
|
|
2226
|
-
* @param instance message instance
|
|
2227
|
-
*/
|
|
2228
|
-
serializeBinary() {
|
|
2229
|
-
const writer = new BinaryWriter();
|
|
2230
|
-
EntityStatus.serializeBinaryToWriter(this, writer);
|
|
2231
|
-
return writer.getResultBuffer();
|
|
2232
|
-
}
|
|
2233
|
-
/**
|
|
2234
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2235
|
-
*/
|
|
2236
|
-
toObject() {
|
|
2237
|
-
return {
|
|
2238
|
-
entity: this.entity ? this.entity.toObject() : undefined,
|
|
2239
|
-
errorMessage: this.errorMessage
|
|
2240
|
-
};
|
|
2241
|
-
}
|
|
2242
|
-
/**
|
|
2243
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2244
|
-
*/
|
|
2245
|
-
toJSON() {
|
|
2246
|
-
return this.toObject();
|
|
2247
|
-
}
|
|
2248
|
-
/**
|
|
2249
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2250
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2251
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2252
|
-
*/
|
|
2253
|
-
toProtobufJSON(
|
|
2254
|
-
// @ts-ignore
|
|
2255
|
-
options) {
|
|
2256
|
-
return {
|
|
2257
|
-
entity: this.entity ? this.entity.toProtobufJSON(options) : null,
|
|
2258
|
-
errorMessage: this.errorMessage === null || this.errorMessage === undefined
|
|
2259
|
-
? null
|
|
2260
|
-
: this.errorMessage
|
|
2261
|
-
};
|
|
2262
|
-
}
|
|
2263
|
-
}
|
|
2264
|
-
(function (EntityStatus) {
|
|
2265
|
-
let EntityOrStatusCase;
|
|
2266
|
-
(function (EntityOrStatusCase) {
|
|
2267
|
-
EntityOrStatusCase[EntityOrStatusCase["none"] = 0] = "none";
|
|
2268
|
-
EntityOrStatusCase[EntityOrStatusCase["entity"] = 1] = "entity";
|
|
2269
|
-
EntityOrStatusCase[EntityOrStatusCase["errorMessage"] = 2] = "errorMessage";
|
|
2270
|
-
})(EntityOrStatusCase = EntityStatus.EntityOrStatusCase || (EntityStatus.EntityOrStatusCase = {}));
|
|
2271
|
-
})(EntityStatus || (EntityStatus = {}));
|
|
2272
|
-
/**
|
|
2273
|
-
* Message implementation for ondewo.nlu.BatchEntitiesResponse
|
|
2274
|
-
*/
|
|
2275
|
-
export class BatchEntitiesResponse {
|
|
2276
|
-
static { this.id = 'ondewo.nlu.BatchEntitiesResponse'; }
|
|
2277
|
-
/**
|
|
2278
|
-
* Deserialize binary data to message
|
|
2279
|
-
* @param instance message instance
|
|
2280
|
-
*/
|
|
2281
|
-
static deserializeBinary(bytes) {
|
|
2282
|
-
const instance = new BatchEntitiesResponse();
|
|
2283
|
-
BatchEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2284
|
-
return instance;
|
|
2285
|
-
}
|
|
2286
|
-
/**
|
|
2287
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2288
|
-
* @param _instance message instance
|
|
2289
|
-
*/
|
|
2290
|
-
static refineValues(_instance) {
|
|
2291
|
-
_instance.entityStatuses = _instance.entityStatuses || [];
|
|
2292
|
-
_instance.hasErrors = _instance.hasErrors || false;
|
|
2293
|
-
}
|
|
2294
|
-
/**
|
|
2295
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2296
|
-
* @param _instance message instance
|
|
2297
|
-
* @param _reader binary reader instance
|
|
2298
|
-
*/
|
|
2299
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2300
|
-
while (_reader.nextField()) {
|
|
2301
|
-
if (_reader.isEndGroup())
|
|
2302
|
-
break;
|
|
2303
|
-
switch (_reader.getFieldNumber()) {
|
|
2304
|
-
case 1:
|
|
2305
|
-
const messageInitializer1 = new EntityStatus();
|
|
2306
|
-
_reader.readMessage(messageInitializer1, EntityStatus.deserializeBinaryFromReader);
|
|
2307
|
-
(_instance.entityStatuses = _instance.entityStatuses || []).push(messageInitializer1);
|
|
2308
|
-
break;
|
|
2309
|
-
case 2:
|
|
2310
|
-
_instance.hasErrors = _reader.readBool();
|
|
2311
|
-
break;
|
|
2312
|
-
default:
|
|
2313
|
-
_reader.skipField();
|
|
2314
|
-
}
|
|
2315
|
-
}
|
|
2316
|
-
BatchEntitiesResponse.refineValues(_instance);
|
|
2317
|
-
}
|
|
2318
|
-
/**
|
|
2319
|
-
* Serializes a message to binary format using provided binary reader
|
|
2320
|
-
* @param _instance message instance
|
|
2321
|
-
* @param _writer binary writer instance
|
|
2322
|
-
*/
|
|
2323
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2324
|
-
if (_instance.entityStatuses && _instance.entityStatuses.length) {
|
|
2325
|
-
_writer.writeRepeatedMessage(1, _instance.entityStatuses, EntityStatus.serializeBinaryToWriter);
|
|
2326
|
-
}
|
|
2327
|
-
if (_instance.hasErrors) {
|
|
2328
|
-
_writer.writeBool(2, _instance.hasErrors);
|
|
2329
|
-
}
|
|
2330
|
-
}
|
|
2331
|
-
/**
|
|
2332
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2333
|
-
* @param _value initial values object or instance of BatchEntitiesResponse to deeply clone from
|
|
2334
|
-
*/
|
|
2335
|
-
constructor(_value) {
|
|
2336
|
-
_value = _value || {};
|
|
2337
|
-
this.entityStatuses = (_value.entityStatuses || []).map(m => new EntityStatus(m));
|
|
2338
|
-
this.hasErrors = _value.hasErrors;
|
|
2339
|
-
BatchEntitiesResponse.refineValues(this);
|
|
2340
|
-
}
|
|
2341
|
-
get entityStatuses() {
|
|
2342
|
-
return this._entityStatuses;
|
|
2343
|
-
}
|
|
2344
|
-
set entityStatuses(value) {
|
|
2345
|
-
this._entityStatuses = value;
|
|
2346
|
-
}
|
|
2347
|
-
get hasErrors() {
|
|
2348
|
-
return this._hasErrors;
|
|
2349
|
-
}
|
|
2350
|
-
set hasErrors(value) {
|
|
2351
|
-
this._hasErrors = value;
|
|
2352
|
-
}
|
|
2353
|
-
/**
|
|
2354
|
-
* Serialize message to binary data
|
|
2355
|
-
* @param instance message instance
|
|
2356
|
-
*/
|
|
2357
|
-
serializeBinary() {
|
|
2358
|
-
const writer = new BinaryWriter();
|
|
2359
|
-
BatchEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
2360
|
-
return writer.getResultBuffer();
|
|
2361
|
-
}
|
|
2362
|
-
/**
|
|
2363
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2364
|
-
*/
|
|
2365
|
-
toObject() {
|
|
2366
|
-
return {
|
|
2367
|
-
entityStatuses: (this.entityStatuses || []).map(m => m.toObject()),
|
|
2368
|
-
hasErrors: this.hasErrors
|
|
2369
|
-
};
|
|
2370
|
-
}
|
|
2371
|
-
/**
|
|
2372
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2373
|
-
*/
|
|
2374
|
-
toJSON() {
|
|
2375
|
-
return this.toObject();
|
|
2376
|
-
}
|
|
2377
|
-
/**
|
|
2378
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2379
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2380
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2381
|
-
*/
|
|
2382
|
-
toProtobufJSON(
|
|
2383
|
-
// @ts-ignore
|
|
2384
|
-
options) {
|
|
2385
|
-
return {
|
|
2386
|
-
entityStatuses: (this.entityStatuses || []).map(m => m.toProtobufJSON(options)),
|
|
2387
|
-
hasErrors: this.hasErrors
|
|
2388
|
-
};
|
|
2389
|
-
}
|
|
2390
|
-
}
|
|
2391
|
-
/**
|
|
2392
|
-
* Message implementation for ondewo.nlu.CreateEntityRequest
|
|
2393
|
-
*/
|
|
2394
|
-
export class CreateEntityRequest {
|
|
2395
|
-
static { this.id = 'ondewo.nlu.CreateEntityRequest'; }
|
|
2396
|
-
/**
|
|
2397
|
-
* Deserialize binary data to message
|
|
2398
|
-
* @param instance message instance
|
|
2399
|
-
*/
|
|
2400
|
-
static deserializeBinary(bytes) {
|
|
2401
|
-
const instance = new CreateEntityRequest();
|
|
2402
|
-
CreateEntityRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2403
|
-
return instance;
|
|
2404
|
-
}
|
|
2405
|
-
/**
|
|
2406
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2407
|
-
* @param _instance message instance
|
|
2408
|
-
*/
|
|
2409
|
-
static refineValues(_instance) {
|
|
2410
|
-
_instance.entityTypeName = _instance.entityTypeName || '';
|
|
2411
|
-
_instance.entity = _instance.entity || undefined;
|
|
2412
|
-
}
|
|
2413
|
-
/**
|
|
2414
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2415
|
-
* @param _instance message instance
|
|
2416
|
-
* @param _reader binary reader instance
|
|
2417
|
-
*/
|
|
2418
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2419
|
-
while (_reader.nextField()) {
|
|
2420
|
-
if (_reader.isEndGroup())
|
|
2421
|
-
break;
|
|
2422
|
-
switch (_reader.getFieldNumber()) {
|
|
2423
|
-
case 1:
|
|
2424
|
-
_instance.entityTypeName = _reader.readString();
|
|
2425
|
-
break;
|
|
2426
|
-
case 2:
|
|
2427
|
-
_instance.entity = new EntityType.Entity();
|
|
2428
|
-
_reader.readMessage(_instance.entity, EntityType.Entity.deserializeBinaryFromReader);
|
|
2429
|
-
break;
|
|
2430
|
-
default:
|
|
2431
|
-
_reader.skipField();
|
|
2432
|
-
}
|
|
2433
|
-
}
|
|
2434
|
-
CreateEntityRequest.refineValues(_instance);
|
|
2435
|
-
}
|
|
2436
|
-
/**
|
|
2437
|
-
* Serializes a message to binary format using provided binary reader
|
|
2438
|
-
* @param _instance message instance
|
|
2439
|
-
* @param _writer binary writer instance
|
|
2440
|
-
*/
|
|
2441
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2442
|
-
if (_instance.entityTypeName) {
|
|
2443
|
-
_writer.writeString(1, _instance.entityTypeName);
|
|
2444
|
-
}
|
|
2445
|
-
if (_instance.entity) {
|
|
2446
|
-
_writer.writeMessage(2, _instance.entity, EntityType.Entity.serializeBinaryToWriter);
|
|
2447
|
-
}
|
|
2448
|
-
}
|
|
2449
|
-
/**
|
|
2450
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2451
|
-
* @param _value initial values object or instance of CreateEntityRequest to deeply clone from
|
|
2452
|
-
*/
|
|
2453
|
-
constructor(_value) {
|
|
2454
|
-
_value = _value || {};
|
|
2455
|
-
this.entityTypeName = _value.entityTypeName;
|
|
2456
|
-
this.entity = _value.entity
|
|
2457
|
-
? new EntityType.Entity(_value.entity)
|
|
2458
|
-
: undefined;
|
|
2459
|
-
CreateEntityRequest.refineValues(this);
|
|
2460
|
-
}
|
|
2461
|
-
get entityTypeName() {
|
|
2462
|
-
return this._entityTypeName;
|
|
2463
|
-
}
|
|
2464
|
-
set entityTypeName(value) {
|
|
2465
|
-
this._entityTypeName = value;
|
|
2466
|
-
}
|
|
2467
|
-
get entity() {
|
|
2468
|
-
return this._entity;
|
|
2469
|
-
}
|
|
2470
|
-
set entity(value) {
|
|
2471
|
-
this._entity = value;
|
|
2472
|
-
}
|
|
2473
|
-
/**
|
|
2474
|
-
* Serialize message to binary data
|
|
2475
|
-
* @param instance message instance
|
|
2476
|
-
*/
|
|
2477
|
-
serializeBinary() {
|
|
2478
|
-
const writer = new BinaryWriter();
|
|
2479
|
-
CreateEntityRequest.serializeBinaryToWriter(this, writer);
|
|
2480
|
-
return writer.getResultBuffer();
|
|
2481
|
-
}
|
|
2482
|
-
/**
|
|
2483
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2484
|
-
*/
|
|
2485
|
-
toObject() {
|
|
2486
|
-
return {
|
|
2487
|
-
entityTypeName: this.entityTypeName,
|
|
2488
|
-
entity: this.entity ? this.entity.toObject() : undefined
|
|
2489
|
-
};
|
|
2490
|
-
}
|
|
2491
|
-
/**
|
|
2492
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2493
|
-
*/
|
|
2494
|
-
toJSON() {
|
|
2495
|
-
return this.toObject();
|
|
2496
|
-
}
|
|
2497
|
-
/**
|
|
2498
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2499
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2500
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2501
|
-
*/
|
|
2502
|
-
toProtobufJSON(
|
|
2503
|
-
// @ts-ignore
|
|
2504
|
-
options) {
|
|
2505
|
-
return {
|
|
2506
|
-
entityTypeName: this.entityTypeName,
|
|
2507
|
-
entity: this.entity ? this.entity.toProtobufJSON(options) : null
|
|
2508
|
-
};
|
|
2509
|
-
}
|
|
2510
|
-
}
|
|
2511
|
-
/**
|
|
2512
|
-
* Message implementation for ondewo.nlu.BatchCreateEntitiesRequest
|
|
2513
|
-
*/
|
|
2514
|
-
export class BatchCreateEntitiesRequest {
|
|
2515
|
-
static { this.id = 'ondewo.nlu.BatchCreateEntitiesRequest'; }
|
|
2516
|
-
/**
|
|
2517
|
-
* Deserialize binary data to message
|
|
2518
|
-
* @param instance message instance
|
|
2519
|
-
*/
|
|
2520
|
-
static deserializeBinary(bytes) {
|
|
2521
|
-
const instance = new BatchCreateEntitiesRequest();
|
|
2522
|
-
BatchCreateEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2523
|
-
return instance;
|
|
2524
|
-
}
|
|
2525
|
-
/**
|
|
2526
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2527
|
-
* @param _instance message instance
|
|
2528
|
-
*/
|
|
2529
|
-
static refineValues(_instance) {
|
|
2530
|
-
_instance.createEntityRequests = _instance.createEntityRequests || [];
|
|
2531
|
-
}
|
|
2532
|
-
/**
|
|
2533
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2534
|
-
* @param _instance message instance
|
|
2535
|
-
* @param _reader binary reader instance
|
|
2536
|
-
*/
|
|
2537
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2538
|
-
while (_reader.nextField()) {
|
|
2539
|
-
if (_reader.isEndGroup())
|
|
2540
|
-
break;
|
|
2541
|
-
switch (_reader.getFieldNumber()) {
|
|
2542
|
-
case 1:
|
|
2543
|
-
const messageInitializer1 = new CreateEntityRequest();
|
|
2544
|
-
_reader.readMessage(messageInitializer1, CreateEntityRequest.deserializeBinaryFromReader);
|
|
2545
|
-
(_instance.createEntityRequests =
|
|
2546
|
-
_instance.createEntityRequests || []).push(messageInitializer1);
|
|
2547
|
-
break;
|
|
2548
|
-
default:
|
|
2549
|
-
_reader.skipField();
|
|
2550
|
-
}
|
|
2551
|
-
}
|
|
2552
|
-
BatchCreateEntitiesRequest.refineValues(_instance);
|
|
2553
|
-
}
|
|
2554
|
-
/**
|
|
2555
|
-
* Serializes a message to binary format using provided binary reader
|
|
2556
|
-
* @param _instance message instance
|
|
2557
|
-
* @param _writer binary writer instance
|
|
2558
|
-
*/
|
|
2559
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2560
|
-
if (_instance.createEntityRequests &&
|
|
2561
|
-
_instance.createEntityRequests.length) {
|
|
2562
|
-
_writer.writeRepeatedMessage(1, _instance.createEntityRequests, CreateEntityRequest.serializeBinaryToWriter);
|
|
2563
|
-
}
|
|
2564
|
-
}
|
|
2565
|
-
/**
|
|
2566
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2567
|
-
* @param _value initial values object or instance of BatchCreateEntitiesRequest to deeply clone from
|
|
2568
|
-
*/
|
|
2569
|
-
constructor(_value) {
|
|
2570
|
-
_value = _value || {};
|
|
2571
|
-
this.createEntityRequests = (_value.createEntityRequests || []).map(m => new CreateEntityRequest(m));
|
|
2572
|
-
BatchCreateEntitiesRequest.refineValues(this);
|
|
2573
|
-
}
|
|
2574
|
-
get createEntityRequests() {
|
|
2575
|
-
return this._createEntityRequests;
|
|
2576
|
-
}
|
|
2577
|
-
set createEntityRequests(value) {
|
|
2578
|
-
this._createEntityRequests = value;
|
|
2579
|
-
}
|
|
2580
|
-
/**
|
|
2581
|
-
* Serialize message to binary data
|
|
2582
|
-
* @param instance message instance
|
|
2583
|
-
*/
|
|
2584
|
-
serializeBinary() {
|
|
2585
|
-
const writer = new BinaryWriter();
|
|
2586
|
-
BatchCreateEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2587
|
-
return writer.getResultBuffer();
|
|
2588
|
-
}
|
|
2589
|
-
/**
|
|
2590
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2591
|
-
*/
|
|
2592
|
-
toObject() {
|
|
2593
|
-
return {
|
|
2594
|
-
createEntityRequests: (this.createEntityRequests || []).map(m => m.toObject())
|
|
2595
|
-
};
|
|
2596
|
-
}
|
|
2597
|
-
/**
|
|
2598
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2599
|
-
*/
|
|
2600
|
-
toJSON() {
|
|
2601
|
-
return this.toObject();
|
|
2602
|
-
}
|
|
2603
|
-
/**
|
|
2604
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2605
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2606
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2607
|
-
*/
|
|
2608
|
-
toProtobufJSON(
|
|
2609
|
-
// @ts-ignore
|
|
2610
|
-
options) {
|
|
2611
|
-
return {
|
|
2612
|
-
createEntityRequests: (this.createEntityRequests || []).map(m => m.toProtobufJSON(options))
|
|
2613
|
-
};
|
|
2614
|
-
}
|
|
2615
|
-
}
|
|
2616
|
-
/**
|
|
2617
|
-
* Message implementation for ondewo.nlu.BatchUpdateEntitiesRequest
|
|
2618
|
-
*/
|
|
2619
|
-
export class BatchUpdateEntitiesRequest {
|
|
2620
|
-
static { this.id = 'ondewo.nlu.BatchUpdateEntitiesRequest'; }
|
|
2621
|
-
/**
|
|
2622
|
-
* Deserialize binary data to message
|
|
2623
|
-
* @param instance message instance
|
|
2624
|
-
*/
|
|
2625
|
-
static deserializeBinary(bytes) {
|
|
2626
|
-
const instance = new BatchUpdateEntitiesRequest();
|
|
2627
|
-
BatchUpdateEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2628
|
-
return instance;
|
|
2629
|
-
}
|
|
2630
|
-
/**
|
|
2631
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2632
|
-
* @param _instance message instance
|
|
2633
|
-
*/
|
|
2634
|
-
static refineValues(_instance) {
|
|
2635
|
-
_instance.entities = _instance.entities || [];
|
|
2636
|
-
}
|
|
2637
|
-
/**
|
|
2638
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2639
|
-
* @param _instance message instance
|
|
2640
|
-
* @param _reader binary reader instance
|
|
2641
|
-
*/
|
|
2642
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2643
|
-
while (_reader.nextField()) {
|
|
2644
|
-
if (_reader.isEndGroup())
|
|
2645
|
-
break;
|
|
2646
|
-
switch (_reader.getFieldNumber()) {
|
|
2647
|
-
case 1:
|
|
2648
|
-
const messageInitializer1 = new EntityType.Entity();
|
|
2649
|
-
_reader.readMessage(messageInitializer1, EntityType.Entity.deserializeBinaryFromReader);
|
|
2650
|
-
(_instance.entities = _instance.entities || []).push(messageInitializer1);
|
|
2651
|
-
break;
|
|
2652
|
-
default:
|
|
2653
|
-
_reader.skipField();
|
|
2654
|
-
}
|
|
2655
|
-
}
|
|
2656
|
-
BatchUpdateEntitiesRequest.refineValues(_instance);
|
|
2657
|
-
}
|
|
2658
|
-
/**
|
|
2659
|
-
* Serializes a message to binary format using provided binary reader
|
|
2660
|
-
* @param _instance message instance
|
|
2661
|
-
* @param _writer binary writer instance
|
|
2662
|
-
*/
|
|
2663
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2664
|
-
if (_instance.entities && _instance.entities.length) {
|
|
2665
|
-
_writer.writeRepeatedMessage(1, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
2666
|
-
}
|
|
2667
|
-
}
|
|
2668
|
-
/**
|
|
2669
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2670
|
-
* @param _value initial values object or instance of BatchUpdateEntitiesRequest to deeply clone from
|
|
2671
|
-
*/
|
|
2672
|
-
constructor(_value) {
|
|
2673
|
-
_value = _value || {};
|
|
2674
|
-
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
2675
|
-
BatchUpdateEntitiesRequest.refineValues(this);
|
|
2676
|
-
}
|
|
2677
|
-
get entities() {
|
|
2678
|
-
return this._entities;
|
|
2679
|
-
}
|
|
2680
|
-
set entities(value) {
|
|
2681
|
-
this._entities = value;
|
|
2682
|
-
}
|
|
2683
|
-
/**
|
|
2684
|
-
* Serialize message to binary data
|
|
2685
|
-
* @param instance message instance
|
|
2686
|
-
*/
|
|
2687
|
-
serializeBinary() {
|
|
2688
|
-
const writer = new BinaryWriter();
|
|
2689
|
-
BatchUpdateEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2690
|
-
return writer.getResultBuffer();
|
|
2691
|
-
}
|
|
2692
|
-
/**
|
|
2693
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2694
|
-
*/
|
|
2695
|
-
toObject() {
|
|
2696
|
-
return {
|
|
2697
|
-
entities: (this.entities || []).map(m => m.toObject())
|
|
2698
|
-
};
|
|
2699
|
-
}
|
|
2700
|
-
/**
|
|
2701
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2702
|
-
*/
|
|
2703
|
-
toJSON() {
|
|
2704
|
-
return this.toObject();
|
|
2705
|
-
}
|
|
2706
|
-
/**
|
|
2707
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2708
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2709
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2710
|
-
*/
|
|
2711
|
-
toProtobufJSON(
|
|
2712
|
-
// @ts-ignore
|
|
2713
|
-
options) {
|
|
2714
|
-
return {
|
|
2715
|
-
entities: (this.entities || []).map(m => m.toProtobufJSON(options))
|
|
2716
|
-
};
|
|
2717
|
-
}
|
|
2718
|
-
}
|
|
2719
|
-
/**
|
|
2720
|
-
* Message implementation for ondewo.nlu.UpdateEntityRequest
|
|
2721
|
-
*/
|
|
2722
|
-
export class UpdateEntityRequest {
|
|
2723
|
-
static { this.id = 'ondewo.nlu.UpdateEntityRequest'; }
|
|
2724
|
-
/**
|
|
2725
|
-
* Deserialize binary data to message
|
|
2726
|
-
* @param instance message instance
|
|
2727
|
-
*/
|
|
2728
|
-
static deserializeBinary(bytes) {
|
|
2729
|
-
const instance = new UpdateEntityRequest();
|
|
2730
|
-
UpdateEntityRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2731
|
-
return instance;
|
|
2732
|
-
}
|
|
2733
|
-
/**
|
|
2734
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2735
|
-
* @param _instance message instance
|
|
2736
|
-
*/
|
|
2737
|
-
static refineValues(_instance) {
|
|
2738
|
-
_instance.entity = _instance.entity || undefined;
|
|
2739
|
-
}
|
|
2740
|
-
/**
|
|
2741
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2742
|
-
* @param _instance message instance
|
|
2743
|
-
* @param _reader binary reader instance
|
|
2744
|
-
*/
|
|
2745
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2746
|
-
while (_reader.nextField()) {
|
|
2747
|
-
if (_reader.isEndGroup())
|
|
2748
|
-
break;
|
|
2749
|
-
switch (_reader.getFieldNumber()) {
|
|
2750
|
-
case 1:
|
|
2751
|
-
_instance.entity = new EntityType.Entity();
|
|
2752
|
-
_reader.readMessage(_instance.entity, EntityType.Entity.deserializeBinaryFromReader);
|
|
2753
|
-
break;
|
|
2754
|
-
default:
|
|
2755
|
-
_reader.skipField();
|
|
2756
|
-
}
|
|
2757
|
-
}
|
|
2758
|
-
UpdateEntityRequest.refineValues(_instance);
|
|
2759
|
-
}
|
|
2760
|
-
/**
|
|
2761
|
-
* Serializes a message to binary format using provided binary reader
|
|
2762
|
-
* @param _instance message instance
|
|
2763
|
-
* @param _writer binary writer instance
|
|
2764
|
-
*/
|
|
2765
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2766
|
-
if (_instance.entity) {
|
|
2767
|
-
_writer.writeMessage(1, _instance.entity, EntityType.Entity.serializeBinaryToWriter);
|
|
2768
|
-
}
|
|
2769
|
-
}
|
|
2770
|
-
/**
|
|
2771
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2772
|
-
* @param _value initial values object or instance of UpdateEntityRequest to deeply clone from
|
|
2773
|
-
*/
|
|
2774
|
-
constructor(_value) {
|
|
2775
|
-
_value = _value || {};
|
|
2776
|
-
this.entity = _value.entity
|
|
2777
|
-
? new EntityType.Entity(_value.entity)
|
|
2778
|
-
: undefined;
|
|
2779
|
-
UpdateEntityRequest.refineValues(this);
|
|
2780
|
-
}
|
|
2781
|
-
get entity() {
|
|
2782
|
-
return this._entity;
|
|
2783
|
-
}
|
|
2784
|
-
set entity(value) {
|
|
2785
|
-
this._entity = value;
|
|
2786
|
-
}
|
|
2787
|
-
/**
|
|
2788
|
-
* Serialize message to binary data
|
|
2789
|
-
* @param instance message instance
|
|
2790
|
-
*/
|
|
2791
|
-
serializeBinary() {
|
|
2792
|
-
const writer = new BinaryWriter();
|
|
2793
|
-
UpdateEntityRequest.serializeBinaryToWriter(this, writer);
|
|
2794
|
-
return writer.getResultBuffer();
|
|
2795
|
-
}
|
|
2796
|
-
/**
|
|
2797
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2798
|
-
*/
|
|
2799
|
-
toObject() {
|
|
2800
|
-
return {
|
|
2801
|
-
entity: this.entity ? this.entity.toObject() : undefined
|
|
2802
|
-
};
|
|
2803
|
-
}
|
|
2804
|
-
/**
|
|
2805
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2806
|
-
*/
|
|
2807
|
-
toJSON() {
|
|
2808
|
-
return this.toObject();
|
|
2809
|
-
}
|
|
2810
|
-
/**
|
|
2811
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2812
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2813
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2814
|
-
*/
|
|
2815
|
-
toProtobufJSON(
|
|
2816
|
-
// @ts-ignore
|
|
2817
|
-
options) {
|
|
2818
|
-
return {
|
|
2819
|
-
entity: this.entity ? this.entity.toProtobufJSON(options) : null
|
|
2820
|
-
};
|
|
2821
|
-
}
|
|
2822
|
-
}
|
|
2823
|
-
/**
|
|
2824
|
-
* Message implementation for ondewo.nlu.GetEntityRequest
|
|
2825
|
-
*/
|
|
2826
|
-
export class GetEntityRequest {
|
|
2827
|
-
static { this.id = 'ondewo.nlu.GetEntityRequest'; }
|
|
2828
|
-
/**
|
|
2829
|
-
* Deserialize binary data to message
|
|
2830
|
-
* @param instance message instance
|
|
2831
|
-
*/
|
|
2832
|
-
static deserializeBinary(bytes) {
|
|
2833
|
-
const instance = new GetEntityRequest();
|
|
2834
|
-
GetEntityRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2835
|
-
return instance;
|
|
2836
|
-
}
|
|
2837
|
-
/**
|
|
2838
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2839
|
-
* @param _instance message instance
|
|
2840
|
-
*/
|
|
2841
|
-
static refineValues(_instance) {
|
|
2842
|
-
_instance.name = _instance.name || '';
|
|
2843
|
-
}
|
|
2844
|
-
/**
|
|
2845
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2846
|
-
* @param _instance message instance
|
|
2847
|
-
* @param _reader binary reader instance
|
|
2848
|
-
*/
|
|
2849
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2850
|
-
while (_reader.nextField()) {
|
|
2851
|
-
if (_reader.isEndGroup())
|
|
2852
|
-
break;
|
|
2853
|
-
switch (_reader.getFieldNumber()) {
|
|
2854
|
-
case 1:
|
|
2855
|
-
_instance.name = _reader.readString();
|
|
2856
|
-
break;
|
|
2857
|
-
default:
|
|
2858
|
-
_reader.skipField();
|
|
2859
|
-
}
|
|
2860
|
-
}
|
|
2861
|
-
GetEntityRequest.refineValues(_instance);
|
|
2862
|
-
}
|
|
2863
|
-
/**
|
|
2864
|
-
* Serializes a message to binary format using provided binary reader
|
|
2865
|
-
* @param _instance message instance
|
|
2866
|
-
* @param _writer binary writer instance
|
|
2867
|
-
*/
|
|
2868
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2869
|
-
if (_instance.name) {
|
|
2870
|
-
_writer.writeString(1, _instance.name);
|
|
2871
|
-
}
|
|
2872
|
-
}
|
|
2873
|
-
/**
|
|
2874
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2875
|
-
* @param _value initial values object or instance of GetEntityRequest to deeply clone from
|
|
2876
|
-
*/
|
|
2877
|
-
constructor(_value) {
|
|
2878
|
-
_value = _value || {};
|
|
2879
|
-
this.name = _value.name;
|
|
2880
|
-
GetEntityRequest.refineValues(this);
|
|
2881
|
-
}
|
|
2882
|
-
get name() {
|
|
2883
|
-
return this._name;
|
|
2884
|
-
}
|
|
2885
|
-
set name(value) {
|
|
2886
|
-
this._name = value;
|
|
2887
|
-
}
|
|
2888
|
-
/**
|
|
2889
|
-
* Serialize message to binary data
|
|
2890
|
-
* @param instance message instance
|
|
2891
|
-
*/
|
|
2892
|
-
serializeBinary() {
|
|
2893
|
-
const writer = new BinaryWriter();
|
|
2894
|
-
GetEntityRequest.serializeBinaryToWriter(this, writer);
|
|
2895
|
-
return writer.getResultBuffer();
|
|
2896
|
-
}
|
|
2897
|
-
/**
|
|
2898
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2899
|
-
*/
|
|
2900
|
-
toObject() {
|
|
2901
|
-
return {
|
|
2902
|
-
name: this.name
|
|
2903
|
-
};
|
|
2904
|
-
}
|
|
2905
|
-
/**
|
|
2906
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2907
|
-
*/
|
|
2908
|
-
toJSON() {
|
|
2909
|
-
return this.toObject();
|
|
2910
|
-
}
|
|
2911
|
-
/**
|
|
2912
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2913
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2914
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2915
|
-
*/
|
|
2916
|
-
toProtobufJSON(
|
|
2917
|
-
// @ts-ignore
|
|
2918
|
-
options) {
|
|
2919
|
-
return {
|
|
2920
|
-
name: this.name
|
|
2921
|
-
};
|
|
2922
|
-
}
|
|
2923
|
-
}
|
|
2924
|
-
/**
|
|
2925
|
-
* Message implementation for ondewo.nlu.BatchGetEntitiesRequest
|
|
2926
|
-
*/
|
|
2927
|
-
export class BatchGetEntitiesRequest {
|
|
2928
|
-
static { this.id = 'ondewo.nlu.BatchGetEntitiesRequest'; }
|
|
2929
|
-
/**
|
|
2930
|
-
* Deserialize binary data to message
|
|
2931
|
-
* @param instance message instance
|
|
2932
|
-
*/
|
|
2933
|
-
static deserializeBinary(bytes) {
|
|
2934
|
-
const instance = new BatchGetEntitiesRequest();
|
|
2935
|
-
BatchGetEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2936
|
-
return instance;
|
|
2937
|
-
}
|
|
2938
|
-
/**
|
|
2939
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2940
|
-
* @param _instance message instance
|
|
2941
|
-
*/
|
|
2942
|
-
static refineValues(_instance) {
|
|
2943
|
-
_instance.names = _instance.names || [];
|
|
2944
|
-
}
|
|
2945
|
-
/**
|
|
2946
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2947
|
-
* @param _instance message instance
|
|
2948
|
-
* @param _reader binary reader instance
|
|
2949
|
-
*/
|
|
2950
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2951
|
-
while (_reader.nextField()) {
|
|
2952
|
-
if (_reader.isEndGroup())
|
|
2953
|
-
break;
|
|
2954
|
-
switch (_reader.getFieldNumber()) {
|
|
2955
|
-
case 1:
|
|
2956
|
-
(_instance.names = _instance.names || []).push(_reader.readString());
|
|
2957
|
-
break;
|
|
2958
|
-
default:
|
|
2959
|
-
_reader.skipField();
|
|
2960
|
-
}
|
|
2961
|
-
}
|
|
2962
|
-
BatchGetEntitiesRequest.refineValues(_instance);
|
|
2963
|
-
}
|
|
2964
|
-
/**
|
|
2965
|
-
* Serializes a message to binary format using provided binary reader
|
|
2966
|
-
* @param _instance message instance
|
|
2967
|
-
* @param _writer binary writer instance
|
|
2968
|
-
*/
|
|
2969
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2970
|
-
if (_instance.names && _instance.names.length) {
|
|
2971
|
-
_writer.writeRepeatedString(1, _instance.names);
|
|
2972
|
-
}
|
|
2973
|
-
}
|
|
2974
|
-
/**
|
|
2975
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2976
|
-
* @param _value initial values object or instance of BatchGetEntitiesRequest to deeply clone from
|
|
2977
|
-
*/
|
|
2978
|
-
constructor(_value) {
|
|
2979
|
-
_value = _value || {};
|
|
2980
|
-
this.names = (_value.names || []).slice();
|
|
2981
|
-
BatchGetEntitiesRequest.refineValues(this);
|
|
2982
|
-
}
|
|
2983
|
-
get names() {
|
|
2984
|
-
return this._names;
|
|
2985
|
-
}
|
|
2986
|
-
set names(value) {
|
|
2987
|
-
this._names = value;
|
|
2988
|
-
}
|
|
2989
|
-
/**
|
|
2990
|
-
* Serialize message to binary data
|
|
2991
|
-
* @param instance message instance
|
|
2992
|
-
*/
|
|
2993
|
-
serializeBinary() {
|
|
2994
|
-
const writer = new BinaryWriter();
|
|
2995
|
-
BatchGetEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2996
|
-
return writer.getResultBuffer();
|
|
2997
|
-
}
|
|
2998
|
-
/**
|
|
2999
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3000
|
-
*/
|
|
3001
|
-
toObject() {
|
|
3002
|
-
return {
|
|
3003
|
-
names: (this.names || []).slice()
|
|
3004
|
-
};
|
|
3005
|
-
}
|
|
3006
|
-
/**
|
|
3007
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3008
|
-
*/
|
|
3009
|
-
toJSON() {
|
|
3010
|
-
return this.toObject();
|
|
3011
|
-
}
|
|
3012
|
-
/**
|
|
3013
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3014
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3015
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3016
|
-
*/
|
|
3017
|
-
toProtobufJSON(
|
|
3018
|
-
// @ts-ignore
|
|
3019
|
-
options) {
|
|
3020
|
-
return {
|
|
3021
|
-
names: (this.names || []).slice()
|
|
3022
|
-
};
|
|
3023
|
-
}
|
|
3024
|
-
}
|
|
3025
|
-
/**
|
|
3026
|
-
* Message implementation for ondewo.nlu.BatchDeleteEntitiesRequest
|
|
3027
|
-
*/
|
|
3028
|
-
export class BatchDeleteEntitiesRequest {
|
|
3029
|
-
static { this.id = 'ondewo.nlu.BatchDeleteEntitiesRequest'; }
|
|
3030
|
-
/**
|
|
3031
|
-
* Deserialize binary data to message
|
|
3032
|
-
* @param instance message instance
|
|
3033
|
-
*/
|
|
3034
|
-
static deserializeBinary(bytes) {
|
|
3035
|
-
const instance = new BatchDeleteEntitiesRequest();
|
|
3036
|
-
BatchDeleteEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3037
|
-
return instance;
|
|
3038
|
-
}
|
|
3039
|
-
/**
|
|
3040
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3041
|
-
* @param _instance message instance
|
|
3042
|
-
*/
|
|
3043
|
-
static refineValues(_instance) {
|
|
3044
|
-
_instance.names = _instance.names || [];
|
|
3045
|
-
}
|
|
3046
|
-
/**
|
|
3047
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3048
|
-
* @param _instance message instance
|
|
3049
|
-
* @param _reader binary reader instance
|
|
3050
|
-
*/
|
|
3051
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3052
|
-
while (_reader.nextField()) {
|
|
3053
|
-
if (_reader.isEndGroup())
|
|
3054
|
-
break;
|
|
3055
|
-
switch (_reader.getFieldNumber()) {
|
|
3056
|
-
case 1:
|
|
3057
|
-
(_instance.names = _instance.names || []).push(_reader.readString());
|
|
3058
|
-
break;
|
|
3059
|
-
default:
|
|
3060
|
-
_reader.skipField();
|
|
3061
|
-
}
|
|
3062
|
-
}
|
|
3063
|
-
BatchDeleteEntitiesRequest.refineValues(_instance);
|
|
3064
|
-
}
|
|
3065
|
-
/**
|
|
3066
|
-
* Serializes a message to binary format using provided binary reader
|
|
3067
|
-
* @param _instance message instance
|
|
3068
|
-
* @param _writer binary writer instance
|
|
3069
|
-
*/
|
|
3070
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3071
|
-
if (_instance.names && _instance.names.length) {
|
|
3072
|
-
_writer.writeRepeatedString(1, _instance.names);
|
|
3073
|
-
}
|
|
3074
|
-
}
|
|
3075
|
-
/**
|
|
3076
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3077
|
-
* @param _value initial values object or instance of BatchDeleteEntitiesRequest to deeply clone from
|
|
3078
|
-
*/
|
|
3079
|
-
constructor(_value) {
|
|
3080
|
-
_value = _value || {};
|
|
3081
|
-
this.names = (_value.names || []).slice();
|
|
3082
|
-
BatchDeleteEntitiesRequest.refineValues(this);
|
|
3083
|
-
}
|
|
3084
|
-
get names() {
|
|
3085
|
-
return this._names;
|
|
3086
|
-
}
|
|
3087
|
-
set names(value) {
|
|
3088
|
-
this._names = value;
|
|
3089
|
-
}
|
|
3090
|
-
/**
|
|
3091
|
-
* Serialize message to binary data
|
|
3092
|
-
* @param instance message instance
|
|
3093
|
-
*/
|
|
3094
|
-
serializeBinary() {
|
|
3095
|
-
const writer = new BinaryWriter();
|
|
3096
|
-
BatchDeleteEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
3097
|
-
return writer.getResultBuffer();
|
|
3098
|
-
}
|
|
3099
|
-
/**
|
|
3100
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3101
|
-
*/
|
|
3102
|
-
toObject() {
|
|
3103
|
-
return {
|
|
3104
|
-
names: (this.names || []).slice()
|
|
3105
|
-
};
|
|
3106
|
-
}
|
|
3107
|
-
/**
|
|
3108
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3109
|
-
*/
|
|
3110
|
-
toJSON() {
|
|
3111
|
-
return this.toObject();
|
|
3112
|
-
}
|
|
3113
|
-
/**
|
|
3114
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3115
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3116
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3117
|
-
*/
|
|
3118
|
-
toProtobufJSON(
|
|
3119
|
-
// @ts-ignore
|
|
3120
|
-
options) {
|
|
3121
|
-
return {
|
|
3122
|
-
names: (this.names || []).slice()
|
|
3123
|
-
};
|
|
3124
|
-
}
|
|
3125
|
-
}
|
|
3126
|
-
/**
|
|
3127
|
-
* Message implementation for ondewo.nlu.DeleteEntityRequest
|
|
3128
|
-
*/
|
|
3129
|
-
export class DeleteEntityRequest {
|
|
3130
|
-
static { this.id = 'ondewo.nlu.DeleteEntityRequest'; }
|
|
3131
|
-
/**
|
|
3132
|
-
* Deserialize binary data to message
|
|
3133
|
-
* @param instance message instance
|
|
3134
|
-
*/
|
|
3135
|
-
static deserializeBinary(bytes) {
|
|
3136
|
-
const instance = new DeleteEntityRequest();
|
|
3137
|
-
DeleteEntityRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3138
|
-
return instance;
|
|
3139
|
-
}
|
|
3140
|
-
/**
|
|
3141
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3142
|
-
* @param _instance message instance
|
|
3143
|
-
*/
|
|
3144
|
-
static refineValues(_instance) {
|
|
3145
|
-
_instance.name = _instance.name || '';
|
|
3146
|
-
}
|
|
3147
|
-
/**
|
|
3148
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3149
|
-
* @param _instance message instance
|
|
3150
|
-
* @param _reader binary reader instance
|
|
3151
|
-
*/
|
|
3152
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3153
|
-
while (_reader.nextField()) {
|
|
3154
|
-
if (_reader.isEndGroup())
|
|
3155
|
-
break;
|
|
3156
|
-
switch (_reader.getFieldNumber()) {
|
|
3157
|
-
case 1:
|
|
3158
|
-
_instance.name = _reader.readString();
|
|
3159
|
-
break;
|
|
3160
|
-
default:
|
|
3161
|
-
_reader.skipField();
|
|
3162
|
-
}
|
|
3163
|
-
}
|
|
3164
|
-
DeleteEntityRequest.refineValues(_instance);
|
|
3165
|
-
}
|
|
3166
|
-
/**
|
|
3167
|
-
* Serializes a message to binary format using provided binary reader
|
|
3168
|
-
* @param _instance message instance
|
|
3169
|
-
* @param _writer binary writer instance
|
|
3170
|
-
*/
|
|
3171
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3172
|
-
if (_instance.name) {
|
|
3173
|
-
_writer.writeString(1, _instance.name);
|
|
3174
|
-
}
|
|
3175
|
-
}
|
|
3176
|
-
/**
|
|
3177
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3178
|
-
* @param _value initial values object or instance of DeleteEntityRequest to deeply clone from
|
|
3179
|
-
*/
|
|
3180
|
-
constructor(_value) {
|
|
3181
|
-
_value = _value || {};
|
|
3182
|
-
this.name = _value.name;
|
|
3183
|
-
DeleteEntityRequest.refineValues(this);
|
|
3184
|
-
}
|
|
3185
|
-
get name() {
|
|
3186
|
-
return this._name;
|
|
3187
|
-
}
|
|
3188
|
-
set name(value) {
|
|
3189
|
-
this._name = value;
|
|
3190
|
-
}
|
|
3191
|
-
/**
|
|
3192
|
-
* Serialize message to binary data
|
|
3193
|
-
* @param instance message instance
|
|
3194
|
-
*/
|
|
3195
|
-
serializeBinary() {
|
|
3196
|
-
const writer = new BinaryWriter();
|
|
3197
|
-
DeleteEntityRequest.serializeBinaryToWriter(this, writer);
|
|
3198
|
-
return writer.getResultBuffer();
|
|
3199
|
-
}
|
|
3200
|
-
/**
|
|
3201
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3202
|
-
*/
|
|
3203
|
-
toObject() {
|
|
3204
|
-
return {
|
|
3205
|
-
name: this.name
|
|
3206
|
-
};
|
|
3207
|
-
}
|
|
3208
|
-
/**
|
|
3209
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3210
|
-
*/
|
|
3211
|
-
toJSON() {
|
|
3212
|
-
return this.toObject();
|
|
3213
|
-
}
|
|
3214
|
-
/**
|
|
3215
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3216
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3217
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3218
|
-
*/
|
|
3219
|
-
toProtobufJSON(
|
|
3220
|
-
// @ts-ignore
|
|
3221
|
-
options) {
|
|
3222
|
-
return {
|
|
3223
|
-
name: this.name
|
|
3224
|
-
};
|
|
3225
|
-
}
|
|
3226
|
-
}
|
|
3227
|
-
/**
|
|
3228
|
-
* Message implementation for ondewo.nlu.DeleteEntityStatus
|
|
3229
|
-
*/
|
|
3230
|
-
export class DeleteEntityStatus {
|
|
3231
|
-
static { this.id = 'ondewo.nlu.DeleteEntityStatus'; }
|
|
3232
|
-
/**
|
|
3233
|
-
* Deserialize binary data to message
|
|
3234
|
-
* @param instance message instance
|
|
3235
|
-
*/
|
|
3236
|
-
static deserializeBinary(bytes) {
|
|
3237
|
-
const instance = new DeleteEntityStatus();
|
|
3238
|
-
DeleteEntityStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3239
|
-
return instance;
|
|
3240
|
-
}
|
|
3241
|
-
/**
|
|
3242
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3243
|
-
* @param _instance message instance
|
|
3244
|
-
*/
|
|
3245
|
-
static refineValues(_instance) { }
|
|
3246
|
-
/**
|
|
3247
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3248
|
-
* @param _instance message instance
|
|
3249
|
-
* @param _reader binary reader instance
|
|
3250
|
-
*/
|
|
3251
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3252
|
-
while (_reader.nextField()) {
|
|
3253
|
-
if (_reader.isEndGroup())
|
|
3254
|
-
break;
|
|
3255
|
-
switch (_reader.getFieldNumber()) {
|
|
3256
|
-
case 1:
|
|
3257
|
-
_instance.successfullyDeleted = new googleProtobuf006.Empty();
|
|
3258
|
-
_reader.readMessage(_instance.successfullyDeleted, googleProtobuf006.Empty.deserializeBinaryFromReader);
|
|
3259
|
-
break;
|
|
3260
|
-
case 2:
|
|
3261
|
-
_instance.errorMessage = _reader.readString();
|
|
3262
|
-
break;
|
|
3263
|
-
default:
|
|
3264
|
-
_reader.skipField();
|
|
3265
|
-
}
|
|
3266
|
-
}
|
|
3267
|
-
DeleteEntityStatus.refineValues(_instance);
|
|
3268
|
-
}
|
|
3269
|
-
/**
|
|
3270
|
-
* Serializes a message to binary format using provided binary reader
|
|
3271
|
-
* @param _instance message instance
|
|
3272
|
-
* @param _writer binary writer instance
|
|
3273
|
-
*/
|
|
3274
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3275
|
-
if (_instance.successfullyDeleted) {
|
|
3276
|
-
_writer.writeMessage(1, _instance.successfullyDeleted, googleProtobuf006.Empty.serializeBinaryToWriter);
|
|
3277
|
-
}
|
|
3278
|
-
if (_instance.errorMessage || _instance.errorMessage === '') {
|
|
3279
|
-
_writer.writeString(2, _instance.errorMessage);
|
|
3280
|
-
}
|
|
3281
|
-
}
|
|
3282
|
-
/**
|
|
3283
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3284
|
-
* @param _value initial values object or instance of DeleteEntityStatus to deeply clone from
|
|
3285
|
-
*/
|
|
3286
|
-
constructor(_value) {
|
|
3287
|
-
this._deleteStatus = DeleteEntityStatus.DeleteStatusCase.none;
|
|
3288
|
-
_value = _value || {};
|
|
3289
|
-
this.successfullyDeleted = _value.successfullyDeleted
|
|
3290
|
-
? new googleProtobuf006.Empty(_value.successfullyDeleted)
|
|
3291
|
-
: undefined;
|
|
3292
|
-
this.errorMessage = _value.errorMessage;
|
|
3293
|
-
DeleteEntityStatus.refineValues(this);
|
|
3294
|
-
}
|
|
3295
|
-
get successfullyDeleted() {
|
|
3296
|
-
return this._successfullyDeleted;
|
|
3297
|
-
}
|
|
3298
|
-
set successfullyDeleted(value) {
|
|
3299
|
-
if (value !== undefined && value !== null) {
|
|
3300
|
-
this._errorMessage = undefined;
|
|
3301
|
-
this._deleteStatus =
|
|
3302
|
-
DeleteEntityStatus.DeleteStatusCase.successfullyDeleted;
|
|
3303
|
-
}
|
|
3304
|
-
this._successfullyDeleted = value;
|
|
3305
|
-
}
|
|
3306
|
-
get errorMessage() {
|
|
3307
|
-
return this._errorMessage;
|
|
3308
|
-
}
|
|
3309
|
-
set errorMessage(value) {
|
|
3310
|
-
if (value !== undefined && value !== null) {
|
|
3311
|
-
this._successfullyDeleted = undefined;
|
|
3312
|
-
this._deleteStatus = DeleteEntityStatus.DeleteStatusCase.errorMessage;
|
|
3313
|
-
}
|
|
3314
|
-
this._errorMessage = value;
|
|
3315
|
-
}
|
|
3316
|
-
get deleteStatus() {
|
|
3317
|
-
return this._deleteStatus;
|
|
3318
|
-
}
|
|
3319
|
-
/**
|
|
3320
|
-
* Serialize message to binary data
|
|
3321
|
-
* @param instance message instance
|
|
3322
|
-
*/
|
|
3323
|
-
serializeBinary() {
|
|
3324
|
-
const writer = new BinaryWriter();
|
|
3325
|
-
DeleteEntityStatus.serializeBinaryToWriter(this, writer);
|
|
3326
|
-
return writer.getResultBuffer();
|
|
3327
|
-
}
|
|
3328
|
-
/**
|
|
3329
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3330
|
-
*/
|
|
3331
|
-
toObject() {
|
|
3332
|
-
return {
|
|
3333
|
-
successfullyDeleted: this.successfullyDeleted
|
|
3334
|
-
? this.successfullyDeleted.toObject()
|
|
3335
|
-
: undefined,
|
|
3336
|
-
errorMessage: this.errorMessage
|
|
3337
|
-
};
|
|
3338
|
-
}
|
|
3339
|
-
/**
|
|
3340
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3341
|
-
*/
|
|
3342
|
-
toJSON() {
|
|
3343
|
-
return this.toObject();
|
|
3344
|
-
}
|
|
3345
|
-
/**
|
|
3346
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3347
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3348
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3349
|
-
*/
|
|
3350
|
-
toProtobufJSON(
|
|
3351
|
-
// @ts-ignore
|
|
3352
|
-
options) {
|
|
3353
|
-
return {
|
|
3354
|
-
successfullyDeleted: this.successfullyDeleted
|
|
3355
|
-
? this.successfullyDeleted.toProtobufJSON(options)
|
|
3356
|
-
: null,
|
|
3357
|
-
errorMessage: this.errorMessage === null || this.errorMessage === undefined
|
|
3358
|
-
? null
|
|
3359
|
-
: this.errorMessage
|
|
3360
|
-
};
|
|
3361
|
-
}
|
|
3362
|
-
}
|
|
3363
|
-
(function (DeleteEntityStatus) {
|
|
3364
|
-
let DeleteStatusCase;
|
|
3365
|
-
(function (DeleteStatusCase) {
|
|
3366
|
-
DeleteStatusCase[DeleteStatusCase["none"] = 0] = "none";
|
|
3367
|
-
DeleteStatusCase[DeleteStatusCase["successfullyDeleted"] = 1] = "successfullyDeleted";
|
|
3368
|
-
DeleteStatusCase[DeleteStatusCase["errorMessage"] = 2] = "errorMessage";
|
|
3369
|
-
})(DeleteStatusCase = DeleteEntityStatus.DeleteStatusCase || (DeleteEntityStatus.DeleteStatusCase = {}));
|
|
3370
|
-
})(DeleteEntityStatus || (DeleteEntityStatus = {}));
|
|
3371
|
-
/**
|
|
3372
|
-
* Message implementation for ondewo.nlu.BatchDeleteEntitiesResponse
|
|
3373
|
-
*/
|
|
3374
|
-
export class BatchDeleteEntitiesResponse {
|
|
3375
|
-
static { this.id = 'ondewo.nlu.BatchDeleteEntitiesResponse'; }
|
|
3376
|
-
/**
|
|
3377
|
-
* Deserialize binary data to message
|
|
3378
|
-
* @param instance message instance
|
|
3379
|
-
*/
|
|
3380
|
-
static deserializeBinary(bytes) {
|
|
3381
|
-
const instance = new BatchDeleteEntitiesResponse();
|
|
3382
|
-
BatchDeleteEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3383
|
-
return instance;
|
|
3384
|
-
}
|
|
3385
|
-
/**
|
|
3386
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3387
|
-
* @param _instance message instance
|
|
3388
|
-
*/
|
|
3389
|
-
static refineValues(_instance) {
|
|
3390
|
-
_instance.deleteStatuses = _instance.deleteStatuses || [];
|
|
3391
|
-
_instance.hasErrors = _instance.hasErrors || false;
|
|
3392
|
-
}
|
|
3393
|
-
/**
|
|
3394
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3395
|
-
* @param _instance message instance
|
|
3396
|
-
* @param _reader binary reader instance
|
|
3397
|
-
*/
|
|
3398
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3399
|
-
while (_reader.nextField()) {
|
|
3400
|
-
if (_reader.isEndGroup())
|
|
3401
|
-
break;
|
|
3402
|
-
switch (_reader.getFieldNumber()) {
|
|
3403
|
-
case 1:
|
|
3404
|
-
const messageInitializer1 = new DeleteEntityStatus();
|
|
3405
|
-
_reader.readMessage(messageInitializer1, DeleteEntityStatus.deserializeBinaryFromReader);
|
|
3406
|
-
(_instance.deleteStatuses = _instance.deleteStatuses || []).push(messageInitializer1);
|
|
3407
|
-
break;
|
|
3408
|
-
case 2:
|
|
3409
|
-
_instance.hasErrors = _reader.readBool();
|
|
3410
|
-
break;
|
|
3411
|
-
default:
|
|
3412
|
-
_reader.skipField();
|
|
3413
|
-
}
|
|
3414
|
-
}
|
|
3415
|
-
BatchDeleteEntitiesResponse.refineValues(_instance);
|
|
3416
|
-
}
|
|
3417
|
-
/**
|
|
3418
|
-
* Serializes a message to binary format using provided binary reader
|
|
3419
|
-
* @param _instance message instance
|
|
3420
|
-
* @param _writer binary writer instance
|
|
3421
|
-
*/
|
|
3422
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3423
|
-
if (_instance.deleteStatuses && _instance.deleteStatuses.length) {
|
|
3424
|
-
_writer.writeRepeatedMessage(1, _instance.deleteStatuses, DeleteEntityStatus.serializeBinaryToWriter);
|
|
3425
|
-
}
|
|
3426
|
-
if (_instance.hasErrors) {
|
|
3427
|
-
_writer.writeBool(2, _instance.hasErrors);
|
|
3428
|
-
}
|
|
3429
|
-
}
|
|
3430
|
-
/**
|
|
3431
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3432
|
-
* @param _value initial values object or instance of BatchDeleteEntitiesResponse to deeply clone from
|
|
3433
|
-
*/
|
|
3434
|
-
constructor(_value) {
|
|
3435
|
-
_value = _value || {};
|
|
3436
|
-
this.deleteStatuses = (_value.deleteStatuses || []).map(m => new DeleteEntityStatus(m));
|
|
3437
|
-
this.hasErrors = _value.hasErrors;
|
|
3438
|
-
BatchDeleteEntitiesResponse.refineValues(this);
|
|
3439
|
-
}
|
|
3440
|
-
get deleteStatuses() {
|
|
3441
|
-
return this._deleteStatuses;
|
|
3442
|
-
}
|
|
3443
|
-
set deleteStatuses(value) {
|
|
3444
|
-
this._deleteStatuses = value;
|
|
3445
|
-
}
|
|
3446
|
-
get hasErrors() {
|
|
3447
|
-
return this._hasErrors;
|
|
3448
|
-
}
|
|
3449
|
-
set hasErrors(value) {
|
|
3450
|
-
this._hasErrors = value;
|
|
3451
|
-
}
|
|
3452
|
-
/**
|
|
3453
|
-
* Serialize message to binary data
|
|
3454
|
-
* @param instance message instance
|
|
3455
|
-
*/
|
|
3456
|
-
serializeBinary() {
|
|
3457
|
-
const writer = new BinaryWriter();
|
|
3458
|
-
BatchDeleteEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
3459
|
-
return writer.getResultBuffer();
|
|
3460
|
-
}
|
|
3461
|
-
/**
|
|
3462
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3463
|
-
*/
|
|
3464
|
-
toObject() {
|
|
3465
|
-
return {
|
|
3466
|
-
deleteStatuses: (this.deleteStatuses || []).map(m => m.toObject()),
|
|
3467
|
-
hasErrors: this.hasErrors
|
|
3468
|
-
};
|
|
3469
|
-
}
|
|
3470
|
-
/**
|
|
3471
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3472
|
-
*/
|
|
3473
|
-
toJSON() {
|
|
3474
|
-
return this.toObject();
|
|
3475
|
-
}
|
|
3476
|
-
/**
|
|
3477
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3478
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3479
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3480
|
-
*/
|
|
3481
|
-
toProtobufJSON(
|
|
3482
|
-
// @ts-ignore
|
|
3483
|
-
options) {
|
|
3484
|
-
return {
|
|
3485
|
-
deleteStatuses: (this.deleteStatuses || []).map(m => m.toProtobufJSON(options)),
|
|
3486
|
-
hasErrors: this.hasErrors
|
|
3487
|
-
};
|
|
3488
|
-
}
|
|
3489
|
-
}
|
|
3490
|
-
/**
|
|
3491
|
-
* Message implementation for ondewo.nlu.ListEntitiesRequest
|
|
3492
|
-
*/
|
|
3493
|
-
export class ListEntitiesRequest {
|
|
3494
|
-
static { this.id = 'ondewo.nlu.ListEntitiesRequest'; }
|
|
3495
|
-
/**
|
|
3496
|
-
* Deserialize binary data to message
|
|
3497
|
-
* @param instance message instance
|
|
3498
|
-
*/
|
|
3499
|
-
static deserializeBinary(bytes) {
|
|
3500
|
-
const instance = new ListEntitiesRequest();
|
|
3501
|
-
ListEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3502
|
-
return instance;
|
|
3503
|
-
}
|
|
3504
|
-
/**
|
|
3505
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3506
|
-
* @param _instance message instance
|
|
3507
|
-
*/
|
|
3508
|
-
static refineValues(_instance) {
|
|
3509
|
-
_instance.entityTypeName = _instance.entityTypeName || '';
|
|
3510
|
-
_instance.languageCode = _instance.languageCode || '';
|
|
3511
|
-
_instance.pageToken = _instance.pageToken || '';
|
|
3512
|
-
_instance.sortByField = _instance.sortByField || undefined;
|
|
3513
|
-
_instance.searchByPattern = _instance.searchByPattern || '';
|
|
3514
|
-
}
|
|
3515
|
-
/**
|
|
3516
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3517
|
-
* @param _instance message instance
|
|
3518
|
-
* @param _reader binary reader instance
|
|
3519
|
-
*/
|
|
3520
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3521
|
-
while (_reader.nextField()) {
|
|
3522
|
-
if (_reader.isEndGroup())
|
|
3523
|
-
break;
|
|
3524
|
-
switch (_reader.getFieldNumber()) {
|
|
3525
|
-
case 1:
|
|
3526
|
-
_instance.entityTypeName = _reader.readString();
|
|
3527
|
-
break;
|
|
3528
|
-
case 2:
|
|
3529
|
-
_instance.languageCode = _reader.readString();
|
|
3530
|
-
break;
|
|
3531
|
-
case 3:
|
|
3532
|
-
_instance.pageToken = _reader.readString();
|
|
3533
|
-
break;
|
|
3534
|
-
case 5:
|
|
3535
|
-
_instance.sortByField = new EntityValueSorting();
|
|
3536
|
-
_reader.readMessage(_instance.sortByField, EntityValueSorting.deserializeBinaryFromReader);
|
|
3537
|
-
break;
|
|
3538
|
-
case 6:
|
|
3539
|
-
_instance.searchByPattern = _reader.readString();
|
|
3540
|
-
break;
|
|
3541
|
-
default:
|
|
3542
|
-
_reader.skipField();
|
|
3543
|
-
}
|
|
3544
|
-
}
|
|
3545
|
-
ListEntitiesRequest.refineValues(_instance);
|
|
3546
|
-
}
|
|
3547
|
-
/**
|
|
3548
|
-
* Serializes a message to binary format using provided binary reader
|
|
3549
|
-
* @param _instance message instance
|
|
3550
|
-
* @param _writer binary writer instance
|
|
3551
|
-
*/
|
|
3552
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3553
|
-
if (_instance.entityTypeName) {
|
|
3554
|
-
_writer.writeString(1, _instance.entityTypeName);
|
|
3555
|
-
}
|
|
3556
|
-
if (_instance.languageCode) {
|
|
3557
|
-
_writer.writeString(2, _instance.languageCode);
|
|
3558
|
-
}
|
|
3559
|
-
if (_instance.pageToken) {
|
|
3560
|
-
_writer.writeString(3, _instance.pageToken);
|
|
3561
|
-
}
|
|
3562
|
-
if (_instance.sortByField) {
|
|
3563
|
-
_writer.writeMessage(5, _instance.sortByField, EntityValueSorting.serializeBinaryToWriter);
|
|
3564
|
-
}
|
|
3565
|
-
if (_instance.searchByPattern) {
|
|
3566
|
-
_writer.writeString(6, _instance.searchByPattern);
|
|
3567
|
-
}
|
|
3568
|
-
}
|
|
3569
|
-
/**
|
|
3570
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3571
|
-
* @param _value initial values object or instance of ListEntitiesRequest to deeply clone from
|
|
3572
|
-
*/
|
|
3573
|
-
constructor(_value) {
|
|
3574
|
-
_value = _value || {};
|
|
3575
|
-
this.entityTypeName = _value.entityTypeName;
|
|
3576
|
-
this.languageCode = _value.languageCode;
|
|
3577
|
-
this.pageToken = _value.pageToken;
|
|
3578
|
-
this.sortByField = _value.sortByField
|
|
3579
|
-
? new EntityValueSorting(_value.sortByField)
|
|
3580
|
-
: undefined;
|
|
3581
|
-
this.searchByPattern = _value.searchByPattern;
|
|
3582
|
-
ListEntitiesRequest.refineValues(this);
|
|
3583
|
-
}
|
|
3584
|
-
get entityTypeName() {
|
|
3585
|
-
return this._entityTypeName;
|
|
3586
|
-
}
|
|
3587
|
-
set entityTypeName(value) {
|
|
3588
|
-
this._entityTypeName = value;
|
|
3589
|
-
}
|
|
3590
|
-
get languageCode() {
|
|
3591
|
-
return this._languageCode;
|
|
3592
|
-
}
|
|
3593
|
-
set languageCode(value) {
|
|
3594
|
-
this._languageCode = value;
|
|
3595
|
-
}
|
|
3596
|
-
get pageToken() {
|
|
3597
|
-
return this._pageToken;
|
|
3598
|
-
}
|
|
3599
|
-
set pageToken(value) {
|
|
3600
|
-
this._pageToken = value;
|
|
3601
|
-
}
|
|
3602
|
-
get sortByField() {
|
|
3603
|
-
return this._sortByField;
|
|
3604
|
-
}
|
|
3605
|
-
set sortByField(value) {
|
|
3606
|
-
this._sortByField = value;
|
|
3607
|
-
}
|
|
3608
|
-
get searchByPattern() {
|
|
3609
|
-
return this._searchByPattern;
|
|
3610
|
-
}
|
|
3611
|
-
set searchByPattern(value) {
|
|
3612
|
-
this._searchByPattern = value;
|
|
3613
|
-
}
|
|
3614
|
-
/**
|
|
3615
|
-
* Serialize message to binary data
|
|
3616
|
-
* @param instance message instance
|
|
3617
|
-
*/
|
|
3618
|
-
serializeBinary() {
|
|
3619
|
-
const writer = new BinaryWriter();
|
|
3620
|
-
ListEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
3621
|
-
return writer.getResultBuffer();
|
|
3622
|
-
}
|
|
3623
|
-
/**
|
|
3624
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3625
|
-
*/
|
|
3626
|
-
toObject() {
|
|
3627
|
-
return {
|
|
3628
|
-
entityTypeName: this.entityTypeName,
|
|
3629
|
-
languageCode: this.languageCode,
|
|
3630
|
-
pageToken: this.pageToken,
|
|
3631
|
-
sortByField: this.sortByField ? this.sortByField.toObject() : undefined,
|
|
3632
|
-
searchByPattern: this.searchByPattern
|
|
3633
|
-
};
|
|
3634
|
-
}
|
|
3635
|
-
/**
|
|
3636
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3637
|
-
*/
|
|
3638
|
-
toJSON() {
|
|
3639
|
-
return this.toObject();
|
|
3640
|
-
}
|
|
3641
|
-
/**
|
|
3642
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3643
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3644
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3645
|
-
*/
|
|
3646
|
-
toProtobufJSON(
|
|
3647
|
-
// @ts-ignore
|
|
3648
|
-
options) {
|
|
3649
|
-
return {
|
|
3650
|
-
entityTypeName: this.entityTypeName,
|
|
3651
|
-
languageCode: this.languageCode,
|
|
3652
|
-
pageToken: this.pageToken,
|
|
3653
|
-
sortByField: this.sortByField
|
|
3654
|
-
? this.sortByField.toProtobufJSON(options)
|
|
3655
|
-
: null,
|
|
3656
|
-
searchByPattern: this.searchByPattern
|
|
3657
|
-
};
|
|
3658
|
-
}
|
|
3659
|
-
}
|
|
3660
|
-
/**
|
|
3661
|
-
* Message implementation for ondewo.nlu.ListEntitiesResponse
|
|
3662
|
-
*/
|
|
3663
|
-
export class ListEntitiesResponse {
|
|
3664
|
-
static { this.id = 'ondewo.nlu.ListEntitiesResponse'; }
|
|
3665
|
-
/**
|
|
3666
|
-
* Deserialize binary data to message
|
|
3667
|
-
* @param instance message instance
|
|
3668
|
-
*/
|
|
3669
|
-
static deserializeBinary(bytes) {
|
|
3670
|
-
const instance = new ListEntitiesResponse();
|
|
3671
|
-
ListEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3672
|
-
return instance;
|
|
3673
|
-
}
|
|
3674
|
-
/**
|
|
3675
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3676
|
-
* @param _instance message instance
|
|
3677
|
-
*/
|
|
3678
|
-
static refineValues(_instance) {
|
|
3679
|
-
_instance.entities = _instance.entities || [];
|
|
3680
|
-
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
3681
|
-
}
|
|
3682
|
-
/**
|
|
3683
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3684
|
-
* @param _instance message instance
|
|
3685
|
-
* @param _reader binary reader instance
|
|
3686
|
-
*/
|
|
3687
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3688
|
-
while (_reader.nextField()) {
|
|
3689
|
-
if (_reader.isEndGroup())
|
|
3690
|
-
break;
|
|
3691
|
-
switch (_reader.getFieldNumber()) {
|
|
3692
|
-
case 1:
|
|
3693
|
-
const messageInitializer1 = new EntityType.Entity();
|
|
3694
|
-
_reader.readMessage(messageInitializer1, EntityType.Entity.deserializeBinaryFromReader);
|
|
3695
|
-
(_instance.entities = _instance.entities || []).push(messageInitializer1);
|
|
3696
|
-
break;
|
|
3697
|
-
case 2:
|
|
3698
|
-
_instance.nextPageToken = _reader.readString();
|
|
3699
|
-
break;
|
|
3700
|
-
default:
|
|
3701
|
-
_reader.skipField();
|
|
3702
|
-
}
|
|
3703
|
-
}
|
|
3704
|
-
ListEntitiesResponse.refineValues(_instance);
|
|
3705
|
-
}
|
|
3706
|
-
/**
|
|
3707
|
-
* Serializes a message to binary format using provided binary reader
|
|
3708
|
-
* @param _instance message instance
|
|
3709
|
-
* @param _writer binary writer instance
|
|
3710
|
-
*/
|
|
3711
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3712
|
-
if (_instance.entities && _instance.entities.length) {
|
|
3713
|
-
_writer.writeRepeatedMessage(1, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
3714
|
-
}
|
|
3715
|
-
if (_instance.nextPageToken) {
|
|
3716
|
-
_writer.writeString(2, _instance.nextPageToken);
|
|
3717
|
-
}
|
|
3718
|
-
}
|
|
3719
|
-
/**
|
|
3720
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3721
|
-
* @param _value initial values object or instance of ListEntitiesResponse to deeply clone from
|
|
3722
|
-
*/
|
|
3723
|
-
constructor(_value) {
|
|
3724
|
-
_value = _value || {};
|
|
3725
|
-
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
3726
|
-
this.nextPageToken = _value.nextPageToken;
|
|
3727
|
-
ListEntitiesResponse.refineValues(this);
|
|
3728
|
-
}
|
|
3729
|
-
get entities() {
|
|
3730
|
-
return this._entities;
|
|
3731
|
-
}
|
|
3732
|
-
set entities(value) {
|
|
3733
|
-
this._entities = value;
|
|
3734
|
-
}
|
|
3735
|
-
get nextPageToken() {
|
|
3736
|
-
return this._nextPageToken;
|
|
3737
|
-
}
|
|
3738
|
-
set nextPageToken(value) {
|
|
3739
|
-
this._nextPageToken = value;
|
|
3740
|
-
}
|
|
3741
|
-
/**
|
|
3742
|
-
* Serialize message to binary data
|
|
3743
|
-
* @param instance message instance
|
|
3744
|
-
*/
|
|
3745
|
-
serializeBinary() {
|
|
3746
|
-
const writer = new BinaryWriter();
|
|
3747
|
-
ListEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
3748
|
-
return writer.getResultBuffer();
|
|
3749
|
-
}
|
|
3750
|
-
/**
|
|
3751
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3752
|
-
*/
|
|
3753
|
-
toObject() {
|
|
3754
|
-
return {
|
|
3755
|
-
entities: (this.entities || []).map(m => m.toObject()),
|
|
3756
|
-
nextPageToken: this.nextPageToken
|
|
3757
|
-
};
|
|
3758
|
-
}
|
|
3759
|
-
/**
|
|
3760
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3761
|
-
*/
|
|
3762
|
-
toJSON() {
|
|
3763
|
-
return this.toObject();
|
|
3764
|
-
}
|
|
3765
|
-
/**
|
|
3766
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3767
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3768
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3769
|
-
*/
|
|
3770
|
-
toProtobufJSON(
|
|
3771
|
-
// @ts-ignore
|
|
3772
|
-
options) {
|
|
3773
|
-
return {
|
|
3774
|
-
entities: (this.entities || []).map(m => m.toProtobufJSON(options)),
|
|
3775
|
-
nextPageToken: this.nextPageToken
|
|
3776
|
-
};
|
|
3777
|
-
}
|
|
3778
|
-
}
|
|
3779
|
-
/**
|
|
3780
|
-
* Message implementation for ondewo.nlu.EntityValueSorting
|
|
3781
|
-
*/
|
|
3782
|
-
export class EntityValueSorting {
|
|
3783
|
-
static { this.id = 'ondewo.nlu.EntityValueSorting'; }
|
|
3784
|
-
/**
|
|
3785
|
-
* Deserialize binary data to message
|
|
3786
|
-
* @param instance message instance
|
|
3787
|
-
*/
|
|
3788
|
-
static deserializeBinary(bytes) {
|
|
3789
|
-
const instance = new EntityValueSorting();
|
|
3790
|
-
EntityValueSorting.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3791
|
-
return instance;
|
|
3792
|
-
}
|
|
3793
|
-
/**
|
|
3794
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3795
|
-
* @param _instance message instance
|
|
3796
|
-
*/
|
|
3797
|
-
static refineValues(_instance) {
|
|
3798
|
-
_instance.sortingField = _instance.sortingField || 0;
|
|
3799
|
-
_instance.sortingMode = _instance.sortingMode || 0;
|
|
3800
|
-
}
|
|
3801
|
-
/**
|
|
3802
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3803
|
-
* @param _instance message instance
|
|
3804
|
-
* @param _reader binary reader instance
|
|
3805
|
-
*/
|
|
3806
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3807
|
-
while (_reader.nextField()) {
|
|
3808
|
-
if (_reader.isEndGroup())
|
|
3809
|
-
break;
|
|
3810
|
-
switch (_reader.getFieldNumber()) {
|
|
3811
|
-
case 7:
|
|
3812
|
-
_instance.sortingField = _reader.readEnum();
|
|
3813
|
-
break;
|
|
3814
|
-
case 8:
|
|
3815
|
-
_instance.sortingMode = _reader.readEnum();
|
|
3816
|
-
break;
|
|
3817
|
-
default:
|
|
3818
|
-
_reader.skipField();
|
|
3819
|
-
}
|
|
3820
|
-
}
|
|
3821
|
-
EntityValueSorting.refineValues(_instance);
|
|
3822
|
-
}
|
|
3823
|
-
/**
|
|
3824
|
-
* Serializes a message to binary format using provided binary reader
|
|
3825
|
-
* @param _instance message instance
|
|
3826
|
-
* @param _writer binary writer instance
|
|
3827
|
-
*/
|
|
3828
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3829
|
-
if (_instance.sortingField) {
|
|
3830
|
-
_writer.writeEnum(7, _instance.sortingField);
|
|
3831
|
-
}
|
|
3832
|
-
if (_instance.sortingMode) {
|
|
3833
|
-
_writer.writeEnum(8, _instance.sortingMode);
|
|
3834
|
-
}
|
|
3835
|
-
}
|
|
3836
|
-
/**
|
|
3837
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3838
|
-
* @param _value initial values object or instance of EntityValueSorting to deeply clone from
|
|
3839
|
-
*/
|
|
3840
|
-
constructor(_value) {
|
|
3841
|
-
_value = _value || {};
|
|
3842
|
-
this.sortingField = _value.sortingField;
|
|
3843
|
-
this.sortingMode = _value.sortingMode;
|
|
3844
|
-
EntityValueSorting.refineValues(this);
|
|
3845
|
-
}
|
|
3846
|
-
get sortingField() {
|
|
3847
|
-
return this._sortingField;
|
|
3848
|
-
}
|
|
3849
|
-
set sortingField(value) {
|
|
3850
|
-
this._sortingField = value;
|
|
3851
|
-
}
|
|
3852
|
-
get sortingMode() {
|
|
3853
|
-
return this._sortingMode;
|
|
3854
|
-
}
|
|
3855
|
-
set sortingMode(value) {
|
|
3856
|
-
this._sortingMode = value;
|
|
3857
|
-
}
|
|
3858
|
-
/**
|
|
3859
|
-
* Serialize message to binary data
|
|
3860
|
-
* @param instance message instance
|
|
3861
|
-
*/
|
|
3862
|
-
serializeBinary() {
|
|
3863
|
-
const writer = new BinaryWriter();
|
|
3864
|
-
EntityValueSorting.serializeBinaryToWriter(this, writer);
|
|
3865
|
-
return writer.getResultBuffer();
|
|
3866
|
-
}
|
|
3867
|
-
/**
|
|
3868
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3869
|
-
*/
|
|
3870
|
-
toObject() {
|
|
3871
|
-
return {
|
|
3872
|
-
sortingField: this.sortingField,
|
|
3873
|
-
sortingMode: this.sortingMode
|
|
3874
|
-
};
|
|
3875
|
-
}
|
|
3876
|
-
/**
|
|
3877
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3878
|
-
*/
|
|
3879
|
-
toJSON() {
|
|
3880
|
-
return this.toObject();
|
|
3881
|
-
}
|
|
3882
|
-
/**
|
|
3883
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3884
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3885
|
-
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3886
|
-
*/
|
|
3887
|
-
toProtobufJSON(
|
|
3888
|
-
// @ts-ignore
|
|
3889
|
-
options) {
|
|
3890
|
-
return {
|
|
3891
|
-
sortingField: EntityValueSorting.EntityValueSortingField[this.sortingField === null || this.sortingField === undefined
|
|
3892
|
-
? 0
|
|
3893
|
-
: this.sortingField],
|
|
3894
|
-
sortingMode: ondewoNlu009.SortingMode[this.sortingMode === null || this.sortingMode === undefined
|
|
3895
|
-
? 0
|
|
3896
|
-
: this.sortingMode]
|
|
3897
|
-
};
|
|
3898
|
-
}
|
|
3899
|
-
}
|
|
3900
|
-
(function (EntityValueSorting) {
|
|
3901
|
-
let EntityValueSortingField;
|
|
3902
|
-
(function (EntityValueSortingField) {
|
|
3903
|
-
EntityValueSortingField[EntityValueSortingField["NO_ENTITY_VALUE_SORTING"] = 0] = "NO_ENTITY_VALUE_SORTING";
|
|
3904
|
-
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_DISPLAY_NAME"] = 1] = "SORT_ENTITY_VALUE_BY_DISPLAY_NAME";
|
|
3905
|
-
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_VALUE"] = 2] = "SORT_ENTITY_VALUE_BY_VALUE";
|
|
3906
|
-
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_SYNONYM_COUNT"] = 3] = "SORT_ENTITY_VALUE_BY_SYNONYM_COUNT";
|
|
3907
|
-
})(EntityValueSortingField = EntityValueSorting.EntityValueSortingField || (EntityValueSorting.EntityValueSortingField = {}));
|
|
3908
|
-
})(EntityValueSorting || (EntityValueSorting = {}));
|
|
3909
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXR5cGUucGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hcGkvb25kZXdvL25sdS9lbnRpdHktdHlwZS5wYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBR3pFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsTUFBTSxDQUFOLElBQVksY0FNWDtBQU5ELFdBQVksY0FBYztJQUN4QixtR0FBZ0MsQ0FBQTtJQUNoQyxxRkFBeUIsQ0FBQTtJQUN6QiwyRkFBNEIsQ0FBQTtJQUM1QiwyRkFBNEIsQ0FBQTtJQUM1QiwyRkFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBTlcsY0FBYyxLQUFkLGNBQWMsUUFNekI7QUFDRCxNQUFNLENBQU4sSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLG1GQUFvQixDQUFBO0lBQ3BCLDJGQUF3QixDQUFBO0lBQ3hCLHFHQUE2QixDQUFBO0FBQy9CLENBQUMsRUFKVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSTdCO0FBQ0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTthQUNkLE9BQUUsR0FBRyx1QkFBdUIsQ0FBQztJQUVwQzs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNsQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxRQUFRLENBQUM7SUFD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S0FBbEIsa0JBQWtCLFFBc0IvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbi8vXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEVcbi8vIERPIE5PVCBNT0RJRlkgSVQhIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIExPU1RcbmltcG9ydCB7XG4gIEdycGNNZXNzYWdlLFxuICBSZWN1cnNpdmVQYXJ0aWFsLFxuICBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbn0gZnJvbSAnQG5neC1ncnBjL2NvbW1vbic7XG5pbXBvcnQgeyBCaW5hcnlSZWFkZXIsIEJpbmFyeVdyaXRlciwgQnl0ZVNvdXJjZSB9IGZyb20gJ2dvb2dsZS1wcm90b2J1Zic7XG5pbXBvcnQgKiBhcyBnb29nbGVBcGkwMDAgZnJvbSAnLi4vLi4vZ29vZ2xlL2FwaS9odHRwLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAxIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAyIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAzIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZUFwaTAwNCBmcm9tICcuLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDA1IGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDA2IGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVJwYzAwNyBmcm9tICcuLi8uLi9nb29nbGUvcnBjL3N0YXR1cy5wYic7XG5pbXBvcnQgKiBhcyBvbmRld29ObHUwMDggZnJvbSAnLi4vLi4vb25kZXdvL25sdS9vcGVyYXRpb24tbWV0YWRhdGEucGInO1xuaW1wb3J0ICogYXMgb25kZXdvTmx1MDA5IGZyb20gJy4uLy4uL29uZGV3by9ubHUvY29tbW9uLnBiJztcbmltcG9ydCAqIGFzIG9uZGV3b05sdTAxMCBmcm9tICcuLi8uLi9vbmRld28vbmx1L29wZXJhdGlvbnMucGInO1xuZXhwb3J0IGVudW0gRW50aXR5VHlwZVZpZXcge1xuICBFTlRJVFlfVFlQRV9WSUVXX1VOU1BFQ0lGSUVEID0gMCxcbiAgRU5USVRZX1RZUEVfVklFV19GVUxMID0gMSxcbiAgRU5USVRZX1RZUEVfVklFV19QQVJUSUFMID0gMixcbiAgRU5USVRZX1RZUEVfVklFV19TSEFMTE9XID0gMyxcbiAgRU5USVRZX1RZUEVfVklFV19NSU5JTVVNID0gNFxufVxuZXhwb3J0IGVudW0gRW50aXR5VHlwZUNhdGVnb3J5IHtcbiAgQUxMX0VOVElUWV9UWVBFUyA9IDAsXG4gIERFRkFVTFRfRU5USVRZX1RZUEVTID0gMSxcbiAgVVNFUl9ERUZJTkVEX0VOVElUWV9UWVBFUyA9IDJcbn1cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlUeXBlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5FbnRpdHlUeXBlJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgIEVudGl0eVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBFbnRpdHlUeXBlKSB7XG4gICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgICBfaW5zdGFuY2UuZGlzcGxheU5hbWUgPSBfaW5zdGFuY2UuZGlzcGxheU5hbWUgfHwgJyc7XG4gICAgX2luc3RhbmNlLmtpbmQgPSBfaW5zdGFuY2Uua2luZCB8fCAwO1xuICAgIF9pbnN0YW5jZS5hdXRvRXhwYW5zaW9uTW9kZSA9IF9pbnN0YW5jZS5hdXRvRXhwYW5zaW9uTW9kZSB8fCAwO1xuICAgIF9pbnN0YW5jZS5lbnRpdGllcyA9IF9pbnN0YW5jZS5lbnRpdGllcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlDb3VudCA9IF9pbnN0YW5jZS5lbnRpdHlDb3VudCB8fCAwO1xuICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfaW5zdGFuY2Uuc3RhdHVzIHx8IDA7XG4gICAgX2luc3RhbmNlLnN5bm9ueW1Db3VudCA9IF9pbnN0YW5jZS5zeW5vbnltQ291bnQgfHwgMDtcbiAgICBfaW5zdGFuY2UuY3JlYXRlZEF0ID0gX2luc3RhbmNlLmNyZWF0ZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLm1vZGlmaWVkQXQgPSBfaW5zdGFuY2UubW9kaWZpZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLmNyZWF0ZWRCeSA9IF9pbnN0YW5jZS5jcmVhdGVkQnkgfHwgJyc7XG4gICAgX2luc3RhbmNlLm1vZGlmaWVkQnkgPSBfaW5zdGFuY2UubW9kaWZpZWRCeSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGUsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5kaXNwbGF5TmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmtpbmQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UuYXV0b0V4cGFuc2lvbk1vZGUgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXI2ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjYsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXRpZXMgPSBfaW5zdGFuY2UuZW50aXRpZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXI2XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlDb3VudCA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBfaW5zdGFuY2Uuc3lub255bUNvdW50ID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEF0ID0gbmV3IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgX2luc3RhbmNlLm1vZGlmaWVkQXQgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5tb2RpZmllZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRCeSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIF9pbnN0YW5jZS5tb2RpZmllZEJ5ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBFbnRpdHlUeXBlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRW50aXR5VHlwZSwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5uYW1lKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5kaXNwbGF5TmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmtpbmQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDMsIF9pbnN0YW5jZS5raW5kKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5hdXRvRXhwYW5zaW9uTW9kZSkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNCwgX2luc3RhbmNlLmF1dG9FeHBhbnNpb25Nb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdGllcyAmJiBfaW5zdGFuY2UuZW50aXRpZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICA2LFxuICAgICAgICBfaW5zdGFuY2UuZW50aXRpZXMgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEwLCBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbik7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5Q291bnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQzMigxMSwgX2luc3RhbmNlLmVudGl0eUNvdW50KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zdGF0dXMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDEyLCBfaW5zdGFuY2Uuc3RhdHVzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zeW5vbnltQ291bnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQzMigxMywgX2luc3RhbmNlLnN5bm9ueW1Db3VudCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuY3JlYXRlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTQsXG4gICAgICAgIF9pbnN0YW5jZS5jcmVhdGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubW9kaWZpZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDE1LFxuICAgICAgICBfaW5zdGFuY2UubW9kaWZpZWRBdCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5jcmVhdGVkQnkpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTYsIF9pbnN0YW5jZS5jcmVhdGVkQnkpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm1vZGlmaWVkQnkpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTcsIF9pbnN0YW5jZS5tb2RpZmllZEJ5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2tpbmQ6IEVudGl0eVR5cGUuS2luZDtcbiAgcHJpdmF0ZSBfYXV0b0V4cGFuc2lvbk1vZGU6IEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGU7XG4gIHByaXZhdGUgX2VudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHlbXTtcbiAgcHJpdmF0ZSBfbmV4dFBhZ2VUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlIF9lbnRpdHlDb3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9zdGF0dXM6IEVudGl0eVR5cGUuRW50aXR5VHlwZVN0YXR1cztcbiAgcHJpdmF0ZSBfc3lub255bUNvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX2NyZWF0ZWRBdD86IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfbW9kaWZpZWRBdD86IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIHByaXZhdGUgX21vZGlmaWVkQnk6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVudGl0eVR5cGUgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5VHlwZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5uYW1lID0gX3ZhbHVlLm5hbWU7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IF92YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICB0aGlzLmtpbmQgPSBfdmFsdWUua2luZDtcbiAgICB0aGlzLmF1dG9FeHBhbnNpb25Nb2RlID0gX3ZhbHVlLmF1dG9FeHBhbnNpb25Nb2RlO1xuICAgIHRoaXMuZW50aXRpZXMgPSAoX3ZhbHVlLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBuZXcgRW50aXR5VHlwZS5FbnRpdHkobSkpO1xuICAgIHRoaXMubmV4dFBhZ2VUb2tlbiA9IF92YWx1ZS5uZXh0UGFnZVRva2VuO1xuICAgIHRoaXMuZW50aXR5Q291bnQgPSBfdmFsdWUuZW50aXR5Q291bnQ7XG4gICAgdGhpcy5zdGF0dXMgPSBfdmFsdWUuc3RhdHVzO1xuICAgIHRoaXMuc3lub255bUNvdW50ID0gX3ZhbHVlLnN5bm9ueW1Db3VudDtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IF92YWx1ZS5jcmVhdGVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcChfdmFsdWUuY3JlYXRlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RpZmllZEF0ID0gX3ZhbHVlLm1vZGlmaWVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcChfdmFsdWUubW9kaWZpZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gX3ZhbHVlLmNyZWF0ZWRCeTtcbiAgICB0aGlzLm1vZGlmaWVkQnkgPSBfdmFsdWUubW9kaWZpZWRCeTtcbiAgICBFbnRpdHlUeXBlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1lO1xuICB9XG4gIHNldCBkaXNwbGF5TmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQga2luZCgpOiBFbnRpdHlUeXBlLktpbmQge1xuICAgIHJldHVybiB0aGlzLl9raW5kO1xuICB9XG4gIHNldCBraW5kKHZhbHVlOiBFbnRpdHlUeXBlLktpbmQpIHtcbiAgICB0aGlzLl9raW5kID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGF1dG9FeHBhbnNpb25Nb2RlKCk6IEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGUge1xuICAgIHJldHVybiB0aGlzLl9hdXRvRXhwYW5zaW9uTW9kZTtcbiAgfVxuICBzZXQgYXV0b0V4cGFuc2lvbk1vZGUodmFsdWU6IEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGUpIHtcbiAgICB0aGlzLl9hdXRvRXhwYW5zaW9uTW9kZSA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdGllcygpOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXRpZXM7XG4gIH1cbiAgc2V0IGVudGl0aWVzKHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXRpZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbmV4dFBhZ2VUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uZXh0UGFnZVRva2VuO1xuICB9XG4gIHNldCBuZXh0UGFnZVRva2VuKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uZXh0UGFnZVRva2VuID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVudGl0eUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eUNvdW50O1xuICB9XG4gIHNldCBlbnRpdHlDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW50aXR5Q291bnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3RhdHVzKCk6IEVudGl0eVR5cGUuRW50aXR5VHlwZVN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuICBzZXQgc3RhdHVzKHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3lub255bUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N5bm9ueW1Db3VudDtcbiAgfVxuICBzZXQgc3lub255bUNvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zeW5vbnltQ291bnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgY3JlYXRlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWRBdDtcbiAgfVxuICBzZXQgY3JlYXRlZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jcmVhdGVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbW9kaWZpZWRBdCgpOiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tb2RpZmllZEF0O1xuICB9XG4gIHNldCBtb2RpZmllZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tb2RpZmllZEF0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGNyZWF0ZWRCeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVkQnk7XG4gIH1cbiAgc2V0IGNyZWF0ZWRCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3JlYXRlZEJ5ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG1vZGlmaWVkQnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kaWZpZWRCeTtcbiAgfVxuICBzZXQgbW9kaWZpZWRCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9kaWZpZWRCeSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEVudGl0eVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRW50aXR5VHlwZS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAga2luZDogdGhpcy5raW5kLFxuICAgICAgYXV0b0V4cGFuc2lvbk1vZGU6IHRoaXMuYXV0b0V4cGFuc2lvbk1vZGUsXG4gICAgICBlbnRpdGllczogKHRoaXMuZW50aXRpZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW4sXG4gICAgICBlbnRpdHlDb3VudDogdGhpcy5lbnRpdHlDb3VudCxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzeW5vbnltQ291bnQ6IHRoaXMuc3lub255bUNvdW50LFxuICAgICAgY3JlYXRlZEF0OiB0aGlzLmNyZWF0ZWRBdCA/IHRoaXMuY3JlYXRlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBtb2RpZmllZEF0OiB0aGlzLm1vZGlmaWVkQXQgPyB0aGlzLm1vZGlmaWVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICBtb2RpZmllZEJ5OiB0aGlzLm1vZGlmaWVkQnlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZGlzcGxheU5hbWUsXG4gICAgICBraW5kOlxuICAgICAgICBFbnRpdHlUeXBlLktpbmRbXG4gICAgICAgICAgdGhpcy5raW5kID09PSBudWxsIHx8IHRoaXMua2luZCA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMua2luZFxuICAgICAgICBdLFxuICAgICAgYXV0b0V4cGFuc2lvbk1vZGU6XG4gICAgICAgIEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGVbXG4gICAgICAgICAgdGhpcy5hdXRvRXhwYW5zaW9uTW9kZSA9PT0gbnVsbCB8fFxuICAgICAgICAgIHRoaXMuYXV0b0V4cGFuc2lvbk1vZGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuYXV0b0V4cGFuc2lvbk1vZGVcbiAgICAgICAgXSxcbiAgICAgIGVudGl0aWVzOiAodGhpcy5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW4sXG4gICAgICBlbnRpdHlDb3VudDogdGhpcy5lbnRpdHlDb3VudCxcbiAgICAgIHN0YXR1czpcbiAgICAgICAgRW50aXR5VHlwZS5FbnRpdHlUeXBlU3RhdHVzW1xuICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBudWxsIHx8IHRoaXMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAwIDogdGhpcy5zdGF0dXNcbiAgICAgICAgXSxcbiAgICAgIHN5bm9ueW1Db3VudDogdGhpcy5zeW5vbnltQ291bnQsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0ID8gdGhpcy5jcmVhdGVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgbW9kaWZpZWRBdDogdGhpcy5tb2RpZmllZEF0XG4gICAgICAgID8gdGhpcy5tb2RpZmllZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICBtb2RpZmllZEJ5OiB0aGlzLm1vZGlmaWVkQnlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEVudGl0eVR5cGUge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVR5cGVcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIGtpbmQ6IEVudGl0eVR5cGUuS2luZDtcbiAgICBhdXRvRXhwYW5zaW9uTW9kZTogRW50aXR5VHlwZS5BdXRvRXhwYW5zaW9uTW9kZTtcbiAgICBlbnRpdGllcz86IEVudGl0eVR5cGUuRW50aXR5LkFzT2JqZWN0W107XG4gICAgbmV4dFBhZ2VUb2tlbjogc3RyaW5nO1xuICAgIGVudGl0eUNvdW50OiBudW1iZXI7XG4gICAgc3RhdHVzOiBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXM7XG4gICAgc3lub255bUNvdW50OiBudW1iZXI7XG4gICAgY3JlYXRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIG1vZGlmaWVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVR5cGVcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIGtpbmQ6IHN0cmluZztcbiAgICBhdXRvRXhwYW5zaW9uTW9kZTogc3RyaW5nO1xuICAgIGVudGl0aWVzOiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBuZXh0UGFnZVRva2VuOiBzdHJpbmc7XG4gICAgZW50aXR5Q291bnQ6IG51bWJlcjtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBzeW5vbnltQ291bnQ6IG51bWJlcjtcbiAgICBjcmVhdGVkQXQ6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgbW9kaWZpZWRBdDogZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBjcmVhdGVkQnk6IHN0cmluZztcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IGVudW0gS2luZCB7XG4gICAgS0lORF9VTlNQRUNJRklFRCA9IDAsXG4gICAgS0lORF9NQVAgPSAxLFxuICAgIEtJTkRfTElTVCA9IDJcbiAgfVxuICBleHBvcnQgZW51bSBFbnRpdHlUeXBlU3RhdHVzIHtcbiAgICBBQ1RJVkUgPSAwLFxuICAgIElOQUNUSVZFID0gMVxuICB9XG4gIGV4cG9ydCBlbnVtIEF1dG9FeHBhbnNpb25Nb2RlIHtcbiAgICBBVVRPX0VYUEFOU0lPTl9NT0RFX1VOU1BFQ0lGSUVEID0gMCxcbiAgICBBVVRPX0VYUEFOU0lPTl9NT0RFX0RFRkFVTFQgPSAxXG4gIH1cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuRW50aXR5VHlwZS5FbnRpdHlcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBFbnRpdHkgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRW50aXR5VHlwZS5FbnRpdHknO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBFbnRpdHkoKTtcbiAgICAgIEVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRW50aXR5KSB7XG4gICAgICBfaW5zdGFuY2UudmFsdWUgPSBfaW5zdGFuY2UudmFsdWUgfHwgJyc7XG4gICAgICBfaW5zdGFuY2Uuc3lub255bXMgPSBfaW5zdGFuY2Uuc3lub255bXMgfHwgW107XG4gICAgICBfaW5zdGFuY2UubmFtZSA9IF9pbnN0YW5jZS5uYW1lIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLmRpc3BsYXlOYW1lID0gX2luc3RhbmNlLmRpc3BsYXlOYW1lIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnN5bm9ueW1Db3VudCA9IF9pbnN0YW5jZS5zeW5vbnltQ291bnQgfHwgMDtcbiAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCA9IF9pbnN0YW5jZS5jcmVhdGVkQXQgfHwgdW5kZWZpbmVkO1xuICAgICAgX2luc3RhbmNlLm1vZGlmaWVkQXQgPSBfaW5zdGFuY2UubW9kaWZpZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgICBfaW5zdGFuY2UuY3JlYXRlZEJ5ID0gX2luc3RhbmNlLmNyZWF0ZWRCeSB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5tb2RpZmllZEJ5ID0gX2luc3RhbmNlLm1vZGlmaWVkQnkgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogRW50aXR5LFxuICAgICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICAgKSB7XG4gICAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgX2luc3RhbmNlLnZhbHVlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAoX2luc3RhbmNlLnN5bm9ueW1zID0gX2luc3RhbmNlLnN5bm9ueW1zIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5uYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZGlzcGxheU5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zeW5vbnltQ291bnQgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAoKTtcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5jcmVhdGVkQXQsXG4gICAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBfaW5zdGFuY2UubW9kaWZpZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAoKTtcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5tb2RpZmllZEF0LFxuICAgICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRCeSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5tb2RpZmllZEJ5ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBFbnRpdHkucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IEVudGl0eSwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgICBpZiAoX2luc3RhbmNlLnZhbHVlKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2Uuc3lub255bXMgJiYgX2luc3RhbmNlLnN5bm9ueW1zLmxlbmd0aCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMiwgX2luc3RhbmNlLnN5bm9ueW1zKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UubmFtZSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMsIF9pbnN0YW5jZS5uYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UuZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5zeW5vbnltQ291bnQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUludDMyKDUsIF9pbnN0YW5jZS5zeW5vbnltQ291bnQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg2LCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuY3JlYXRlZEF0KSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAgIDcsXG4gICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCBhcyBhbnksXG4gICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLm1vZGlmaWVkQXQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgICAgOCxcbiAgICAgICAgICBfaW5zdGFuY2UubW9kaWZpZWRBdCBhcyBhbnksXG4gICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmNyZWF0ZWRCeSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDksIF9pbnN0YW5jZS5jcmVhdGVkQnkpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5tb2RpZmllZEJ5KSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTAsIF9pbnN0YW5jZS5tb2RpZmllZEJ5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3N5bm9ueW1zOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9zeW5vbnltQ291bnQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9sYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICBwcml2YXRlIF9jcmVhdGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXA7XG4gICAgcHJpdmF0ZSBfbW9kaWZpZWRBdD86IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcDtcbiAgICBwcml2YXRlIF9jcmVhdGVkQnk6IHN0cmluZztcbiAgICBwcml2YXRlIF9tb2RpZmllZEJ5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFbnRpdHkgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEVudGl0eS5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMudmFsdWUgPSBfdmFsdWUudmFsdWU7XG4gICAgICB0aGlzLnN5bm9ueW1zID0gKF92YWx1ZS5zeW5vbnltcyB8fCBbXSkuc2xpY2UoKTtcbiAgICAgIHRoaXMubmFtZSA9IF92YWx1ZS5uYW1lO1xuICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IF92YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICAgIHRoaXMuc3lub255bUNvdW50ID0gX3ZhbHVlLnN5bm9ueW1Db3VudDtcbiAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlID0gX3ZhbHVlLmxhbmd1YWdlQ29kZTtcbiAgICAgIHRoaXMuY3JlYXRlZEF0ID0gX3ZhbHVlLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAoX3ZhbHVlLmNyZWF0ZWRBdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1vZGlmaWVkQXQgPSBfdmFsdWUubW9kaWZpZWRBdFxuICAgICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAoX3ZhbHVlLm1vZGlmaWVkQXQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jcmVhdGVkQnkgPSBfdmFsdWUuY3JlYXRlZEJ5O1xuICAgICAgdGhpcy5tb2RpZmllZEJ5ID0gX3ZhbHVlLm1vZGlmaWVkQnk7XG4gICAgICBFbnRpdHkucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzeW5vbnltcygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3lub255bXM7XG4gICAgfVxuICAgIHNldCBzeW5vbnltcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgIHRoaXMuX3N5bm9ueW1zID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5TmFtZTtcbiAgICB9XG4gICAgc2V0IGRpc3BsYXlOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzeW5vbnltQ291bnQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLl9zeW5vbnltQ291bnQ7XG4gICAgfVxuICAgIHNldCBzeW5vbnltQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgICAgdGhpcy5fc3lub255bUNvdW50ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBsYW5ndWFnZUNvZGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUNvZGU7XG4gICAgfVxuICAgIHNldCBsYW5ndWFnZUNvZGUodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fbGFuZ3VhZ2VDb2RlID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBjcmVhdGVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVkQXQ7XG4gICAgfVxuICAgIHNldCBjcmVhdGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY3JlYXRlZEF0ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtb2RpZmllZEF0KCk6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kaWZpZWRBdDtcbiAgICB9XG4gICAgc2V0IG1vZGlmaWVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbW9kaWZpZWRBdCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgY3JlYXRlZEJ5KCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlZEJ5O1xuICAgIH1cbiAgICBzZXQgY3JlYXRlZEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZWRCeSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbW9kaWZpZWRCeSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmaWVkQnk7XG4gICAgfVxuICAgIHNldCBtb2RpZmllZEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX21vZGlmaWVkQnkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgICAgRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IEVudGl0eS5Bc09iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgc3lub255bXM6ICh0aGlzLnN5bm9ueW1zIHx8IFtdKS5zbGljZSgpLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgICBzeW5vbnltQ291bnQ6IHRoaXMuc3lub255bUNvdW50LFxuICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0ID8gdGhpcy5jcmVhdGVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgbW9kaWZpZWRBdDogdGhpcy5tb2RpZmllZEF0ID8gdGhpcy5tb2RpZmllZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICAgIG1vZGlmaWVkQnk6IHRoaXMubW9kaWZpZWRCeVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBFbnRpdHkuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgIHN5bm9ueW1zOiAodGhpcy5zeW5vbnltcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgc3lub255bUNvdW50OiB0aGlzLnN5bm9ueW1Db3VudCxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgICAgY3JlYXRlZEF0OiB0aGlzLmNyZWF0ZWRBdFxuICAgICAgICAgID8gdGhpcy5jcmVhdGVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIG1vZGlmaWVkQXQ6IHRoaXMubW9kaWZpZWRBdFxuICAgICAgICAgID8gdGhpcy5tb2RpZmllZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBjcmVhdGVkQnk6IHRoaXMuY3JlYXRlZEJ5LFxuICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLm1vZGlmaWVkQnlcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgRW50aXR5IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgc3lub255bXM6IHN0cmluZ1tdO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICAgIHN5bm9ueW1Db3VudDogbnVtYmVyO1xuICAgICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgICBjcmVhdGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgICBtb2RpZmllZEF0PzogZ29vZ2xlUHJvdG9idWYwMDMuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgc3lub255bXM6IHN0cmluZ1tdO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICAgIHN5bm9ueW1Db3VudDogbnVtYmVyO1xuICAgICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgICBjcmVhdGVkQXQ6IGdvb2dsZVByb3RvYnVmMDAzLlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgICBtb2RpZmllZEF0OiBnb29nbGVQcm90b2J1ZjAwMy5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5MaXN0RW50aXR5VHlwZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5MaXN0RW50aXR5VHlwZXNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTGlzdEVudGl0eVR5cGVzUmVxdWVzdCgpO1xuICAgIExpc3RFbnRpdHlUeXBlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnBhcmVudCA9IF9pbnN0YW5jZS5wYXJlbnQgfHwgJyc7XG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLnBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5wYWdlVG9rZW4gfHwgJyc7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3IHx8IDA7XG4gICAgX2luc3RhbmNlLmZpbHRlckJ5Q2F0ZWdvcnkgPSBfaW5zdGFuY2UuZmlsdGVyQnlDYXRlZ29yeSB8fCAwO1xuICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCA9IF9pbnN0YW5jZS5zb3J0QnlGaWVsZCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXJlbnQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYWdlVG9rZW4gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJCeUNhdGVnb3J5ID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkID0gbmV3IEVudGl0eVR5cGVTb3J0aW5nKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCxcbiAgICAgICAgICAgIEVudGl0eVR5cGVTb3J0aW5nLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdEVudGl0eVR5cGVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnBhcmVudCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2VUb2tlbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UucGFnZVRva2VuKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNSwgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJCeUNhdGVnb3J5KSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSg2LCBfaW5zdGFuY2UuZmlsdGVyQnlDYXRlZ29yeSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydEJ5RmllbGQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA3LFxuICAgICAgICBfaW5zdGFuY2Uuc29ydEJ5RmllbGQgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlU29ydGluZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJlbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlIF9lbnRpdHlUeXBlVmlldzogRW50aXR5VHlwZVZpZXc7XG4gIHByaXZhdGUgX2ZpbHRlckJ5Q2F0ZWdvcnk6IEVudGl0eVR5cGVDYXRlZ29yeTtcbiAgcHJpdmF0ZSBfc29ydEJ5RmllbGQ/OiBFbnRpdHlUeXBlU29ydGluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIExpc3RFbnRpdHlUeXBlc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TGlzdEVudGl0eVR5cGVzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5wYXJlbnQgPSBfdmFsdWUucGFyZW50O1xuICAgIHRoaXMubGFuZ3VhZ2VDb2RlID0gX3ZhbHVlLmxhbmd1YWdlQ29kZTtcbiAgICB0aGlzLnBhZ2VUb2tlbiA9IF92YWx1ZS5wYWdlVG9rZW47XG4gICAgdGhpcy5lbnRpdHlUeXBlVmlldyA9IF92YWx1ZS5lbnRpdHlUeXBlVmlldztcbiAgICB0aGlzLmZpbHRlckJ5Q2F0ZWdvcnkgPSBfdmFsdWUuZmlsdGVyQnlDYXRlZ29yeTtcbiAgICB0aGlzLnNvcnRCeUZpZWxkID0gX3ZhbHVlLnNvcnRCeUZpZWxkXG4gICAgICA/IG5ldyBFbnRpdHlUeXBlU29ydGluZyhfdmFsdWUuc29ydEJ5RmllbGQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFyZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuICBzZXQgcGFyZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ29kZTtcbiAgfVxuICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYW5ndWFnZUNvZGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFnZVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUb2tlbjtcbiAgfVxuICBzZXQgcGFnZVRva2VuKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdlVG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZVZpZXcoKTogRW50aXR5VHlwZVZpZXcge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlVmlldztcbiAgfVxuICBzZXQgZW50aXR5VHlwZVZpZXcodmFsdWU6IEVudGl0eVR5cGVWaWV3KSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZVZpZXcgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyQnlDYXRlZ29yeSgpOiBFbnRpdHlUeXBlQ2F0ZWdvcnkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJCeUNhdGVnb3J5O1xuICB9XG4gIHNldCBmaWx0ZXJCeUNhdGVnb3J5KHZhbHVlOiBFbnRpdHlUeXBlQ2F0ZWdvcnkpIHtcbiAgICB0aGlzLl9maWx0ZXJCeUNhdGVnb3J5ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHNvcnRCeUZpZWxkKCk6IEVudGl0eVR5cGVTb3J0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEJ5RmllbGQ7XG4gIH1cbiAgc2V0IHNvcnRCeUZpZWxkKHZhbHVlOiBFbnRpdHlUeXBlU29ydGluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NvcnRCeUZpZWxkID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgTGlzdEVudGl0eVR5cGVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgZW50aXR5VHlwZVZpZXc6IHRoaXMuZW50aXR5VHlwZVZpZXcsXG4gICAgICBmaWx0ZXJCeUNhdGVnb3J5OiB0aGlzLmZpbHRlckJ5Q2F0ZWdvcnksXG4gICAgICBzb3J0QnlGaWVsZDogdGhpcy5zb3J0QnlGaWVsZCA/IHRoaXMuc29ydEJ5RmllbGQudG9PYmplY3QoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IExpc3RFbnRpdHlUeXBlc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHBhZ2VUb2tlbjogdGhpcy5wYWdlVG9rZW4sXG4gICAgICBlbnRpdHlUeXBlVmlldzpcbiAgICAgICAgRW50aXR5VHlwZVZpZXdbXG4gICAgICAgICAgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gbnVsbCB8fCB0aGlzLmVudGl0eVR5cGVWaWV3ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLmVudGl0eVR5cGVWaWV3XG4gICAgICAgIF0sXG4gICAgICBmaWx0ZXJCeUNhdGVnb3J5OlxuICAgICAgICBFbnRpdHlUeXBlQ2F0ZWdvcnlbXG4gICAgICAgICAgdGhpcy5maWx0ZXJCeUNhdGVnb3J5ID09PSBudWxsIHx8IHRoaXMuZmlsdGVyQnlDYXRlZ29yeSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJCeUNhdGVnb3J5XG4gICAgICAgIF0sXG4gICAgICBzb3J0QnlGaWVsZDogdGhpcy5zb3J0QnlGaWVsZFxuICAgICAgICA/IHRoaXMuc29ydEJ5RmllbGQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBwYXJlbnQ6IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICBwYWdlVG9rZW46IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldzogRW50aXR5VHlwZVZpZXc7XG4gICAgZmlsdGVyQnlDYXRlZ29yeTogRW50aXR5VHlwZUNhdGVnb3J5O1xuICAgIHNvcnRCeUZpZWxkPzogRW50aXR5VHlwZVNvcnRpbmcuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgTGlzdEVudGl0eVR5cGVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgcGFyZW50OiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgcGFnZVRva2VuOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZVZpZXc6IHN0cmluZztcbiAgICBmaWx0ZXJCeUNhdGVnb3J5OiBzdHJpbmc7XG4gICAgc29ydEJ5RmllbGQ6IEVudGl0eVR5cGVTb3J0aW5nLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuTGlzdEVudGl0eVR5cGVzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5MaXN0RW50aXR5VHlwZXNSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlKCk7XG4gICAgTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBMaXN0RW50aXR5VHlwZXNSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBFbnRpdHlUeXBlKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS5lbnRpdHlUeXBlcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjFcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLm5leHRQYWdlVG9rZW4gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZXMgJiYgX2luc3RhbmNlLmVudGl0eVR5cGVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVzIGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnRpdHlUeXBlcz86IEVudGl0eVR5cGVbXTtcbiAgcHJpdmF0ZSBfbmV4dFBhZ2VUb2tlbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TGlzdEVudGl0eVR5cGVzUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZW50aXR5VHlwZXMgPSAoX3ZhbHVlLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBuZXcgRW50aXR5VHlwZShtKSk7XG4gICAgdGhpcy5uZXh0UGFnZVRva2VuID0gX3ZhbHVlLm5leHRQYWdlVG9rZW47XG4gICAgTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlcygpOiBFbnRpdHlUeXBlW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlcztcbiAgfVxuICBzZXQgZW50aXR5VHlwZXModmFsdWU6IEVudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVR5cGVzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG5leHRQYWdlVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmV4dFBhZ2VUb2tlbjtcbiAgfVxuICBzZXQgbmV4dFBhZ2VUb2tlbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmV4dFBhZ2VUb2tlbiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZXM6ICh0aGlzLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpLFxuICAgICAgbmV4dFBhZ2VUb2tlbjogdGhpcy5uZXh0UGFnZVRva2VuXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlczogKHRoaXMuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpLFxuICAgICAgbmV4dFBhZ2VUb2tlbjogdGhpcy5uZXh0UGFnZVRva2VuXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBMaXN0RW50aXR5VHlwZXNSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgTGlzdEVudGl0eVR5cGVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eVR5cGVzPzogRW50aXR5VHlwZS5Bc09iamVjdFtdO1xuICAgIG5leHRQYWdlVG9rZW46IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXR5VHlwZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZXM6IEVudGl0eVR5cGUuQXNQcm90b2J1ZkpTT05bXSB8IG51bGw7XG4gICAgbmV4dFBhZ2VUb2tlbjogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5HZXRFbnRpdHlUeXBlUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgR2V0RW50aXR5VHlwZVJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkdldEVudGl0eVR5cGVSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgR2V0RW50aXR5VHlwZVJlcXVlc3QoKTtcbiAgICBHZXRFbnRpdHlUeXBlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEdldEVudGl0eVR5cGVSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX2luc3RhbmNlLmxhbmd1YWdlQ29kZSB8fCAnJztcbiAgICBfaW5zdGFuY2UucGFnZVRva2VuID0gX2luc3RhbmNlLnBhZ2VUb2tlbiB8fCAnJztcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgPSBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldEVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5uYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVRva2VuID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBHZXRFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEdldEVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLm5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhbmd1YWdlQ29kZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYWdlVG9rZW4pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNSwgX2luc3RhbmNlLnBhZ2VUb2tlbik7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDYsIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFnZVRva2VuOiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGVWaWV3OiBFbnRpdHlUeXBlVmlldztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldEVudGl0eVR5cGVSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEdldEVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWUgPSBfdmFsdWUubmFtZTtcbiAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IF92YWx1ZS5sYW5ndWFnZUNvZGU7XG4gICAgdGhpcy5wYWdlVG9rZW4gPSBfdmFsdWUucGFnZVRva2VuO1xuICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPSBfdmFsdWUuZW50aXR5VHlwZVZpZXc7XG4gICAgR2V0RW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ29kZTtcbiAgfVxuICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYW5ndWFnZUNvZGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFnZVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUb2tlbjtcbiAgfVxuICBzZXQgcGFnZVRva2VuKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdlVG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZVZpZXcoKTogRW50aXR5VHlwZVZpZXcge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlVmlldztcbiAgfVxuICBzZXQgZW50aXR5VHlwZVZpZXcodmFsdWU6IEVudGl0eVR5cGVWaWV3KSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZVZpZXcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBHZXRFbnRpdHlUeXBlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBHZXRFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgZW50aXR5VHlwZVZpZXc6IHRoaXMuZW50aXR5VHlwZVZpZXdcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBHZXRFbnRpdHlUeXBlUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgZW50aXR5VHlwZVZpZXc6XG4gICAgICAgIEVudGl0eVR5cGVWaWV3W1xuICAgICAgICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IG51bGwgfHwgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgICAgICBdXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBHZXRFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgR2V0RW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICBwYWdlVG9rZW46IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldzogRW50aXR5VHlwZVZpZXc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgR2V0RW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICBwYWdlVG9rZW46IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5DcmVhdGVFbnRpdHlUeXBlUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkNyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QoKTtcbiAgICBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnBhcmVudCA9IF9pbnN0YW5jZS5wYXJlbnQgfHwgJyc7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGUgPSBfaW5zdGFuY2UuZW50aXR5VHlwZSB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3IHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UucGFyZW50ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZSA9IG5ldyBFbnRpdHlUeXBlKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnBhcmVudCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZSkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDIsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlIGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMywgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDYsIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW50aXR5VHlwZVZpZXc6IEVudGl0eVR5cGVWaWV3O1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8Q3JlYXRlRW50aXR5VHlwZVJlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMucGFyZW50ID0gX3ZhbHVlLnBhcmVudDtcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBfdmFsdWUuZW50aXR5VHlwZVxuICAgICAgPyBuZXcgRW50aXR5VHlwZShfdmFsdWUuZW50aXR5VHlwZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMubGFuZ3VhZ2VDb2RlID0gX3ZhbHVlLmxhbmd1YWdlQ29kZTtcbiAgICB0aGlzLmVudGl0eVR5cGVWaWV3ID0gX3ZhbHVlLmVudGl0eVR5cGVWaWV3O1xuICAgIENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFyZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuICBzZXQgcGFyZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZSgpOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5VHlwZTtcbiAgfVxuICBzZXQgZW50aXR5VHlwZSh2YWx1ZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVR5cGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ29kZTtcbiAgfVxuICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYW5ndWFnZUNvZGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZVZpZXcoKTogRW50aXR5VHlwZVZpZXcge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlVmlldztcbiAgfVxuICBzZXQgZW50aXR5VHlwZVZpZXcodmFsdWU6IEVudGl0eVR5cGVWaWV3KSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZVZpZXcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUgPyB0aGlzLmVudGl0eVR5cGUudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBlbnRpdHlUeXBlVmlldzogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZVxuICAgICAgICA/IHRoaXMuZW50aXR5VHlwZS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgZW50aXR5VHlwZVZpZXc6XG4gICAgICAgIEVudGl0eVR5cGVWaWV3W1xuICAgICAgICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IG51bGwgfHwgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgICAgICBdXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHBhcmVudDogc3RyaW5nO1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLkFzT2JqZWN0O1xuICAgIGxhbmd1YWdlQ29kZTogc3RyaW5nO1xuICAgIGVudGl0eVR5cGVWaWV3OiBFbnRpdHlUeXBlVmlldztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgcGFyZW50OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZVZpZXc6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuVXBkYXRlRW50aXR5VHlwZVJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5VcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0KCk7XG4gICAgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlID0gX2luc3RhbmNlLmVudGl0eVR5cGUgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrID0gX2luc3RhbmNlLnVwZGF0ZU1hc2sgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZSxcbiAgICAgICAgICAgIEVudGl0eVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrID0gbmV3IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzaygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlTWFzayxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhbmd1YWdlQ29kZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS51cGRhdGVNYXNrKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLnVwZGF0ZU1hc2sgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwMi5GaWVsZE1hc2suc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDYsIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ29kZTogc3RyaW5nO1xuICBwcml2YXRlIF91cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrO1xuICBwcml2YXRlIF9lbnRpdHlUeXBlVmlldzogRW50aXR5VHlwZVZpZXc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdHlUeXBlID0gX3ZhbHVlLmVudGl0eVR5cGVcbiAgICAgID8gbmV3IEVudGl0eVR5cGUoX3ZhbHVlLmVudGl0eVR5cGUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IF92YWx1ZS5sYW5ndWFnZUNvZGU7XG4gICAgdGhpcy51cGRhdGVNYXNrID0gX3ZhbHVlLnVwZGF0ZU1hc2tcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzayhfdmFsdWUudXBkYXRlTWFzaylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPSBfdmFsdWUuZW50aXR5VHlwZVZpZXc7XG4gICAgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlKHZhbHVlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZSA9IHZhbHVlO1xuICB9XG4gIGdldCBsYW5ndWFnZUNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDb2RlO1xuICB9XG4gIHNldCBsYW5ndWFnZUNvZGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xhbmd1YWdlQ29kZSA9IHZhbHVlO1xuICB9XG4gIGdldCB1cGRhdGVNYXNrKCk6IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzayB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU1hc2s7XG4gIH1cbiAgc2V0IHVwZGF0ZU1hc2sodmFsdWU6IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzayB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VwZGF0ZU1hc2sgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZVZpZXcoKTogRW50aXR5VHlwZVZpZXcge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlVmlldztcbiAgfVxuICBzZXQgZW50aXR5VHlwZVZpZXcodmFsdWU6IEVudGl0eVR5cGVWaWV3KSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZVZpZXcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZSA/IHRoaXMuZW50aXR5VHlwZS50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHVwZGF0ZU1hc2s6IHRoaXMudXBkYXRlTWFzayA/IHRoaXMudXBkYXRlTWFzay50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgZW50aXR5VHlwZVZpZXc6IHRoaXMuZW50aXR5VHlwZVZpZXdcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZVxuICAgICAgICA/IHRoaXMuZW50aXR5VHlwZS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgdXBkYXRlTWFzazogdGhpcy51cGRhdGVNYXNrXG4gICAgICAgID8gdGhpcy51cGRhdGVNYXNrLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGVudGl0eVR5cGVWaWV3OlxuICAgICAgICBFbnRpdHlUeXBlVmlld1tcbiAgICAgICAgICB0aGlzLmVudGl0eVR5cGVWaWV3ID09PSBudWxsIHx8IHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuZW50aXR5VHlwZVZpZXdcbiAgICAgICAgXVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZS5Bc09iamVjdDtcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICB1cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrLkFzT2JqZWN0O1xuICAgIGVudGl0eVR5cGVWaWV3OiBFbnRpdHlUeXBlVmlldztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgdXBkYXRlTWFzazogZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBlbnRpdHlUeXBlVmlldzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5EZWxldGVFbnRpdHlUeXBlUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkRlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QoKTtcbiAgICBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5uYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLm5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWUgPSBfdmFsdWUubmFtZTtcbiAgICBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCgpO1xuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UucGFyZW50ID0gX2luc3RhbmNlLnBhcmVudCB8fCAnJztcblxuICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrID0gX2luc3RhbmNlLnVwZGF0ZU1hc2sgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnBhcmVudCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaFVyaSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaElubGluZSA9IG5ldyBFbnRpdHlUeXBlQmF0Y2goKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaElubGluZSxcbiAgICAgICAgICAgIEVudGl0eVR5cGVCYXRjaC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLnVwZGF0ZU1hc2sgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnBhcmVudCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UucGFyZW50KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlQmF0Y2hVcmkgfHwgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaFVyaSA9PT0gJycpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaFVyaSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoSW5saW5lKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaElubGluZSBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGVCYXRjaC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNCwgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UudXBkYXRlTWFzaykge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDUsXG4gICAgICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrIGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDIuRmllbGRNYXNrLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhcmVudDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnRpdHlUeXBlQmF0Y2hVcmk6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW50aXR5VHlwZUJhdGNoSW5saW5lPzogRW50aXR5VHlwZUJhdGNoO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfdXBkYXRlTWFzaz86IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzaztcblxuICBwcml2YXRlIF9lbnRpdHlUeXBlQmF0Y2g6IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LkVudGl0eVR5cGVCYXRjaENhc2UgPVxuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LkVudGl0eVR5cGVCYXRjaENhc2Uubm9uZTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LkFzT2JqZWN0PlxuICApIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5wYXJlbnQgPSBfdmFsdWUucGFyZW50O1xuICAgIHRoaXMuZW50aXR5VHlwZUJhdGNoVXJpID0gX3ZhbHVlLmVudGl0eVR5cGVCYXRjaFVyaTtcbiAgICB0aGlzLmVudGl0eVR5cGVCYXRjaElubGluZSA9IF92YWx1ZS5lbnRpdHlUeXBlQmF0Y2hJbmxpbmVcbiAgICAgID8gbmV3IEVudGl0eVR5cGVCYXRjaChfdmFsdWUuZW50aXR5VHlwZUJhdGNoSW5saW5lKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBfdmFsdWUubGFuZ3VhZ2VDb2RlO1xuICAgIHRoaXMudXBkYXRlTWFzayA9IF92YWx1ZS51cGRhdGVNYXNrXG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwMi5GaWVsZE1hc2soX3ZhbHVlLnVwZGF0ZU1hc2spXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHBhcmVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cbiAgc2V0IHBhcmVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFyZW50ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVCYXRjaFVyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlQmF0Y2hVcmk7XG4gIH1cbiAgc2V0IGVudGl0eVR5cGVCYXRjaFVyaSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2VudGl0eVR5cGVCYXRjaElubGluZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2VudGl0eVR5cGVCYXRjaCA9XG4gICAgICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LkVudGl0eVR5cGVCYXRjaENhc2UuZW50aXR5VHlwZUJhdGNoVXJpO1xuICAgIH1cbiAgICB0aGlzLl9lbnRpdHlUeXBlQmF0Y2hVcmkgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZUJhdGNoSW5saW5lKCk6IEVudGl0eVR5cGVCYXRjaCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVCYXRjaElubGluZTtcbiAgfVxuICBzZXQgZW50aXR5VHlwZUJhdGNoSW5saW5lKHZhbHVlOiBFbnRpdHlUeXBlQmF0Y2ggfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZW50aXR5VHlwZUJhdGNoVXJpID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZW50aXR5VHlwZUJhdGNoID1cbiAgICAgICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuRW50aXR5VHlwZUJhdGNoQ2FzZS5lbnRpdHlUeXBlQmF0Y2hJbmxpbmU7XG4gICAgfVxuICAgIHRoaXMuX2VudGl0eVR5cGVCYXRjaElubGluZSA9IHZhbHVlO1xuICB9XG4gIGdldCBsYW5ndWFnZUNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDb2RlO1xuICB9XG4gIHNldCBsYW5ndWFnZUNvZGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xhbmd1YWdlQ29kZSA9IHZhbHVlO1xuICB9XG4gIGdldCB1cGRhdGVNYXNrKCk6IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzayB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU1hc2s7XG4gIH1cbiAgc2V0IHVwZGF0ZU1hc2sodmFsdWU6IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzayB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VwZGF0ZU1hc2sgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZUJhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlQmF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgZW50aXR5VHlwZUJhdGNoVXJpOiB0aGlzLmVudGl0eVR5cGVCYXRjaFVyaSxcbiAgICAgIGVudGl0eVR5cGVCYXRjaElubGluZTogdGhpcy5lbnRpdHlUeXBlQmF0Y2hJbmxpbmVcbiAgICAgICAgPyB0aGlzLmVudGl0eVR5cGVCYXRjaElubGluZS50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHVwZGF0ZU1hc2s6IHRoaXMudXBkYXRlTWFzayA/IHRoaXMudXBkYXRlTWFzay50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgZW50aXR5VHlwZUJhdGNoVXJpOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVCYXRjaFVyaSA9PT0gbnVsbCB8fFxuICAgICAgICB0aGlzLmVudGl0eVR5cGVCYXRjaFVyaSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0aGlzLmVudGl0eVR5cGVCYXRjaFVyaSxcbiAgICAgIGVudGl0eVR5cGVCYXRjaElubGluZTogdGhpcy5lbnRpdHlUeXBlQmF0Y2hJbmxpbmVcbiAgICAgICAgPyB0aGlzLmVudGl0eVR5cGVCYXRjaElubGluZS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgdXBkYXRlTWFzazogdGhpcy51cGRhdGVNYXNrXG4gICAgICAgID8gdGhpcy51cGRhdGVNYXNrLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBwYXJlbnQ6IHN0cmluZztcbiAgICBlbnRpdHlUeXBlQmF0Y2hVcmk6IHN0cmluZztcbiAgICBlbnRpdHlUeXBlQmF0Y2hJbmxpbmU/OiBFbnRpdHlUeXBlQmF0Y2guQXNPYmplY3Q7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgdXBkYXRlTWFzaz86IGdvb2dsZVByb3RvYnVmMDAyLkZpZWxkTWFzay5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgcGFyZW50OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZUJhdGNoVXJpOiBzdHJpbmcgfCBudWxsO1xuICAgIGVudGl0eVR5cGVCYXRjaElubGluZTogRW50aXR5VHlwZUJhdGNoLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgICB1cGRhdGVNYXNrOiBnb29nbGVQcm90b2J1ZjAwMi5GaWVsZE1hc2suQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICB9XG4gIGV4cG9ydCBlbnVtIEVudGl0eVR5cGVCYXRjaENhc2Uge1xuICAgIG5vbmUgPSAwLFxuICAgIGVudGl0eVR5cGVCYXRjaFVyaSA9IDEsXG4gICAgZW50aXR5VHlwZUJhdGNoSW5saW5lID0gMlxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5CYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlKCk7XG4gICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlKSB7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVzID0gX2luc3RhbmNlLmVudGl0eVR5cGVzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXR5VHlwZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlcyAmJiBfaW5zdGFuY2UuZW50aXR5VHlwZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZXMgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0eVR5cGVzPzogRW50aXR5VHlwZVtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZS5Bc09iamVjdD5cbiAgKSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZW50aXR5VHlwZXMgPSAoX3ZhbHVlLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBuZXcgRW50aXR5VHlwZShtKSk7XG4gICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZXMoKTogRW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5VHlwZXM7XG4gIH1cbiAgc2V0IGVudGl0eVR5cGVzKHZhbHVlOiBFbnRpdHlUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlUeXBlcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlczogKHRoaXMuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlczogKHRoaXMuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlLkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBlbnRpdHlUeXBlczogRW50aXR5VHlwZS5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0KCk7XG4gICAgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5wYXJlbnQgPSBfaW5zdGFuY2UucGFyZW50IHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWVzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnBhcmVudCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgKF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWVzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgX3JlYWRlci5yZWFkU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnBhcmVudCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWVzICYmIF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMiwgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGVOYW1lczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdC5Bc09iamVjdD5cbiAgKSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMucGFyZW50ID0gX3ZhbHVlLnBhcmVudDtcbiAgICB0aGlzLmVudGl0eVR5cGVOYW1lcyA9IChfdmFsdWUuZW50aXR5VHlwZU5hbWVzIHx8IFtdKS5zbGljZSgpO1xuICAgIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFyZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuICBzZXQgcGFyZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5VHlwZU5hbWVzO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlTmFtZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZU5hbWVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgZW50aXR5VHlwZU5hbWVzOiAodGhpcy5lbnRpdHlUeXBlTmFtZXMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICBlbnRpdHlUeXBlTmFtZXM6ICh0aGlzLmVudGl0eVR5cGVOYW1lcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBwYXJlbnQ6IHN0cmluZztcbiAgICBlbnRpdHlUeXBlTmFtZXM6IHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBwYXJlbnQ6IHN0cmluZztcbiAgICBlbnRpdHlUeXBlTmFtZXM6IHN0cmluZ1tdO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlUeXBlQmF0Y2hcbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVR5cGVCYXRjaCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRW50aXR5VHlwZUJhdGNoJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VHlwZUJhdGNoKCk7XG4gICAgRW50aXR5VHlwZUJhdGNoLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRW50aXR5VHlwZUJhdGNoKSB7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVzID0gX2luc3RhbmNlLmVudGl0eVR5cGVzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogRW50aXR5VHlwZUJhdGNoLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXR5VHlwZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEVudGl0eVR5cGVCYXRjaC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGVCYXRjaCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlcyAmJiBfaW5zdGFuY2UuZW50aXR5VHlwZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZXMgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0eVR5cGVzPzogRW50aXR5VHlwZVtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRW50aXR5VHlwZUJhdGNoIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEVudGl0eVR5cGVCYXRjaC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdHlUeXBlcyA9IChfdmFsdWUuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG5ldyBFbnRpdHlUeXBlKG0pKTtcbiAgICBFbnRpdHlUeXBlQmF0Y2gucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlcygpOiBFbnRpdHlUeXBlW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlcztcbiAgfVxuICBzZXQgZW50aXR5VHlwZXModmFsdWU6IEVudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVR5cGVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRW50aXR5VHlwZUJhdGNoLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEVudGl0eVR5cGVCYXRjaC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGVzOiAodGhpcy5lbnRpdHlUeXBlcyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEVudGl0eVR5cGVCYXRjaC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGVzOiAodGhpcy5lbnRpdHlUeXBlcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEVudGl0eVR5cGVCYXRjaCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5VHlwZUJhdGNoXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBlbnRpdHlUeXBlcz86IEVudGl0eVR5cGUuQXNPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlUeXBlQmF0Y2hcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGVudGl0eVR5cGVzOiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlUeXBlU29ydGluZ1xuICovXG5leHBvcnQgY2xhc3MgRW50aXR5VHlwZVNvcnRpbmcgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkVudGl0eVR5cGVTb3J0aW5nJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VHlwZVNvcnRpbmcoKTtcbiAgICBFbnRpdHlUeXBlU29ydGluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nKSB7XG4gICAgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCA9IF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgfHwgMDtcbiAgICBfaW5zdGFuY2Uuc29ydGluZ01vZGUgPSBfaW5zdGFuY2Uuc29ydGluZ01vZGUgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydGluZ01vZGUgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBFbnRpdHlUeXBlU29ydGluZy5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNvcnRpbmdGaWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMSwgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydGluZ01vZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDIsIF9pbnN0YW5jZS5zb3J0aW5nTW9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc29ydGluZ0ZpZWxkOiBFbnRpdHlUeXBlU29ydGluZy5FbnRpdHlUeXBlU29ydGluZ0ZpZWxkO1xuICBwcml2YXRlIF9zb3J0aW5nTW9kZTogb25kZXdvTmx1MDA5LlNvcnRpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRW50aXR5VHlwZVNvcnRpbmcgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5VHlwZVNvcnRpbmcuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuc29ydGluZ0ZpZWxkID0gX3ZhbHVlLnNvcnRpbmdGaWVsZDtcbiAgICB0aGlzLnNvcnRpbmdNb2RlID0gX3ZhbHVlLnNvcnRpbmdNb2RlO1xuICAgIEVudGl0eVR5cGVTb3J0aW5nLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgc29ydGluZ0ZpZWxkKCk6IEVudGl0eVR5cGVTb3J0aW5nLkVudGl0eVR5cGVTb3J0aW5nRmllbGQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nRmllbGQ7XG4gIH1cbiAgc2V0IHNvcnRpbmdGaWVsZCh2YWx1ZTogRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZCkge1xuICAgIHRoaXMuX3NvcnRpbmdGaWVsZCA9IHZhbHVlO1xuICB9XG4gIGdldCBzb3J0aW5nTW9kZSgpOiBvbmRld29ObHUwMDkuU29ydGluZ01vZGUge1xuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nTW9kZTtcbiAgfVxuICBzZXQgc29ydGluZ01vZGUodmFsdWU6IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZSkge1xuICAgIHRoaXMuX3NvcnRpbmdNb2RlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRW50aXR5VHlwZVNvcnRpbmcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRW50aXR5VHlwZVNvcnRpbmcuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzb3J0aW5nRmllbGQ6IHRoaXMuc29ydGluZ0ZpZWxkLFxuICAgICAgc29ydGluZ01vZGU6IHRoaXMuc29ydGluZ01vZGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFbnRpdHlUeXBlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRpbmdGaWVsZDpcbiAgICAgICAgRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZFtcbiAgICAgICAgICB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5zb3J0aW5nRmllbGRcbiAgICAgICAgXSxcbiAgICAgIHNvcnRpbmdNb2RlOlxuICAgICAgICBvbmRld29ObHUwMDkuU29ydGluZ01vZGVbXG4gICAgICAgICAgdGhpcy5zb3J0aW5nTW9kZSA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdNb2RlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdNb2RlXG4gICAgICAgIF1cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEVudGl0eVR5cGVTb3J0aW5nIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlUeXBlU29ydGluZ1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc29ydGluZ0ZpZWxkOiBFbnRpdHlUeXBlU29ydGluZy5FbnRpdHlUeXBlU29ydGluZ0ZpZWxkO1xuICAgIHNvcnRpbmdNb2RlOiBvbmRld29ObHUwMDkuU29ydGluZ01vZGU7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5VHlwZVNvcnRpbmdcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHNvcnRpbmdGaWVsZDogc3RyaW5nO1xuICAgIHNvcnRpbmdNb2RlOiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IGVudW0gRW50aXR5VHlwZVNvcnRpbmdGaWVsZCB7XG4gICAgTk9fRU5USVRZX1RZUEVfU09SVElORyA9IDAsXG4gICAgU09SVF9FTlRJVFlfVFlQRV9CWV9OQU1FID0gMSxcbiAgICBTT1JUX0VOVElUWV9UWVBFX0JZX0NSRUFUSU9OX0RBVEUgPSAyLFxuICAgIFNPUlRfRU5USVRZX1RZUEVfQllfTEFTVF9VUERBVEVEID0gMyxcbiAgICBTT1JUX0VOVElUWV9UWVBFX0JZX0VOVElUWV9WQUxVRV9DT1VOVCA9IDQsXG4gICAgU09SVF9FTlRJVFlfVFlQRV9CWV9TWU5PTllNX0NPVU5UID0gNVxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlTdGF0dXNcbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVN0YXR1cyBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRW50aXR5U3RhdHVzJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5U3RhdHVzKCk7XG4gICAgRW50aXR5U3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRW50aXR5U3RhdHVzKSB7fVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVN0YXR1cyxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHksXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLmVycm9yTWVzc2FnZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRW50aXR5U3RhdHVzLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogRW50aXR5U3RhdHVzLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0eSkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdHkgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lcnJvck1lc3NhZ2UgfHwgX2luc3RhbmNlLmVycm9yTWVzc2FnZSA9PT0gJycpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHk7XG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2VudGl0eU9yU3RhdHVzOiBFbnRpdHlTdGF0dXMuRW50aXR5T3JTdGF0dXNDYXNlID1cbiAgICBFbnRpdHlTdGF0dXMuRW50aXR5T3JTdGF0dXNDYXNlLm5vbmU7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFbnRpdHlTdGF0dXMgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5U3RhdHVzLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0eSA9IF92YWx1ZS5lbnRpdHlcbiAgICAgID8gbmV3IEVudGl0eVR5cGUuRW50aXR5KF92YWx1ZS5lbnRpdHkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF92YWx1ZS5lcnJvck1lc3NhZ2U7XG4gICAgRW50aXR5U3RhdHVzLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZW50aXR5KCk6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5O1xuICB9XG4gIHNldCBlbnRpdHkodmFsdWU6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2VudGl0eU9yU3RhdHVzID0gRW50aXR5U3RhdHVzLkVudGl0eU9yU3RhdHVzQ2FzZS5lbnRpdHk7XG4gICAgfVxuICAgIHRoaXMuX2VudGl0eSA9IHZhbHVlO1xuICB9XG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JNZXNzYWdlO1xuICB9XG4gIHNldCBlcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9lbnRpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9lbnRpdHlPclN0YXR1cyA9IEVudGl0eVN0YXR1cy5FbnRpdHlPclN0YXR1c0Nhc2UuZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5T3JTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU9yU3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEVudGl0eVN0YXR1cy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBFbnRpdHlTdGF0dXMuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHk6IHRoaXMuZW50aXR5ID8gdGhpcy5lbnRpdHkudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yTWVzc2FnZTogdGhpcy5lcnJvck1lc3NhZ2VcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFbnRpdHlTdGF0dXMuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHk6IHRoaXMuZW50aXR5ID8gdGhpcy5lbnRpdHkudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgZXJyb3JNZXNzYWdlOlxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9PT0gbnVsbCB8fCB0aGlzLmVycm9yTWVzc2FnZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0aGlzLmVycm9yTWVzc2FnZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRW50aXR5U3RhdHVzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlTdGF0dXNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eT86IEVudGl0eVR5cGUuRW50aXR5LkFzT2JqZWN0O1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVN0YXR1c1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5OiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICB9XG4gIGV4cG9ydCBlbnVtIEVudGl0eU9yU3RhdHVzQ2FzZSB7XG4gICAgbm9uZSA9IDAsXG4gICAgZW50aXR5ID0gMSxcbiAgICBlcnJvck1lc3NhZ2UgPSAyXG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkJhdGNoRW50aXRpZXNSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaEVudGl0aWVzUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCYXRjaEVudGl0aWVzUmVzcG9uc2UoKTtcbiAgICBCYXRjaEVudGl0aWVzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaEVudGl0aWVzUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UuZW50aXR5U3RhdHVzZXMgPSBfaW5zdGFuY2UuZW50aXR5U3RhdHVzZXMgfHwgW107XG4gICAgX2luc3RhbmNlLmhhc0Vycm9ycyA9IF9pbnN0YW5jZS5oYXNFcnJvcnMgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaEVudGl0aWVzUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBFbnRpdHlTdGF0dXMoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIEVudGl0eVN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXR5U3RhdHVzZXMgPSBfaW5zdGFuY2UuZW50aXR5U3RhdHVzZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5oYXNFcnJvcnMgPSBfcmVhZGVyLnJlYWRCb29sKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaEVudGl0aWVzUmVzcG9uc2UucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaEVudGl0aWVzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5U3RhdHVzZXMgJiYgX2luc3RhbmNlLmVudGl0eVN0YXR1c2VzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVN0YXR1c2VzIGFzIGFueSxcbiAgICAgICAgRW50aXR5U3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmhhc0Vycm9ycykge1xuICAgICAgX3dyaXRlci53cml0ZUJvb2woMiwgX2luc3RhbmNlLmhhc0Vycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5U3RhdHVzZXM/OiBFbnRpdHlTdGF0dXNbXTtcbiAgcHJpdmF0ZSBfaGFzRXJyb3JzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoRW50aXRpZXNSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdHlTdGF0dXNlcyA9IChfdmFsdWUuZW50aXR5U3RhdHVzZXMgfHwgW10pLm1hcChcbiAgICAgIG0gPT4gbmV3IEVudGl0eVN0YXR1cyhtKVxuICAgICk7XG4gICAgdGhpcy5oYXNFcnJvcnMgPSBfdmFsdWUuaGFzRXJyb3JzO1xuICAgIEJhdGNoRW50aXRpZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVN0YXR1c2VzKCk6IEVudGl0eVN0YXR1c1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5U3RhdHVzZXM7XG4gIH1cbiAgc2V0IGVudGl0eVN0YXR1c2VzKHZhbHVlOiBFbnRpdHlTdGF0dXNbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVN0YXR1c2VzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGFzRXJyb3JzO1xuICB9XG4gIHNldCBoYXNFcnJvcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNFcnJvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaEVudGl0aWVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5U3RhdHVzZXM6ICh0aGlzLmVudGl0eVN0YXR1c2VzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpLFxuICAgICAgaGFzRXJyb3JzOiB0aGlzLmhhc0Vycm9yc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEJhdGNoRW50aXRpZXNSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVN0YXR1c2VzOiAodGhpcy5lbnRpdHlTdGF0dXNlcyB8fCBbXSkubWFwKG0gPT5cbiAgICAgICAgbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgKSxcbiAgICAgIGhhc0Vycm9yczogdGhpcy5oYXNFcnJvcnNcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEJhdGNoRW50aXRpZXNSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBlbnRpdHlTdGF0dXNlcz86IEVudGl0eVN0YXR1cy5Bc09iamVjdFtdO1xuICAgIGhhc0Vycm9yczogYm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaEVudGl0aWVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGVudGl0eVN0YXR1c2VzOiBFbnRpdHlTdGF0dXMuQXNQcm90b2J1ZkpTT05bXSB8IG51bGw7XG4gICAgaGFzRXJyb3JzOiBib29sZWFuO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5DcmVhdGVFbnRpdHlSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBDcmVhdGVFbnRpdHlSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5DcmVhdGVFbnRpdHlSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ3JlYXRlRW50aXR5UmVxdWVzdCgpO1xuICAgIENyZWF0ZUVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBDcmVhdGVFbnRpdHlSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lID0gX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lbnRpdHkgPSBfaW5zdGFuY2UuZW50aXR5IHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHksXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ3JlYXRlRW50aXR5UmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVJlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHkpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UuZW50aXR5IGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZS5FbnRpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5VHlwZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHk7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBDcmVhdGVFbnRpdHlSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPENyZWF0ZUVudGl0eVJlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZW50aXR5VHlwZU5hbWUgPSBfdmFsdWUuZW50aXR5VHlwZU5hbWU7XG4gICAgdGhpcy5lbnRpdHkgPSBfdmFsdWUuZW50aXR5XG4gICAgICA/IG5ldyBFbnRpdHlUeXBlLkVudGl0eShfdmFsdWUuZW50aXR5KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgQ3JlYXRlRW50aXR5UmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVOYW1lO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZU5hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5KCk6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5O1xuICB9XG4gIHNldCBlbnRpdHkodmFsdWU6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQ3JlYXRlRW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBDcmVhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZU5hbWU6IHRoaXMuZW50aXR5VHlwZU5hbWUsXG4gICAgICBlbnRpdHk6IHRoaXMuZW50aXR5ID8gdGhpcy5lbnRpdHkudG9PYmplY3QoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IENyZWF0ZUVudGl0eVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlTmFtZTogdGhpcy5lbnRpdHlUeXBlTmFtZSxcbiAgICAgIGVudGl0eTogdGhpcy5lbnRpdHkgPyB0aGlzLmVudGl0eS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIENyZWF0ZUVudGl0eVJlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENyZWF0ZUVudGl0eVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG4gICAgZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHkuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQ3JlYXRlRW50aXR5UmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZU5hbWU6IHN0cmluZztcbiAgICBlbnRpdHk6IEVudGl0eVR5cGUuRW50aXR5LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0KCk7XG4gICAgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5jcmVhdGVFbnRpdHlSZXF1ZXN0cyA9IF9pbnN0YW5jZS5jcmVhdGVFbnRpdHlSZXF1ZXN0cyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgQ3JlYXRlRW50aXR5UmVxdWVzdCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgQ3JlYXRlRW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgPVxuICAgICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZUVudGl0eVJlcXVlc3RzIHx8IFtdKS5wdXNoKG1lc3NhZ2VJbml0aWFsaXplcjEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgX2luc3RhbmNlLmNyZWF0ZUVudGl0eVJlcXVlc3RzICYmXG4gICAgICBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgYXMgYW55LFxuICAgICAgICBDcmVhdGVFbnRpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUVudGl0eVJlcXVlc3RzPzogQ3JlYXRlRW50aXR5UmVxdWVzdFtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuY3JlYXRlRW50aXR5UmVxdWVzdHMgPSAoX3ZhbHVlLmNyZWF0ZUVudGl0eVJlcXVlc3RzIHx8IFtdKS5tYXAoXG4gICAgICBtID0+IG5ldyBDcmVhdGVFbnRpdHlSZXF1ZXN0KG0pXG4gICAgKTtcbiAgICBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGNyZWF0ZUVudGl0eVJlcXVlc3RzKCk6IENyZWF0ZUVudGl0eVJlcXVlc3RbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudGl0eVJlcXVlc3RzO1xuICB9XG4gIHNldCBjcmVhdGVFbnRpdHlSZXF1ZXN0cyh2YWx1ZTogQ3JlYXRlRW50aXR5UmVxdWVzdFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY3JlYXRlRW50aXR5UmVxdWVzdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZUVudGl0eVJlcXVlc3RzOiAodGhpcy5jcmVhdGVFbnRpdHlSZXF1ZXN0cyB8fCBbXSkubWFwKG0gPT5cbiAgICAgICAgbS50b09iamVjdCgpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVFbnRpdHlSZXF1ZXN0czogKHRoaXMuY3JlYXRlRW50aXR5UmVxdWVzdHMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgIClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgY3JlYXRlRW50aXR5UmVxdWVzdHM/OiBDcmVhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGNyZWF0ZUVudGl0eVJlcXVlc3RzOiBDcmVhdGVFbnRpdHlSZXF1ZXN0LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5CYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QoKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLmVudGl0aWVzID0gX2luc3RhbmNlLmVudGl0aWVzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBFbnRpdHlUeXBlLkVudGl0eSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmVudGl0aWVzID0gX2luc3RhbmNlLmVudGl0aWVzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0aWVzICYmIF9pbnN0YW5jZS5lbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHlbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0aWVzID0gKF92YWx1ZS5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbmV3IEVudGl0eVR5cGUuRW50aXR5KG0pKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0aWVzKCk6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdGllcztcbiAgfVxuICBzZXQgZW50aXRpZXModmFsdWU6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdGllcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXRpZXM6ICh0aGlzLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdGllczogKHRoaXMuZW50aXRpZXMgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHkuQXNPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXRpZXM6IEVudGl0eVR5cGUuRW50aXR5LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5VcGRhdGVFbnRpdHlSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBVcGRhdGVFbnRpdHlSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5VcGRhdGVFbnRpdHlSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVXBkYXRlRW50aXR5UmVxdWVzdCgpO1xuICAgIFVwZGF0ZUVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBVcGRhdGVFbnRpdHlSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLmVudGl0eSA9IF9pbnN0YW5jZS5lbnRpdHkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVXBkYXRlRW50aXR5UmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHksXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXBkYXRlRW50aXR5UmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IFVwZGF0ZUVudGl0eVJlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eSBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0eT86IEVudGl0eVR5cGUuRW50aXR5O1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgVXBkYXRlRW50aXR5UmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxVcGRhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0eSA9IF92YWx1ZS5lbnRpdHlcbiAgICAgID8gbmV3IEVudGl0eVR5cGUuRW50aXR5KF92YWx1ZS5lbnRpdHkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBVcGRhdGVFbnRpdHlSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZW50aXR5KCk6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5O1xuICB9XG4gIHNldCBlbnRpdHkodmFsdWU6IEVudGl0eVR5cGUuRW50aXR5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVXBkYXRlRW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBVcGRhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSA/IHRoaXMuZW50aXR5LnRvT2JqZWN0KCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBVcGRhdGVFbnRpdHlSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSA/IHRoaXMuZW50aXR5LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVXBkYXRlRW50aXR5UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVXBkYXRlRW50aXR5UmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHkuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVXBkYXRlRW50aXR5UmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5OiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkdldEVudGl0eVJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEdldEVudGl0eVJlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkdldEVudGl0eVJlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBHZXRFbnRpdHlSZXF1ZXN0KCk7XG4gICAgR2V0RW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEdldEVudGl0eVJlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UubmFtZSA9IF9pbnN0YW5jZS5uYW1lIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogR2V0RW50aXR5UmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UubmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgR2V0RW50aXR5UmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEdldEVudGl0eVJlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UubmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgR2V0RW50aXR5UmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxHZXRFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWUgPSBfdmFsdWUubmFtZTtcbiAgICBHZXRFbnRpdHlSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgR2V0RW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBHZXRFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogR2V0RW50aXR5UmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgR2V0RW50aXR5UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgR2V0RW50aXR5UmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEdldEVudGl0eVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaEdldEVudGl0aWVzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0KCk7XG4gICAgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5uYW1lcyA9IF9pbnN0YW5jZS5uYW1lcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIChfaW5zdGFuY2UubmFtZXMgPSBfaW5zdGFuY2UubmFtZXMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5uYW1lcyAmJiBfaW5zdGFuY2UubmFtZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYW1lczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaEdldEVudGl0aWVzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5uYW1lcyA9IChfdmFsdWUubmFtZXMgfHwgW10pLnNsaWNlKCk7XG4gICAgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBuYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzO1xuICB9XG4gIHNldCBuYW1lcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9uYW1lcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXM6ICh0aGlzLm5hbWVzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lczogKHRoaXMubmFtZXMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaEdldEVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgbmFtZXM6IHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBuYW1lczogc3RyaW5nW107XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCgpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UubmFtZXMgPSBfaW5zdGFuY2UubmFtZXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAoX2luc3RhbmNlLm5hbWVzID0gX2luc3RhbmNlLm5hbWVzIHx8IFtdKS5wdXNoKF9yZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UubmFtZXMgJiYgX2luc3RhbmNlLm5hbWVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDEsIF9pbnN0YW5jZS5uYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMubmFtZXMgPSAoX3ZhbHVlLm5hbWVzIHx8IFtdKS5zbGljZSgpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgbmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcztcbiAgfVxuICBzZXQgbmFtZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fbmFtZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzOiAodGhpcy5uYW1lcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXM6ICh0aGlzLm5hbWVzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWVzOiBzdHJpbmdbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgbmFtZXM6IHN0cmluZ1tdO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5EZWxldGVFbnRpdHlSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBEZWxldGVFbnRpdHlSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5EZWxldGVFbnRpdHlSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGVsZXRlRW50aXR5UmVxdWVzdCgpO1xuICAgIERlbGV0ZUVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBEZWxldGVFbnRpdHlSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERlbGV0ZUVudGl0eVJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBEZWxldGVFbnRpdHlSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLm5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIERlbGV0ZUVudGl0eVJlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RGVsZXRlRW50aXR5UmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5uYW1lID0gX3ZhbHVlLm5hbWU7XG4gICAgRGVsZXRlRW50aXR5UmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIERlbGV0ZUVudGl0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRGVsZXRlRW50aXR5UmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IERlbGV0ZUVudGl0eVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIERlbGV0ZUVudGl0eVJlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIERlbGV0ZUVudGl0eVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBEZWxldGVFbnRpdHlSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkRlbGV0ZUVudGl0eVN0YXR1c1xuICovXG5leHBvcnQgY2xhc3MgRGVsZXRlRW50aXR5U3RhdHVzIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5EZWxldGVFbnRpdHlTdGF0dXMnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEZWxldGVFbnRpdHlTdGF0dXMoKTtcbiAgICBEZWxldGVFbnRpdHlTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBEZWxldGVFbnRpdHlTdGF0dXMpIHt9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogRGVsZXRlRW50aXR5U3RhdHVzLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zdWNjZXNzZnVsbHlEZWxldGVkID0gbmV3IGdvb2dsZVByb3RvYnVmMDA2LkVtcHR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zdWNjZXNzZnVsbHlEZWxldGVkLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDYuRW1wdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5lcnJvck1lc3NhZ2UgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERlbGV0ZUVudGl0eVN0YXR1cy5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVN0YXR1cyxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5zdWNjZXNzZnVsbHlEZWxldGVkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnN1Y2Nlc3NmdWxseURlbGV0ZWQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNi5FbXB0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lcnJvck1lc3NhZ2UgfHwgX2luc3RhbmNlLmVycm9yTWVzc2FnZSA9PT0gJycpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3VjY2Vzc2Z1bGx5RGVsZXRlZD86IGdvb2dsZVByb3RvYnVmMDA2LkVtcHR5O1xuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBwcml2YXRlIF9kZWxldGVTdGF0dXM6IERlbGV0ZUVudGl0eVN0YXR1cy5EZWxldGVTdGF0dXNDYXNlID1cbiAgICBEZWxldGVFbnRpdHlTdGF0dXMuRGVsZXRlU3RhdHVzQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRGVsZXRlRW50aXR5U3RhdHVzIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPERlbGV0ZUVudGl0eVN0YXR1cy5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkID0gX3ZhbHVlLnN1Y2Nlc3NmdWxseURlbGV0ZWRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA2LkVtcHR5KF92YWx1ZS5zdWNjZXNzZnVsbHlEZWxldGVkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfdmFsdWUuZXJyb3JNZXNzYWdlO1xuICAgIERlbGV0ZUVudGl0eVN0YXR1cy5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHN1Y2Nlc3NmdWxseURlbGV0ZWQoKTogZ29vZ2xlUHJvdG9idWYwMDYuRW1wdHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zdWNjZXNzZnVsbHlEZWxldGVkO1xuICB9XG4gIHNldCBzdWNjZXNzZnVsbHlEZWxldGVkKHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNi5FbXB0eSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWxldGVTdGF0dXMgPVxuICAgICAgICBEZWxldGVFbnRpdHlTdGF0dXMuRGVsZXRlU3RhdHVzQ2FzZS5zdWNjZXNzZnVsbHlEZWxldGVkO1xuICAgIH1cbiAgICB0aGlzLl9zdWNjZXNzZnVsbHlEZWxldGVkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7XG4gIH1cbiAgc2V0IGVycm9yTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3N1Y2Nlc3NmdWxseURlbGV0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWxldGVTdGF0dXMgPSBEZWxldGVFbnRpdHlTdGF0dXMuRGVsZXRlU3RhdHVzQ2FzZS5lcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHZhbHVlO1xuICB9XG4gIGdldCBkZWxldGVTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGV0ZVN0YXR1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBEZWxldGVFbnRpdHlTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRGVsZXRlRW50aXR5U3RhdHVzLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2Vzc2Z1bGx5RGVsZXRlZDogdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkXG4gICAgICAgID8gdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlcnJvck1lc3NhZ2U6IHRoaXMuZXJyb3JNZXNzYWdlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRGVsZXRlRW50aXR5U3RhdHVzLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2Vzc2Z1bGx5RGVsZXRlZDogdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkXG4gICAgICAgID8gdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGVycm9yTWVzc2FnZTpcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPT09IG51bGwgfHwgdGhpcy5lcnJvck1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdGhpcy5lcnJvck1lc3NhZ2VcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIERlbGV0ZUVudGl0eVN0YXR1cyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRGVsZXRlRW50aXR5U3RhdHVzXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzdWNjZXNzZnVsbHlEZWxldGVkPzogZ29vZ2xlUHJvdG9idWYwMDYuRW1wdHkuQXNPYmplY3Q7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRGVsZXRlRW50aXR5U3RhdHVzXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzdWNjZXNzZnVsbHlEZWxldGVkOiBnb29nbGVQcm90b2J1ZjAwNi5FbXB0eS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICB9XG4gIGV4cG9ydCBlbnVtIERlbGV0ZVN0YXR1c0Nhc2Uge1xuICAgIG5vbmUgPSAwLFxuICAgIHN1Y2Nlc3NmdWxseURlbGV0ZWQgPSAxLFxuICAgIGVycm9yTWVzc2FnZSA9IDJcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSgpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyA9IF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UuaGFzRXJyb3JzID0gX2luc3RhbmNlLmhhc0Vycm9ycyB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IERlbGV0ZUVudGl0eVN0YXR1cygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRGVsZXRlRW50aXR5U3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyA9IF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjFcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLmhhc0Vycm9ycyA9IF9yZWFkZXIucmVhZEJvb2woKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyAmJiBfaW5zdGFuY2UuZGVsZXRlU3RhdHVzZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UuZGVsZXRlU3RhdHVzZXMgYXMgYW55LFxuICAgICAgICBEZWxldGVFbnRpdHlTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuaGFzRXJyb3JzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlQm9vbCgyLCBfaW5zdGFuY2UuaGFzRXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVTdGF0dXNlcz86IERlbGV0ZUVudGl0eVN0YXR1c1tdO1xuICBwcml2YXRlIF9oYXNFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmRlbGV0ZVN0YXR1c2VzID0gKF92YWx1ZS5kZWxldGVTdGF0dXNlcyB8fCBbXSkubWFwKFxuICAgICAgbSA9PiBuZXcgRGVsZXRlRW50aXR5U3RhdHVzKG0pXG4gICAgKTtcbiAgICB0aGlzLmhhc0Vycm9ycyA9IF92YWx1ZS5oYXNFcnJvcnM7XG4gICAgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZGVsZXRlU3RhdHVzZXMoKTogRGVsZXRlRW50aXR5U3RhdHVzW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kZWxldGVTdGF0dXNlcztcbiAgfVxuICBzZXQgZGVsZXRlU3RhdHVzZXModmFsdWU6IERlbGV0ZUVudGl0eVN0YXR1c1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGVsZXRlU3RhdHVzZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNFcnJvcnM7XG4gIH1cbiAgc2V0IGhhc0Vycm9ycyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc0Vycm9ycyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVTdGF0dXNlczogKHRoaXMuZGVsZXRlU3RhdHVzZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBoYXNFcnJvcnM6IHRoaXMuaGFzRXJyb3JzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVsZXRlU3RhdHVzZXM6ICh0aGlzLmRlbGV0ZVN0YXR1c2VzIHx8IFtdKS5tYXAobSA9PlxuICAgICAgICBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICApLFxuICAgICAgaGFzRXJyb3JzOiB0aGlzLmhhc0Vycm9yc1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGRlbGV0ZVN0YXR1c2VzPzogRGVsZXRlRW50aXR5U3RhdHVzLkFzT2JqZWN0W107XG4gICAgaGFzRXJyb3JzOiBib29sZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZGVsZXRlU3RhdHVzZXM6IERlbGV0ZUVudGl0eVN0YXR1cy5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBoYXNFcnJvcnM6IGJvb2xlYW47XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1Lkxpc3RFbnRpdGllc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RFbnRpdGllc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1Lkxpc3RFbnRpdGllc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0RW50aXRpZXNSZXF1ZXN0KCk7XG4gICAgTGlzdEVudGl0aWVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUgPSBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUgfHwgJyc7XG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLnBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5wYWdlVG9rZW4gfHwgJyc7XG4gICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkID0gX2luc3RhbmNlLnNvcnRCeUZpZWxkIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uuc2VhcmNoQnlQYXR0ZXJuID0gX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVRva2VuID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydEJ5RmllbGQgPSBuZXcgRW50aXR5VmFsdWVTb3J0aW5nKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCxcbiAgICAgICAgICAgIEVudGl0eVZhbHVlU29ydGluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybiA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGlzdEVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucGFnZVRva2VuKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMsIF9pbnN0YW5jZS5wYWdlVG9rZW4pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnNvcnRCeUZpZWxkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgNSxcbiAgICAgICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkIGFzIGFueSxcbiAgICAgICAgRW50aXR5VmFsdWVTb3J0aW5nLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg2LCBfaW5zdGFuY2Uuc2VhcmNoQnlQYXR0ZXJuKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnRpdHlUeXBlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFnZVRva2VuOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NvcnRCeUZpZWxkPzogRW50aXR5VmFsdWVTb3J0aW5nO1xuICBwcml2YXRlIF9zZWFyY2hCeVBhdHRlcm46IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIExpc3RFbnRpdGllc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TGlzdEVudGl0aWVzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdHlUeXBlTmFtZSA9IF92YWx1ZS5lbnRpdHlUeXBlTmFtZTtcbiAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IF92YWx1ZS5sYW5ndWFnZUNvZGU7XG4gICAgdGhpcy5wYWdlVG9rZW4gPSBfdmFsdWUucGFnZVRva2VuO1xuICAgIHRoaXMuc29ydEJ5RmllbGQgPSBfdmFsdWUuc29ydEJ5RmllbGRcbiAgICAgID8gbmV3IEVudGl0eVZhbHVlU29ydGluZyhfdmFsdWUuc29ydEJ5RmllbGQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlYXJjaEJ5UGF0dGVybiA9IF92YWx1ZS5zZWFyY2hCeVBhdHRlcm47XG4gICAgTGlzdEVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVOYW1lO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZU5hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ29kZTtcbiAgfVxuICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYW5ndWFnZUNvZGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFnZVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUb2tlbjtcbiAgfVxuICBzZXQgcGFnZVRva2VuKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdlVG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBnZXQgc29ydEJ5RmllbGQoKTogRW50aXR5VmFsdWVTb3J0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEJ5RmllbGQ7XG4gIH1cbiAgc2V0IHNvcnRCeUZpZWxkKHZhbHVlOiBFbnRpdHlWYWx1ZVNvcnRpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zb3J0QnlGaWVsZCA9IHZhbHVlO1xuICB9XG4gIGdldCBzZWFyY2hCeVBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoQnlQYXR0ZXJuO1xuICB9XG4gIHNldCBzZWFyY2hCeVBhdHRlcm4odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlYXJjaEJ5UGF0dGVybiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIExpc3RFbnRpdGllc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogTGlzdEVudGl0aWVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGVOYW1lOiB0aGlzLmVudGl0eVR5cGVOYW1lLFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHBhZ2VUb2tlbjogdGhpcy5wYWdlVG9rZW4sXG4gICAgICBzb3J0QnlGaWVsZDogdGhpcy5zb3J0QnlGaWVsZCA/IHRoaXMuc29ydEJ5RmllbGQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIHNlYXJjaEJ5UGF0dGVybjogdGhpcy5zZWFyY2hCeVBhdHRlcm5cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBMaXN0RW50aXRpZXNSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZU5hbWU6IHRoaXMuZW50aXR5VHlwZU5hbWUsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgcGFnZVRva2VuOiB0aGlzLnBhZ2VUb2tlbixcbiAgICAgIHNvcnRCeUZpZWxkOiB0aGlzLnNvcnRCeUZpZWxkXG4gICAgICAgID8gdGhpcy5zb3J0QnlGaWVsZC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBzZWFyY2hCeVBhdHRlcm46IHRoaXMuc2VhcmNoQnlQYXR0ZXJuXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBMaXN0RW50aXRpZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXRpZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBlbnRpdHlUeXBlTmFtZTogc3RyaW5nO1xuICAgIGxhbmd1YWdlQ29kZTogc3RyaW5nO1xuICAgIHBhZ2VUb2tlbjogc3RyaW5nO1xuICAgIHNvcnRCeUZpZWxkPzogRW50aXR5VmFsdWVTb3J0aW5nLkFzT2JqZWN0O1xuICAgIHNlYXJjaEJ5UGF0dGVybjogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIExpc3RFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gICAgcGFnZVRva2VuOiBzdHJpbmc7XG4gICAgc29ydEJ5RmllbGQ6IEVudGl0eVZhbHVlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc2VhcmNoQnlQYXR0ZXJuOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1Lkxpc3RFbnRpdGllc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0RW50aXRpZXNSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuTGlzdEVudGl0aWVzUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0RW50aXRpZXNSZXNwb25zZSgpO1xuICAgIExpc3RFbnRpdGllc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogTGlzdEVudGl0aWVzUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UuZW50aXRpZXMgPSBfaW5zdGFuY2UuZW50aXRpZXMgfHwgW107XG4gICAgX2luc3RhbmNlLm5leHRQYWdlVG9rZW4gPSBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgRW50aXR5VHlwZS5FbnRpdHkoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIEVudGl0eVR5cGUuRW50aXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS5lbnRpdGllcyA9IF9pbnN0YW5jZS5lbnRpdGllcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjFcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLm5leHRQYWdlVG9rZW4gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIExpc3RFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdEVudGl0aWVzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXRpZXMgJiYgX2luc3RhbmNlLmVudGl0aWVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0aWVzIGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZS5FbnRpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXRpZXM/OiBFbnRpdHlUeXBlLkVudGl0eVtdO1xuICBwcml2YXRlIF9uZXh0UGFnZVRva2VuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0RW50aXRpZXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxMaXN0RW50aXRpZXNSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdGllcyA9IChfdmFsdWUuZW50aXRpZXMgfHwgW10pLm1hcChtID0+IG5ldyBFbnRpdHlUeXBlLkVudGl0eShtKSk7XG4gICAgdGhpcy5uZXh0UGFnZVRva2VuID0gX3ZhbHVlLm5leHRQYWdlVG9rZW47XG4gICAgTGlzdEVudGl0aWVzUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBlbnRpdGllcygpOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXRpZXM7XG4gIH1cbiAgc2V0IGVudGl0aWVzKHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXRpZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbmV4dFBhZ2VUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uZXh0UGFnZVRva2VuO1xuICB9XG4gIHNldCBuZXh0UGFnZVRva2VuKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uZXh0UGFnZVRva2VuID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgTGlzdEVudGl0aWVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogTGlzdEVudGl0aWVzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdGllczogKHRoaXMuZW50aXRpZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW5cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBMaXN0RW50aXRpZXNSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0aWVzOiAodGhpcy5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW5cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIExpc3RFbnRpdGllc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXRpZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXRpZXM/OiBFbnRpdHlUeXBlLkVudGl0eS5Bc09iamVjdFtdO1xuICAgIG5leHRQYWdlVG9rZW46IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXRpZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXRpZXM6IEVudGl0eVR5cGUuRW50aXR5LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIG5leHRQYWdlVG9rZW46IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuRW50aXR5VmFsdWVTb3J0aW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlWYWx1ZVNvcnRpbmcgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkVudGl0eVZhbHVlU29ydGluZyc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEVudGl0eVZhbHVlU29ydGluZygpO1xuICAgIEVudGl0eVZhbHVlU29ydGluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEVudGl0eVZhbHVlU29ydGluZykge1xuICAgIF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgPSBfaW5zdGFuY2Uuc29ydGluZ0ZpZWxkIHx8IDA7XG4gICAgX2luc3RhbmNlLnNvcnRpbmdNb2RlID0gX2luc3RhbmNlLnNvcnRpbmdNb2RlIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBFbnRpdHlWYWx1ZVNvcnRpbmcsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3J0aW5nTW9kZSA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEVudGl0eVZhbHVlU29ydGluZy5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVZhbHVlU29ydGluZyxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5zb3J0aW5nRmllbGQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDcsIF9pbnN0YW5jZS5zb3J0aW5nRmllbGQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnNvcnRpbmdNb2RlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSg4LCBfaW5zdGFuY2Uuc29ydGluZ01vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NvcnRpbmdGaWVsZDogRW50aXR5VmFsdWVTb3J0aW5nLkVudGl0eVZhbHVlU29ydGluZ0ZpZWxkO1xuICBwcml2YXRlIF9zb3J0aW5nTW9kZTogb25kZXdvTmx1MDA5LlNvcnRpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRW50aXR5VmFsdWVTb3J0aW5nIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEVudGl0eVZhbHVlU29ydGluZy5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zb3J0aW5nRmllbGQgPSBfdmFsdWUuc29ydGluZ0ZpZWxkO1xuICAgIHRoaXMuc29ydGluZ01vZGUgPSBfdmFsdWUuc29ydGluZ01vZGU7XG4gICAgRW50aXR5VmFsdWVTb3J0aW5nLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgc29ydGluZ0ZpZWxkKCk6IEVudGl0eVZhbHVlU29ydGluZy5FbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRpbmdGaWVsZDtcbiAgfVxuICBzZXQgc29ydGluZ0ZpZWxkKHZhbHVlOiBFbnRpdHlWYWx1ZVNvcnRpbmcuRW50aXR5VmFsdWVTb3J0aW5nRmllbGQpIHtcbiAgICB0aGlzLl9zb3J0aW5nRmllbGQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc29ydGluZ01vZGUoKTogb25kZXdvTmx1MDA5LlNvcnRpbmdNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGluZ01vZGU7XG4gIH1cbiAgc2V0IHNvcnRpbmdNb2RlKHZhbHVlOiBvbmRld29ObHUwMDkuU29ydGluZ01vZGUpIHtcbiAgICB0aGlzLl9zb3J0aW5nTW9kZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEVudGl0eVZhbHVlU29ydGluZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBFbnRpdHlWYWx1ZVNvcnRpbmcuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzb3J0aW5nRmllbGQ6IHRoaXMuc29ydGluZ0ZpZWxkLFxuICAgICAgc29ydGluZ01vZGU6IHRoaXMuc29ydGluZ01vZGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFbnRpdHlWYWx1ZVNvcnRpbmcuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBzb3J0aW5nRmllbGQ6XG4gICAgICAgIEVudGl0eVZhbHVlU29ydGluZy5FbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZFtcbiAgICAgICAgICB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5zb3J0aW5nRmllbGRcbiAgICAgICAgXSxcbiAgICAgIHNvcnRpbmdNb2RlOlxuICAgICAgICBvbmRld29ObHUwMDkuU29ydGluZ01vZGVbXG4gICAgICAgICAgdGhpcy5zb3J0aW5nTW9kZSA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdNb2RlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdNb2RlXG4gICAgICAgIF1cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEVudGl0eVZhbHVlU29ydGluZyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5VmFsdWVTb3J0aW5nXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzb3J0aW5nRmllbGQ6IEVudGl0eVZhbHVlU29ydGluZy5FbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZDtcbiAgICBzb3J0aW5nTW9kZTogb25kZXdvTmx1MDA5LlNvcnRpbmdNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVZhbHVlU29ydGluZ1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgc29ydGluZ0ZpZWxkOiBzdHJpbmc7XG4gICAgc29ydGluZ01vZGU6IHN0cmluZztcbiAgfVxuICBleHBvcnQgZW51bSBFbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZCB7XG4gICAgTk9fRU5USVRZX1ZBTFVFX1NPUlRJTkcgPSAwLFxuICAgIFNPUlRfRU5USVRZX1ZBTFVFX0JZX0RJU1BMQVlfTkFNRSA9IDEsXG4gICAgU09SVF9FTlRJVFlfVkFMVUVfQllfVkFMVUUgPSAyLFxuICAgIFNPUlRfRU5USVRZX1ZBTFVFX0JZX1NZTk9OWU1fQ09VTlQgPSAzXG4gIH1cbn1cbiJdfQ==
|