@coralogix/rum-cli 1.1.38 → 1.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +2 -0
  2. package/api/base/base.api.ts +48 -56
  3. package/api/dsym/dsym.api.ts +8 -0
  4. package/api/proguard/proguard.api.ts +8 -0
  5. package/api/react-native/react-native.api.ts +8 -0
  6. package/api/source-maps/source-maps.api.ts +8 -0
  7. package/cli/commands/dsym/upload-dsym-command.ts +4 -2
  8. package/cli/commands/proguard/upload-proguard-command.ts +4 -2
  9. package/cli/commands/react-native/upload-react-native-source-maps-command.ts +4 -2
  10. package/cli/commands/source-maps/upload-source-maps-command.ts +4 -2
  11. package/consts/consts.ts +1 -0
  12. package/dist/api/base/base.api.d.ts +10 -9
  13. package/dist/api/base/base.api.js +20 -34
  14. package/dist/api/dsym/dsym.api.d.ts +2 -2
  15. package/dist/api/dsym/dsym.api.js +7 -3
  16. package/dist/api/proguard/proguard.api.d.ts +2 -2
  17. package/dist/api/proguard/proguard.api.js +7 -3
  18. package/dist/api/react-native/react-native.api.d.ts +2 -2
  19. package/dist/api/react-native/react-native.api.js +7 -3
  20. package/dist/api/source-maps/source-maps.api.d.ts +2 -2
  21. package/dist/api/source-maps/source-maps.api.js +7 -3
  22. package/dist/cli/commands/dsym/upload-dsym-command.js +5 -3
  23. package/dist/cli/commands/proguard/upload-proguard-command.js +5 -3
  24. package/dist/cli/commands/react-native/upload-react-native-source-maps-command.js +5 -3
  25. package/dist/cli/commands/source-maps/upload-source-maps-command.js +5 -3
  26. package/dist/consts/consts.js +3 -2
  27. package/dist/grpc-client/grpc-client-factory.d.ts +158 -0
  28. package/dist/models/dsym-commands.model.d.ts +2 -0
  29. package/dist/models/dsym-commands.model.js +1 -1
  30. package/dist/models/proguard-commands.model.d.ts +2 -0
  31. package/dist/models/proguard-commands.model.js +1 -1
  32. package/dist/models/react-native-commands.model.d.ts +2 -0
  33. package/dist/models/react-native-commands.model.js +1 -1
  34. package/dist/models/source-maps-commands.model.d.ts +2 -0
  35. package/dist/models/source-maps-commands.model.js +1 -1
  36. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.d.ts +150 -0
  37. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.js +29 -1
  38. package/dist/proto-models/com/coralogix/blobset/v2/case_file.d.ts +36 -0
  39. package/dist/proto-models/com/coralogix/blobset/v2/case_file.js +161 -0
  40. package/dist/proto-models/com/coralogix/blobset/v2/dsym.d.ts +1 -0
  41. package/dist/proto-models/com/coralogix/blobset/v2/dsym.js +33 -3
  42. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.d.ts +47 -0
  43. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.js +375 -11
  44. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.d.ts +3 -1
  45. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.js +13 -1
  46. package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.d.ts +36 -0
  47. package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.js +161 -0
  48. package/dist/proto-models/com/coralogix/blobset/v2/proguard.d.ts +68 -0
  49. package/dist/proto-models/com/coralogix/blobset/v2/proguard.js +400 -0
  50. package/dist/proto-models/com/coralogix/rum/v2/ai_assist.d.ts +89 -0
  51. package/dist/proto-models/com/coralogix/rum/v2/ai_assist.js +290 -0
  52. package/dist/proto-models/com/coralogix/rum/v2/application_releases.d.ts +38 -0
  53. package/dist/proto-models/com/coralogix/rum/v2/application_releases.js +180 -0
  54. package/dist/proto-models/com/coralogix/rum/v2/merge_error.d.ts +38 -0
  55. package/dist/proto-models/com/coralogix/rum/v2/merge_error.js +171 -0
  56. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.d.ts +19 -0
  57. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.js +225 -10
  58. package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.d.ts +197 -0
  59. package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.js +478 -0
  60. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +107 -0
  61. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +385 -2
  62. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +94 -1
  63. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +300 -2
  64. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.d.ts +5 -1
  65. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.js +25 -1
  66. package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +2 -0
  67. package/dist/proto-models/com/coralogix/rum/v2/template.js +31 -3
  68. package/dist/proto-models/google/protobuf/struct.d.ts +127 -0
  69. package/dist/proto-models/google/protobuf/struct.js +476 -0
  70. package/dist/services/base/base.service.d.ts +1 -1
  71. package/dist/services/base/base.service.js +7 -5
  72. package/dist/utils/upload-mode.utils.d.ts +12 -0
  73. package/dist/utils/upload-mode.utils.js +26 -0
  74. package/dist/utils/version-context.utils.d.ts +20 -0
  75. package/dist/utils/version-context.utils.js +71 -0
  76. package/models/dsym-commands.model.ts +2 -0
  77. package/models/proguard-commands.model.ts +2 -0
  78. package/models/react-native-commands.model.ts +2 -0
  79. package/models/source-maps-commands.model.ts +2 -0
  80. package/package.json +2 -2
  81. package/protofetch.lock +4 -4
  82. package/protofetch.toml +2 -2
  83. package/services/base/base.service.ts +7 -3
  84. package/utils/upload-mode.utils.ts +30 -0
  85. package/utils/version-context.utils.ts +95 -0
  86. package/proto-models/com/coralogix/blobset/v2/audit_log.ts +0 -84
  87. package/proto-models/com/coralogix/blobset/v2/blobset_query_service.ts +0 -36
  88. package/proto-models/com/coralogix/blobset/v2/blobset_service.ts +0 -209
  89. package/proto-models/com/coralogix/blobset/v2/dsym.ts +0 -400
  90. package/proto-models/com/coralogix/blobset/v2/entity_metadata.ts +0 -540
  91. package/proto-models/com/coralogix/blobset/v2/entity_type.ts +0 -56
  92. package/proto-models/com/coralogix/blobset/v2/s3_metadata.ts +0 -154
  93. package/proto-models/com/coralogix/blobset/v2/source_map.ts +0 -418
  94. package/proto-models/com/coralogix/rum/v2/analytics.ts +0 -924
  95. package/proto-models/com/coralogix/rum/v2/audit_log.ts +0 -84
  96. package/proto-models/com/coralogix/rum/v2/chunk.ts +0 -399
  97. package/proto-models/com/coralogix/rum/v2/file.ts +0 -159
  98. package/proto-models/com/coralogix/rum/v2/hide_errors.ts +0 -234
  99. package/proto-models/com/coralogix/rum/v2/release_entity_metadata.ts +0 -699
  100. package/proto-models/com/coralogix/rum/v2/release_entity_type.ts +0 -56
  101. package/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.ts +0 -605
  102. package/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.ts +0 -229
  103. package/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.ts +0 -1679
  104. package/proto-models/com/coralogix/rum/v2/rum_sdk_versions.ts +0 -279
  105. package/proto-models/com/coralogix/rum/v2/rum_service.ts +0 -2158
  106. package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +0 -16
  107. package/proto-models/com/coralogix/rum/v2/rum_settings.ts +0 -215
  108. package/proto-models/com/coralogix/rum/v2/rum_settings_service.ts +0 -283
  109. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +0 -905
  110. package/proto-models/com/coralogix/rum/v2/saved_filter.ts +0 -307
  111. package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -358
  112. package/proto-models/com/coralogix/rum/v2/source_map_release.ts +0 -301
  113. package/proto-models/com/coralogix/rum/v2/template.ts +0 -588
  114. package/proto-models/google/protobuf/descriptor.ts +0 -4921
  115. package/protos/com/coralogix/blobset/v2/audit_log.proto +0 -13
  116. package/protos/com/coralogix/blobset/v2/blobset_query_service.proto +0 -12
  117. package/protos/com/coralogix/blobset/v2/blobset_service.proto +0 -18
  118. package/protos/com/coralogix/blobset/v2/dsym.proto +0 -19
  119. package/protos/com/coralogix/blobset/v2/entity_metadata.proto +0 -35
  120. package/protos/com/coralogix/blobset/v2/entity_type.proto +0 -11
  121. package/protos/com/coralogix/blobset/v2/s3_metadata.proto +0 -14
  122. package/protos/com/coralogix/blobset/v2/source_map.proto +0 -30
  123. package/protos/com/coralogix/rum/v2/analytics.proto +0 -57
  124. package/protos/com/coralogix/rum/v2/audit_log.proto +0 -13
  125. package/protos/com/coralogix/rum/v2/chunk.proto +0 -24
  126. package/protos/com/coralogix/rum/v2/file.proto +0 -8
  127. package/protos/com/coralogix/rum/v2/hide_errors.proto +0 -19
  128. package/protos/com/coralogix/rum/v2/release_entity_metadata.proto +0 -44
  129. package/protos/com/coralogix/rum/v2/release_entity_type.proto +0 -11
  130. package/protos/com/coralogix/rum/v2/rum_hide_errors_service.proto +0 -42
  131. package/protos/com/coralogix/rum/v2/rum_react_native_source_map_service.proto +0 -19
  132. package/protos/com/coralogix/rum/v2/rum_saved_filters_service.proto +0 -117
  133. package/protos/com/coralogix/rum/v2/rum_sdk_versions.proto +0 -17
  134. package/protos/com/coralogix/rum/v2/rum_service.proto +0 -144
  135. package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +0 -4
  136. package/protos/com/coralogix/rum/v2/rum_settings.proto +0 -26
  137. package/protos/com/coralogix/rum/v2/rum_settings_service.proto +0 -23
  138. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +0 -58
  139. package/protos/com/coralogix/rum/v2/saved_filter.proto +0 -28
  140. package/protos/com/coralogix/rum/v2/source_code_file_mapping.proto +0 -16
  141. package/protos/com/coralogix/rum/v2/source_map_release.proto +0 -18
  142. package/protos/com/coralogix/rum/v2/template.proto +0 -40
  143. package/protoset.bin +0 -0
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
+ // versions:
4
+ // protoc-gen-ts_proto v1.181.1
5
+ // protoc v3.19.1
6
+ // source: com/coralogix/rum/v2/rum_merge_erros_service.proto
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.RumMergeErrorsServiceDefinition = exports.GetMergeErrorsResponse = exports.GetMergeErrorsRequest = exports.UpdateMergeErrorsResponse = exports.UpdateMergeErrorsRequest = exports.DeleteMergeErrorsResponse = exports.DeleteMergeErrorsRequest = exports.CreateMergeErrorsResponse = exports.CreateMergeErrorsRequest = exports.protobufPackage = void 0;
12
+ /* eslint-disable */
13
+ const minimal_1 = __importDefault(require("protobufjs/minimal"));
14
+ const merge_error_1 = require("./merge_error");
15
+ exports.protobufPackage = "com.coralogix.rum.v2";
16
+ function createBaseCreateMergeErrorsRequest() {
17
+ return { mergeErrorInfo: undefined };
18
+ }
19
+ exports.CreateMergeErrorsRequest = {
20
+ encode(message, writer = minimal_1.default.Writer.create()) {
21
+ if (message.mergeErrorInfo !== undefined) {
22
+ merge_error_1.MergeErrorInfo.encode(message.mergeErrorInfo, writer.uint32(10).fork()).ldelim();
23
+ }
24
+ return writer;
25
+ },
26
+ decode(input, length) {
27
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
28
+ let end = length === undefined ? reader.len : reader.pos + length;
29
+ const message = createBaseCreateMergeErrorsRequest();
30
+ while (reader.pos < end) {
31
+ const tag = reader.uint32();
32
+ switch (tag >>> 3) {
33
+ case 1:
34
+ if (tag !== 10) {
35
+ break;
36
+ }
37
+ message.mergeErrorInfo = merge_error_1.MergeErrorInfo.decode(reader, reader.uint32());
38
+ continue;
39
+ }
40
+ if ((tag & 7) === 4 || tag === 0) {
41
+ break;
42
+ }
43
+ reader.skipType(tag & 7);
44
+ }
45
+ return message;
46
+ },
47
+ fromJSON(object) {
48
+ return {
49
+ mergeErrorInfo: isSet(object.mergeErrorInfo) ? merge_error_1.MergeErrorInfo.fromJSON(object.mergeErrorInfo) : undefined,
50
+ };
51
+ },
52
+ toJSON(message) {
53
+ const obj = {};
54
+ if (message.mergeErrorInfo !== undefined) {
55
+ obj.mergeErrorInfo = merge_error_1.MergeErrorInfo.toJSON(message.mergeErrorInfo);
56
+ }
57
+ return obj;
58
+ },
59
+ create(base) {
60
+ return exports.CreateMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
61
+ },
62
+ fromPartial(object) {
63
+ const message = createBaseCreateMergeErrorsRequest();
64
+ message.mergeErrorInfo = (object.mergeErrorInfo !== undefined && object.mergeErrorInfo !== null)
65
+ ? merge_error_1.MergeErrorInfo.fromPartial(object.mergeErrorInfo)
66
+ : undefined;
67
+ return message;
68
+ },
69
+ };
70
+ function createBaseCreateMergeErrorsResponse() {
71
+ return { mergeErrors: undefined };
72
+ }
73
+ exports.CreateMergeErrorsResponse = {
74
+ encode(message, writer = minimal_1.default.Writer.create()) {
75
+ if (message.mergeErrors !== undefined) {
76
+ merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
77
+ }
78
+ return writer;
79
+ },
80
+ decode(input, length) {
81
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
82
+ let end = length === undefined ? reader.len : reader.pos + length;
83
+ const message = createBaseCreateMergeErrorsResponse();
84
+ while (reader.pos < end) {
85
+ const tag = reader.uint32();
86
+ switch (tag >>> 3) {
87
+ case 1:
88
+ if (tag !== 10) {
89
+ break;
90
+ }
91
+ message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
92
+ continue;
93
+ }
94
+ if ((tag & 7) === 4 || tag === 0) {
95
+ break;
96
+ }
97
+ reader.skipType(tag & 7);
98
+ }
99
+ return message;
100
+ },
101
+ fromJSON(object) {
102
+ return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
103
+ },
104
+ toJSON(message) {
105
+ const obj = {};
106
+ if (message.mergeErrors !== undefined) {
107
+ obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
108
+ }
109
+ return obj;
110
+ },
111
+ create(base) {
112
+ return exports.CreateMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
113
+ },
114
+ fromPartial(object) {
115
+ const message = createBaseCreateMergeErrorsResponse();
116
+ message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
117
+ ? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
118
+ : undefined;
119
+ return message;
120
+ },
121
+ };
122
+ function createBaseDeleteMergeErrorsRequest() {
123
+ return { ids: [] };
124
+ }
125
+ exports.DeleteMergeErrorsRequest = {
126
+ encode(message, writer = minimal_1.default.Writer.create()) {
127
+ for (const v of message.ids) {
128
+ writer.uint32(10).string(v);
129
+ }
130
+ return writer;
131
+ },
132
+ decode(input, length) {
133
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
134
+ let end = length === undefined ? reader.len : reader.pos + length;
135
+ const message = createBaseDeleteMergeErrorsRequest();
136
+ while (reader.pos < end) {
137
+ const tag = reader.uint32();
138
+ switch (tag >>> 3) {
139
+ case 1:
140
+ if (tag !== 10) {
141
+ break;
142
+ }
143
+ message.ids.push(reader.string());
144
+ continue;
145
+ }
146
+ if ((tag & 7) === 4 || tag === 0) {
147
+ break;
148
+ }
149
+ reader.skipType(tag & 7);
150
+ }
151
+ return message;
152
+ },
153
+ fromJSON(object) {
154
+ return { ids: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.ids) ? object.ids.map((e) => globalThis.String(e)) : [] };
155
+ },
156
+ toJSON(message) {
157
+ var _a;
158
+ const obj = {};
159
+ if ((_a = message.ids) === null || _a === void 0 ? void 0 : _a.length) {
160
+ obj.ids = message.ids;
161
+ }
162
+ return obj;
163
+ },
164
+ create(base) {
165
+ return exports.DeleteMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
166
+ },
167
+ fromPartial(object) {
168
+ var _a;
169
+ const message = createBaseDeleteMergeErrorsRequest();
170
+ message.ids = ((_a = object.ids) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
171
+ return message;
172
+ },
173
+ };
174
+ function createBaseDeleteMergeErrorsResponse() {
175
+ return { ids: [] };
176
+ }
177
+ exports.DeleteMergeErrorsResponse = {
178
+ encode(message, writer = minimal_1.default.Writer.create()) {
179
+ for (const v of message.ids) {
180
+ writer.uint32(10).string(v);
181
+ }
182
+ return writer;
183
+ },
184
+ decode(input, length) {
185
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
186
+ let end = length === undefined ? reader.len : reader.pos + length;
187
+ const message = createBaseDeleteMergeErrorsResponse();
188
+ while (reader.pos < end) {
189
+ const tag = reader.uint32();
190
+ switch (tag >>> 3) {
191
+ case 1:
192
+ if (tag !== 10) {
193
+ break;
194
+ }
195
+ message.ids.push(reader.string());
196
+ continue;
197
+ }
198
+ if ((tag & 7) === 4 || tag === 0) {
199
+ break;
200
+ }
201
+ reader.skipType(tag & 7);
202
+ }
203
+ return message;
204
+ },
205
+ fromJSON(object) {
206
+ return { ids: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.ids) ? object.ids.map((e) => globalThis.String(e)) : [] };
207
+ },
208
+ toJSON(message) {
209
+ var _a;
210
+ const obj = {};
211
+ if ((_a = message.ids) === null || _a === void 0 ? void 0 : _a.length) {
212
+ obj.ids = message.ids;
213
+ }
214
+ return obj;
215
+ },
216
+ create(base) {
217
+ return exports.DeleteMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
218
+ },
219
+ fromPartial(object) {
220
+ var _a;
221
+ const message = createBaseDeleteMergeErrorsResponse();
222
+ message.ids = ((_a = object.ids) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
223
+ return message;
224
+ },
225
+ };
226
+ function createBaseUpdateMergeErrorsRequest() {
227
+ return { mergeErrors: undefined };
228
+ }
229
+ exports.UpdateMergeErrorsRequest = {
230
+ encode(message, writer = minimal_1.default.Writer.create()) {
231
+ if (message.mergeErrors !== undefined) {
232
+ merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
233
+ }
234
+ return writer;
235
+ },
236
+ decode(input, length) {
237
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
238
+ let end = length === undefined ? reader.len : reader.pos + length;
239
+ const message = createBaseUpdateMergeErrorsRequest();
240
+ while (reader.pos < end) {
241
+ const tag = reader.uint32();
242
+ switch (tag >>> 3) {
243
+ case 1:
244
+ if (tag !== 10) {
245
+ break;
246
+ }
247
+ message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
248
+ continue;
249
+ }
250
+ if ((tag & 7) === 4 || tag === 0) {
251
+ break;
252
+ }
253
+ reader.skipType(tag & 7);
254
+ }
255
+ return message;
256
+ },
257
+ fromJSON(object) {
258
+ return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
259
+ },
260
+ toJSON(message) {
261
+ const obj = {};
262
+ if (message.mergeErrors !== undefined) {
263
+ obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
264
+ }
265
+ return obj;
266
+ },
267
+ create(base) {
268
+ return exports.UpdateMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
269
+ },
270
+ fromPartial(object) {
271
+ const message = createBaseUpdateMergeErrorsRequest();
272
+ message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
273
+ ? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
274
+ : undefined;
275
+ return message;
276
+ },
277
+ };
278
+ function createBaseUpdateMergeErrorsResponse() {
279
+ return { mergeErrors: undefined };
280
+ }
281
+ exports.UpdateMergeErrorsResponse = {
282
+ encode(message, writer = minimal_1.default.Writer.create()) {
283
+ if (message.mergeErrors !== undefined) {
284
+ merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
285
+ }
286
+ return writer;
287
+ },
288
+ decode(input, length) {
289
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
290
+ let end = length === undefined ? reader.len : reader.pos + length;
291
+ const message = createBaseUpdateMergeErrorsResponse();
292
+ while (reader.pos < end) {
293
+ const tag = reader.uint32();
294
+ switch (tag >>> 3) {
295
+ case 1:
296
+ if (tag !== 10) {
297
+ break;
298
+ }
299
+ message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
300
+ continue;
301
+ }
302
+ if ((tag & 7) === 4 || tag === 0) {
303
+ break;
304
+ }
305
+ reader.skipType(tag & 7);
306
+ }
307
+ return message;
308
+ },
309
+ fromJSON(object) {
310
+ return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
311
+ },
312
+ toJSON(message) {
313
+ const obj = {};
314
+ if (message.mergeErrors !== undefined) {
315
+ obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
316
+ }
317
+ return obj;
318
+ },
319
+ create(base) {
320
+ return exports.UpdateMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
321
+ },
322
+ fromPartial(object) {
323
+ const message = createBaseUpdateMergeErrorsResponse();
324
+ message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
325
+ ? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
326
+ : undefined;
327
+ return message;
328
+ },
329
+ };
330
+ function createBaseGetMergeErrorsRequest() {
331
+ return { id: undefined };
332
+ }
333
+ exports.GetMergeErrorsRequest = {
334
+ encode(message, writer = minimal_1.default.Writer.create()) {
335
+ if (message.id !== undefined) {
336
+ writer.uint32(10).string(message.id);
337
+ }
338
+ return writer;
339
+ },
340
+ decode(input, length) {
341
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
342
+ let end = length === undefined ? reader.len : reader.pos + length;
343
+ const message = createBaseGetMergeErrorsRequest();
344
+ while (reader.pos < end) {
345
+ const tag = reader.uint32();
346
+ switch (tag >>> 3) {
347
+ case 1:
348
+ if (tag !== 10) {
349
+ break;
350
+ }
351
+ message.id = reader.string();
352
+ continue;
353
+ }
354
+ if ((tag & 7) === 4 || tag === 0) {
355
+ break;
356
+ }
357
+ reader.skipType(tag & 7);
358
+ }
359
+ return message;
360
+ },
361
+ fromJSON(object) {
362
+ return { id: isSet(object.id) ? globalThis.String(object.id) : undefined };
363
+ },
364
+ toJSON(message) {
365
+ const obj = {};
366
+ if (message.id !== undefined) {
367
+ obj.id = message.id;
368
+ }
369
+ return obj;
370
+ },
371
+ create(base) {
372
+ return exports.GetMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
373
+ },
374
+ fromPartial(object) {
375
+ var _a;
376
+ const message = createBaseGetMergeErrorsRequest();
377
+ message.id = (_a = object.id) !== null && _a !== void 0 ? _a : undefined;
378
+ return message;
379
+ },
380
+ };
381
+ function createBaseGetMergeErrorsResponse() {
382
+ return { mergeErrors: [] };
383
+ }
384
+ exports.GetMergeErrorsResponse = {
385
+ encode(message, writer = minimal_1.default.Writer.create()) {
386
+ for (const v of message.mergeErrors) {
387
+ merge_error_1.MergeErrors.encode(v, writer.uint32(10).fork()).ldelim();
388
+ }
389
+ return writer;
390
+ },
391
+ decode(input, length) {
392
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
393
+ let end = length === undefined ? reader.len : reader.pos + length;
394
+ const message = createBaseGetMergeErrorsResponse();
395
+ while (reader.pos < end) {
396
+ const tag = reader.uint32();
397
+ switch (tag >>> 3) {
398
+ case 1:
399
+ if (tag !== 10) {
400
+ break;
401
+ }
402
+ message.mergeErrors.push(merge_error_1.MergeErrors.decode(reader, reader.uint32()));
403
+ continue;
404
+ }
405
+ if ((tag & 7) === 4 || tag === 0) {
406
+ break;
407
+ }
408
+ reader.skipType(tag & 7);
409
+ }
410
+ return message;
411
+ },
412
+ fromJSON(object) {
413
+ return {
414
+ mergeErrors: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.mergeErrors)
415
+ ? object.mergeErrors.map((e) => merge_error_1.MergeErrors.fromJSON(e))
416
+ : [],
417
+ };
418
+ },
419
+ toJSON(message) {
420
+ var _a;
421
+ const obj = {};
422
+ if ((_a = message.mergeErrors) === null || _a === void 0 ? void 0 : _a.length) {
423
+ obj.mergeErrors = message.mergeErrors.map((e) => merge_error_1.MergeErrors.toJSON(e));
424
+ }
425
+ return obj;
426
+ },
427
+ create(base) {
428
+ return exports.GetMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
429
+ },
430
+ fromPartial(object) {
431
+ var _a;
432
+ const message = createBaseGetMergeErrorsResponse();
433
+ message.mergeErrors = ((_a = object.mergeErrors) === null || _a === void 0 ? void 0 : _a.map((e) => merge_error_1.MergeErrors.fromPartial(e))) || [];
434
+ return message;
435
+ },
436
+ };
437
+ exports.RumMergeErrorsServiceDefinition = {
438
+ name: "RumMergeErrorsService",
439
+ fullName: "com.coralogix.rum.v2.RumMergeErrorsService",
440
+ methods: {
441
+ createMergeErrors: {
442
+ name: "CreateMergeErrors",
443
+ requestType: exports.CreateMergeErrorsRequest,
444
+ requestStream: false,
445
+ responseType: exports.CreateMergeErrorsResponse,
446
+ responseStream: false,
447
+ options: {},
448
+ },
449
+ deleteMergeErrors: {
450
+ name: "DeleteMergeErrors",
451
+ requestType: exports.DeleteMergeErrorsRequest,
452
+ requestStream: false,
453
+ responseType: exports.DeleteMergeErrorsResponse,
454
+ responseStream: false,
455
+ options: {},
456
+ },
457
+ updateMergeErrors: {
458
+ name: "UpdateMergeErrors",
459
+ requestType: exports.UpdateMergeErrorsRequest,
460
+ requestStream: false,
461
+ responseType: exports.UpdateMergeErrorsResponse,
462
+ responseStream: false,
463
+ options: {},
464
+ },
465
+ getMergeErrors: {
466
+ name: "GetMergeErrors",
467
+ requestType: exports.GetMergeErrorsRequest,
468
+ requestStream: false,
469
+ responseType: exports.GetMergeErrorsResponse,
470
+ responseStream: false,
471
+ options: {},
472
+ },
473
+ },
474
+ };
475
+ function isSet(value) {
476
+ return value !== null && value !== undefined;
477
+ }
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtX21lcmdlX2Vycm9zX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX21lcmdlX2Vycm9zX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNEQUFzRDtBQUN0RCxZQUFZO0FBQ1osa0NBQWtDO0FBQ2xDLGlDQUFpQztBQUNqQyw2REFBNkQ7Ozs7OztBQUU3RCxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBQ3JDLCtDQUE0RDtBQUUvQyxRQUFBLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztBQWtDdEQsU0FBUyxrQ0FBa0M7SUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRVksUUFBQSx3QkFBd0IsR0FBRztJQUN0QyxNQUFNLENBQUMsT0FBaUMsRUFBRSxTQUFxQixpQkFBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDaEYsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUN4Qyw0QkFBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNsRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBOEIsRUFBRSxNQUFlO1FBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxpQkFBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FB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O1lBQ3JDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxpQ0FBeUI7WUFDdkMsY0FBYyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFLEVBQUU7U0FDWjtRQUNELGlCQUFpQixFQUFFO1lBQ2pCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsV0FBVyxFQUFFLGdDQUF3QjtZQUNyQyxhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsaUNBQXlCO1lBQ3ZDLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLE9BQU8sRUFBRSxFQUFFO1NBQ1o7UUFDRCxpQkFBaUIsRUFBRTtZQUNqQixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLFdBQVcsRUFBRSxnQ0FBd0I7WUFDckMsYUFBYSxFQUFFLEtBQUs7WUFDcEIsWUFBWSxFQUFFLGlDQUF5QjtZQUN2QyxjQUFjLEVBQUUsS0FBSztZQUNyQixPQUFPLEVBQUUsRUFBRTtTQUNaO1FBQ0QsY0FBYyxFQUFFO1lBQ2QsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixXQUFXLEVBQUUsNkJBQXFCO1lBQ2xDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSw4QkFBc0I7WUFDcEMsY0FBYyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGO0NBQ08sQ0FBQztBQVdYLFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDdkIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHByb3RvYy1nZW4tdHNfcHJvdG8uIERPIE5PVCBFRElULlxuLy8gdmVyc2lvbnM6XG4vLyAgIHByb3RvYy1nZW4tdHNfcHJvdG8gIHYxLjE4MS4xXG4vLyAgIHByb3RvYyAgICAgICAgICAgICAgIHYzLjE5LjFcbi8vIHNvdXJjZTogY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX21lcmdlX2Vycm9zX3NlcnZpY2UucHJvdG9cblxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuaW1wb3J0IHsgTWVyZ2VFcnJvckluZm8sIE1lcmdlRXJyb3JzIH0gZnJvbSBcIi4vbWVyZ2VfZXJyb3JcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICBtZXJnZUVycm9ySW5mbzogTWVyZ2VFcnJvckluZm8gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gIG1lcmdlRXJyb3JzOiBNZXJnZUVycm9ycyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICBpZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICBpZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIG1lcmdlRXJyb3JzOiBNZXJnZUVycm9ycyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgbWVyZ2VFcnJvcnM6IE1lcmdlRXJyb3JzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICBtZXJnZUVycm9yczogTWVyZ2VFcnJvcnNbXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdCgpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICByZXR1cm4geyBtZXJnZUVycm9ySW5mbzogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3QsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tZXJnZUVycm9ySW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBNZXJnZUVycm9ySW5mby5lbmNvZGUobWVzc2FnZS5tZXJnZUVycm9ySW5mbywgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXJnZUVycm9ySW5mbyA9IE1lcmdlRXJyb3JJbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBtZXJnZUVycm9ySW5mbzogaXNTZXQob2JqZWN0Lm1lcmdlRXJyb3JJbmZvKSA/IE1lcmdlRXJyb3JJbmZvLmZyb21KU09OKG9iamVjdC5tZXJnZUVycm9ySW5mbykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5tZXJnZUVycm9ySW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoubWVyZ2VFcnJvckluZm8gPSBNZXJnZUVycm9ySW5mby50b0pTT04obWVzc2FnZS5tZXJnZUVycm9ySW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Q+KTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgICByZXR1cm4gQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdD4pOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5tZXJnZUVycm9ySW5mbyA9IChvYmplY3QubWVyZ2VFcnJvckluZm8gIT09IHVuZGVmaW5lZCAmJiBvYmplY3QubWVyZ2VFcnJvckluZm8gIT09IG51bGwpXG4gICAgICA/IE1lcmdlRXJyb3JJbmZvLmZyb21QYXJ0aWFsKG9iamVjdC5tZXJnZUVycm9ySW5mbylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gIHJldHVybiB7IG1lcmdlRXJyb3JzOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWVyZ2VFcnJvcnMuZW5jb2RlKG1lc3NhZ2UubWVyZ2VFcnJvcnMsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXJnZUVycm9ycyA9IE1lcmdlRXJyb3JzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4geyBtZXJnZUVycm9yczogaXNTZXQob2JqZWN0Lm1lcmdlRXJyb3JzKSA/IE1lcmdlRXJyb3JzLmZyb21KU09OKG9iamVjdC5tZXJnZUVycm9ycykgOiB1bmRlZmluZWQgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMudG9KU09OKG1lc3NhZ2UubWVyZ2VFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8Q3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4gQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlPik6IENyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSAob2JqZWN0Lm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm1lcmdlRXJyb3JzICE9PSBudWxsKVxuICAgICAgPyBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChvYmplY3QubWVyZ2VFcnJvcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTogRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgcmV0dXJuIHsgaWRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuaWRzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcodiEpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiB7IGlkczogZ2xvYmFsVGhpcy5BcnJheS5pc0FycmF5KG9iamVjdD8uaWRzKSA/IG9iamVjdC5pZHMubWFwKChlOiBhbnkpID0+IGdsb2JhbFRoaXMuU3RyaW5nKGUpKSA6IFtdIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWRzPy5sZW5ndGgpIHtcbiAgICAgIG9iai5pZHMgPSBtZXNzYWdlLmlkcztcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdD4pOiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICBtZXNzYWdlLmlkcyA9IG9iamVjdC5pZHM/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgcmV0dXJuIHsgaWRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5pZHMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZHMucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHsgaWRzOiBnbG9iYWxUaGlzLkFycmF5LmlzQXJyYXkob2JqZWN0Py5pZHMpID8gb2JqZWN0Lmlkcy5tYXAoKGU6IGFueSkgPT4gZ2xvYmFsVGhpcy5TdHJpbmcoZSkpIDogW10gfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWRzPy5sZW5ndGgpIHtcbiAgICAgIG9iai5pZHMgPSBtZXNzYWdlLmlkcztcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2U+KTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLmlkcyA9IG9iamVjdC5pZHM/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIHJldHVybiB7IG1lcmdlRXJyb3JzOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZShtZXNzYWdlLm1lcmdlRXJyb3JzLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcGRhdGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgbWVyZ2VFcnJvcnM6IGlzU2V0KG9iamVjdC5tZXJnZUVycm9ycykgPyBNZXJnZUVycm9ycy5mcm9tSlNPTihvYmplY3QubWVyZ2VFcnJvcnMpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMudG9KU09OKG1lc3NhZ2UubWVyZ2VFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxVcGRhdGVNZXJnZUVycm9yc1JlcXVlc3Q+KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCgpO1xuICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSAob2JqZWN0Lm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm1lcmdlRXJyb3JzICE9PSBudWxsKVxuICAgICAgPyBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChvYmplY3QubWVyZ2VFcnJvcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICByZXR1cm4geyBtZXJnZUVycm9yczogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZShtZXNzYWdlLm1lcmdlRXJyb3JzLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSBNZXJnZUVycm9ycy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHsgbWVyZ2VFcnJvcnM6IGlzU2V0KG9iamVjdC5tZXJnZUVycm9ycykgPyBNZXJnZUVycm9ycy5mcm9tSlNPTihvYmplY3QubWVyZ2VFcnJvcnMpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5tZXJnZUVycm9ycyA9IE1lcmdlRXJyb3JzLnRvSlNPTihtZXNzYWdlLm1lcmdlRXJyb3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2U+KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8VXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLm1lcmdlRXJyb3JzID0gKG9iamVjdC5tZXJnZUVycm9ycyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5tZXJnZUVycm9ycyAhPT0gbnVsbClcbiAgICAgID8gTWVyZ2VFcnJvcnMuZnJvbVBhcnRpYWwob2JqZWN0Lm1lcmdlRXJyb3JzKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlR2V0TWVyZ2VFcnJvcnNSZXF1ZXN0KCk6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIHJldHVybiB7IGlkOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldE1lcmdlRXJyb3JzUmVxdWVzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0TWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgaWQ6IGlzU2V0KG9iamVjdC5pZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuaWQpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLmlkID0gbWVzc2FnZS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdldE1lcmdlRXJyb3JzUmVxdWVzdD4pOiBHZXRNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiBHZXRNZXJnZUVycm9yc1JlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8R2V0TWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICBtZXNzYWdlLmlkID0gb2JqZWN0LmlkID8/IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1Jlc3BvbnNlKCk6IEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICByZXR1cm4geyBtZXJnZUVycm9yczogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldE1lcmdlRXJyb3JzUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubWVyZ2VFcnJvcnMpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldE1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lcmdlRXJyb3JzLnB1c2goTWVyZ2VFcnJvcnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVyZ2VFcnJvcnM6IGdsb2JhbFRoaXMuQXJyYXkuaXNBcnJheShvYmplY3Q/Lm1lcmdlRXJyb3JzKVxuICAgICAgICA/IG9iamVjdC5tZXJnZUVycm9ycy5tYXAoKGU6IGFueSkgPT4gTWVyZ2VFcnJvcnMuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0TWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gbWVzc2FnZS5tZXJnZUVycm9ycy5tYXAoKGUpID0+IE1lcmdlRXJyb3JzLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXRNZXJnZUVycm9yc1Jlc3BvbnNlPik6IEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIHJldHVybiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldE1lcmdlRXJyb3JzUmVzcG9uc2U+KTogR2V0TWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5tZXJnZUVycm9ycyA9IG9iamVjdC5tZXJnZUVycm9ycz8ubWFwKChlKSA9PiBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5leHBvcnQgdHlwZSBSdW1NZXJnZUVycm9yc1NlcnZpY2VEZWZpbml0aW9uID0gdHlwZW9mIFJ1bU1lcmdlRXJyb3JzU2VydmljZURlZmluaXRpb247XG5leHBvcnQgY29uc3QgUnVtTWVyZ2VFcnJvcnNTZXJ2aWNlRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogXCJSdW1NZXJnZUVycm9yc1NlcnZpY2VcIixcbiAgZnVsbE5hbWU6IFwiY29tLmNvcmFsb2dpeC5ydW0udjIuUnVtTWVyZ2VFcnJvcnNTZXJ2aWNlXCIsXG4gIG1ldGhvZHM6IHtcbiAgICBjcmVhdGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJDcmVhdGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IENyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBkZWxldGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJEZWxldGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICB1cGRhdGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJVcGRhdGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBnZXRNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJHZXRNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBnbG9iYWxUaGlzLkFycmF5PGluZmVyIFU+ID8gZ2xvYmFsVGhpcy5BcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFJlYWRvbmx5QXJyYXk8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIHsgJGNhc2U6IHN0cmluZyB9ID8geyBbSyBpbiBrZXlvZiBPbWl0PFQsIFwiJGNhc2VcIj5dPzogRGVlcFBhcnRpYWw8VFtLXT4gfSAmIHsgJGNhc2U6IFRbXCIkY2FzZVwiXSB9XG4gIDogVCBleHRlbmRzIHt9ID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgOiBQYXJ0aWFsPFQ+O1xuXG5mdW5jdGlvbiBpc1NldCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuIl19