@vendasta/meetings 0.72.0 → 0.74.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.
Files changed (180) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_internal/enums/dayofweek.enum.mjs +18 -0
  3. package/esm2020/lib/_internal/enums/index.mjs +11 -0
  4. package/esm2020/lib/_internal/enums/meeting-source.enum.mjs +20 -0
  5. package/esm2020/lib/_internal/enums/shared.enum.mjs +21 -0
  6. package/{esm2015/lib/_internal/enums/zoom.enum.js → esm2020/lib/_internal/enums/zoom.enum.mjs} +1 -1
  7. package/esm2020/lib/_internal/google-meet.api.service.mjs +41 -0
  8. package/esm2020/lib/_internal/index.mjs +15 -0
  9. package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
  10. package/esm2020/lib/_internal/interfaces/datetime.interface.mjs +8 -0
  11. package/esm2020/lib/_internal/interfaces/dayofweek.interface.mjs +8 -0
  12. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/google-meet.interface.mjs +8 -0
  14. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  15. package/esm2020/lib/_internal/interfaces/meeting-guest.interface.mjs +2 -0
  16. package/esm2020/lib/_internal/interfaces/meeting-host.interface.mjs +2 -0
  17. package/esm2020/lib/_internal/interfaces/meeting-source.interface.mjs +8 -0
  18. package/esm2020/lib/_internal/interfaces/meeting-type.interface.mjs +8 -0
  19. package/esm2020/lib/_internal/interfaces/shared.interface.mjs +2 -0
  20. package/esm2020/lib/_internal/interfaces/timeofday.interface.mjs +8 -0
  21. package/esm2020/lib/_internal/interfaces/zoom.interface.mjs +8 -0
  22. package/esm2020/lib/_internal/meeting-guest.api.service.mjs +84 -0
  23. package/esm2020/lib/_internal/meeting-host.api.service.mjs +170 -0
  24. package/esm2020/lib/_internal/meeting-source-api.api.service.mjs +41 -0
  25. package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
  26. package/esm2020/lib/_internal/objects/datetime.mjs +77 -0
  27. package/esm2020/lib/_internal/objects/dayofweek.mjs +7 -0
  28. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  29. package/esm2020/lib/_internal/objects/google-meet.mjs +539 -0
  30. package/esm2020/lib/_internal/objects/index.mjs +18 -0
  31. package/esm2020/lib/_internal/objects/meeting-guest.mjs +511 -0
  32. package/esm2020/lib/_internal/objects/meeting-host.mjs +1485 -0
  33. package/esm2020/lib/_internal/objects/meeting-source.mjs +121 -0
  34. package/esm2020/lib/_internal/objects/meeting-type.mjs +119 -0
  35. package/esm2020/lib/_internal/objects/shared.mjs +426 -0
  36. package/esm2020/lib/_internal/objects/timeofday.mjs +36 -0
  37. package/esm2020/lib/_internal/objects/zoom.mjs +377 -0
  38. package/esm2020/lib/_internal/zoom.api.service.mjs +41 -0
  39. package/esm2020/lib/guest/guest.service.mjs +86 -0
  40. package/esm2020/lib/guest/index.mjs +2 -0
  41. package/esm2020/lib/host/host.service.mjs +308 -0
  42. package/esm2020/lib/host/url.mjs +39 -0
  43. package/esm2020/lib/index.mjs +8 -0
  44. package/esm2020/lib/meetings.service.mjs +168 -0
  45. package/esm2020/lib/shared/availability.mjs +2 -0
  46. package/esm2020/lib/shared/calendar.mjs +29 -0
  47. package/esm2020/lib/shared/duration.mjs +41 -0
  48. package/esm2020/lib/shared/environment.mjs +17 -0
  49. package/esm2020/lib/shared/fieldmask.mjs +6 -0
  50. package/esm2020/lib/shared/host-id.mjs +20 -0
  51. package/esm2020/lib/shared/host-url-map.mjs +2 -0
  52. package/esm2020/lib/shared/host-user.mjs +8 -0
  53. package/esm2020/lib/shared/host.mjs +8 -0
  54. package/esm2020/lib/shared/index.mjs +14 -0
  55. package/esm2020/lib/shared/meeting-type.mjs +60 -0
  56. package/esm2020/lib/shared/meeting.mjs +89 -0
  57. package/esm2020/lib/shared/paged-response.mjs +8 -0
  58. package/esm2020/lib/shared/preferences.mjs +12 -0
  59. package/esm2020/lib/shared/time-span.mjs +7 -0
  60. package/esm2020/public_api.mjs +2 -0
  61. package/esm2020/vendasta-meetings.mjs +5 -0
  62. package/fesm2015/{vendasta-meetings.js → vendasta-meetings.mjs} +554 -1264
  63. package/fesm2015/vendasta-meetings.mjs.map +1 -0
  64. package/fesm2020/vendasta-meetings.mjs +5086 -0
  65. package/fesm2020/vendasta-meetings.mjs.map +1 -0
  66. package/lib/_generated/host.service.d.ts +5 -9
  67. package/lib/_internal/google-meet.api.service.d.ts +4 -0
  68. package/lib/_internal/index.d.ts +3 -3
  69. package/lib/_internal/interfaces/meeting-host.interface.d.ts +2 -1
  70. package/lib/_internal/interfaces/meeting-source.interface.d.ts +1 -1
  71. package/lib/_internal/interfaces/meeting-type.interface.d.ts +1 -1
  72. package/lib/_internal/interfaces/shared.interface.d.ts +1 -1
  73. package/lib/_internal/interfaces/zoom.interface.d.ts +1 -1
  74. package/lib/_internal/meeting-guest.api.service.d.ts +4 -0
  75. package/lib/_internal/meeting-host.api.service.d.ts +4 -0
  76. package/lib/_internal/meeting-source-api.api.service.d.ts +4 -0
  77. package/lib/_internal/objects/date-range.d.ts +1 -1
  78. package/lib/_internal/objects/datetime.d.ts +1 -1
  79. package/lib/_internal/objects/field-mask.d.ts +1 -1
  80. package/lib/_internal/objects/google-meet.d.ts +1 -1
  81. package/lib/_internal/objects/meeting-guest.d.ts +1 -1
  82. package/lib/_internal/objects/meeting-host.d.ts +3 -2
  83. package/lib/_internal/objects/meeting-source.d.ts +2 -2
  84. package/lib/_internal/objects/meeting-type.d.ts +2 -2
  85. package/lib/_internal/objects/shared.d.ts +2 -2
  86. package/lib/_internal/objects/timeofday.d.ts +1 -1
  87. package/lib/_internal/objects/zoom.d.ts +2 -2
  88. package/lib/_internal/zoom.api.service.d.ts +4 -0
  89. package/lib/guest/guest.service.d.ts +5 -4
  90. package/lib/guest/index.d.ts +0 -1
  91. package/lib/host/host.service.d.ts +7 -6
  92. package/lib/host/url.d.ts +1 -1
  93. package/lib/index.d.ts +1 -4
  94. package/lib/meetings.service.d.ts +3 -0
  95. package/lib/shared/availability.d.ts +2 -2
  96. package/lib/shared/calendar.d.ts +1 -1
  97. package/lib/shared/environment.d.ts +8 -0
  98. package/lib/shared/fieldmask.d.ts +1 -1
  99. package/lib/shared/host.d.ts +1 -1
  100. package/lib/shared/meeting-type.d.ts +2 -2
  101. package/lib/shared/meeting.d.ts +2 -2
  102. package/lib/shared/preferences.d.ts +3 -3
  103. package/lib/shared/time-span.d.ts +1 -1
  104. package/package.json +26 -15
  105. package/public_api.d.ts +1 -1
  106. package/src/README.md +12 -0
  107. package/vendasta-meetings.d.ts +1 -10
  108. package/bundles/vendasta-meetings.umd.js +0 -6217
  109. package/bundles/vendasta-meetings.umd.js.map +0 -1
  110. package/bundles/vendasta-meetings.umd.min.js +0 -16
  111. package/bundles/vendasta-meetings.umd.min.js.map +0 -1
  112. package/esm2015/lib/_generated/host.service.js +0 -62
  113. package/esm2015/lib/_internal/enums/dayofweek.enum.js +0 -18
  114. package/esm2015/lib/_internal/enums/index.js +0 -11
  115. package/esm2015/lib/_internal/enums/meeting-source.enum.js +0 -20
  116. package/esm2015/lib/_internal/enums/shared.enum.js +0 -21
  117. package/esm2015/lib/_internal/google-meet.api.service.js +0 -38
  118. package/esm2015/lib/_internal/index.js +0 -15
  119. package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
  120. package/esm2015/lib/_internal/interfaces/datetime.interface.js +0 -8
  121. package/esm2015/lib/_internal/interfaces/dayofweek.interface.js +0 -8
  122. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
  123. package/esm2015/lib/_internal/interfaces/google-meet.interface.js +0 -8
  124. package/esm2015/lib/_internal/interfaces/index.js +0 -2
  125. package/esm2015/lib/_internal/interfaces/meeting-guest.interface.js +0 -2
  126. package/esm2015/lib/_internal/interfaces/meeting-host.interface.js +0 -2
  127. package/esm2015/lib/_internal/interfaces/meeting-source.interface.js +0 -8
  128. package/esm2015/lib/_internal/interfaces/meeting-type.interface.js +0 -8
  129. package/esm2015/lib/_internal/interfaces/shared.interface.js +0 -2
  130. package/esm2015/lib/_internal/interfaces/timeofday.interface.js +0 -8
  131. package/esm2015/lib/_internal/interfaces/zoom.interface.js +0 -8
  132. package/esm2015/lib/_internal/meeting-guest.api.service.js +0 -81
  133. package/esm2015/lib/_internal/meeting-host.api.service.js +0 -167
  134. package/esm2015/lib/_internal/meeting-source-api.api.service.js +0 -38
  135. package/esm2015/lib/_internal/meetings.module.js +0 -33
  136. package/esm2015/lib/_internal/objects/date-range.js +0 -40
  137. package/esm2015/lib/_internal/objects/datetime.js +0 -92
  138. package/esm2015/lib/_internal/objects/dayofweek.js +0 -7
  139. package/esm2015/lib/_internal/objects/field-mask.js +0 -30
  140. package/esm2015/lib/_internal/objects/google-meet.js +0 -646
  141. package/esm2015/lib/_internal/objects/index.js +0 -18
  142. package/esm2015/lib/_internal/objects/meeting-guest.js +0 -591
  143. package/esm2015/lib/_internal/objects/meeting-host.js +0 -1699
  144. package/esm2015/lib/_internal/objects/meeting-source.js +0 -139
  145. package/esm2015/lib/_internal/objects/meeting-type.js +0 -142
  146. package/esm2015/lib/_internal/objects/shared.js +0 -504
  147. package/esm2015/lib/_internal/objects/timeofday.js +0 -42
  148. package/esm2015/lib/_internal/objects/zoom.js +0 -456
  149. package/esm2015/lib/_internal/zoom.api.service.js +0 -38
  150. package/esm2015/lib/guest/guest.module.js +0 -16
  151. package/esm2015/lib/guest/guest.service.js +0 -82
  152. package/esm2015/lib/guest/index.js +0 -3
  153. package/esm2015/lib/host/host.module.js +0 -16
  154. package/esm2015/lib/host/host.service.js +0 -283
  155. package/esm2015/lib/host/url.js +0 -39
  156. package/esm2015/lib/index.js +0 -11
  157. package/esm2015/lib/meetings.module.js +0 -22
  158. package/esm2015/lib/meetings.service.js +0 -165
  159. package/esm2015/lib/shared/availability.js +0 -2
  160. package/esm2015/lib/shared/calendar.js +0 -29
  161. package/esm2015/lib/shared/duration.js +0 -41
  162. package/esm2015/lib/shared/fieldmask.js +0 -6
  163. package/esm2015/lib/shared/host-id.js +0 -20
  164. package/esm2015/lib/shared/host-url-map.js +0 -2
  165. package/esm2015/lib/shared/host-user.js +0 -8
  166. package/esm2015/lib/shared/host.js +0 -8
  167. package/esm2015/lib/shared/index.js +0 -14
  168. package/esm2015/lib/shared/meeting-type.js +0 -52
  169. package/esm2015/lib/shared/meeting.js +0 -89
  170. package/esm2015/lib/shared/paged-response.js +0 -8
  171. package/esm2015/lib/shared/preferences.js +0 -12
  172. package/esm2015/lib/shared/time-span.js +0 -7
  173. package/esm2015/public_api.js +0 -2
  174. package/esm2015/vendasta-meetings.js +0 -12
  175. package/fesm2015/vendasta-meetings.js.map +0 -1
  176. package/lib/_internal/meetings.module.d.ts +0 -2
  177. package/lib/guest/guest.module.d.ts +0 -2
  178. package/lib/host/host.module.d.ts +0 -2
  179. package/lib/meetings.module.d.ts +0 -2
  180. package/vendasta-meetings.metadata.json +0 -1
@@ -1,646 +0,0 @@
1
- export function enumStringToValue(enumRef, value) {
2
- if (typeof value === 'number') {
3
- return value;
4
- }
5
- return enumRef[value];
6
- }
7
- export class GoogleMeetConferenceData {
8
- constructor(kwargs) {
9
- if (!kwargs) {
10
- return;
11
- }
12
- Object.assign(this, kwargs);
13
- }
14
- static fromProto(proto) {
15
- let m = new GoogleMeetConferenceData();
16
- m = Object.assign(m, proto);
17
- if (proto.conferenceSolution) {
18
- m.conferenceSolution = GoogleMeetConferenceSolution.fromProto(proto.conferenceSolution);
19
- }
20
- if (proto.createRequest) {
21
- m.createRequest = GoogleMeetCreateConferenceRequest.fromProto(proto.createRequest);
22
- }
23
- if (proto.entryPoints) {
24
- m.entryPoints = proto.entryPoints.map(GoogleMeetEntryPoint.fromProto);
25
- }
26
- return m;
27
- }
28
- toApiJson() {
29
- if (typeof this.conferenceId === 'undefined' &&
30
- typeof this.conferenceSolution === 'undefined' &&
31
- typeof this.createRequest === 'undefined' &&
32
- typeof this.entryPoints === 'undefined' &&
33
- typeof this.notes === 'undefined' &&
34
- typeof this.signature === 'undefined') {
35
- return {};
36
- }
37
- const toReturn = {};
38
- if (typeof this.conferenceId !== 'undefined') {
39
- toReturn['conferenceId'] = this.conferenceId;
40
- }
41
- if (typeof this.conferenceSolution !== 'undefined' && this.conferenceSolution !== null) {
42
- toReturn['conferenceSolution'] = 'toApiJson' in this.conferenceSolution ? this.conferenceSolution.toApiJson() : this.conferenceSolution;
43
- }
44
- if (typeof this.createRequest !== 'undefined' && this.createRequest !== null) {
45
- toReturn['createRequest'] = 'toApiJson' in this.createRequest ? this.createRequest.toApiJson() : this.createRequest;
46
- }
47
- if (typeof this.entryPoints !== 'undefined' && this.entryPoints !== null) {
48
- toReturn['entryPoints'] = 'toApiJson' in this.entryPoints ? this.entryPoints.toApiJson() : this.entryPoints;
49
- }
50
- if (typeof this.notes !== 'undefined') {
51
- toReturn['notes'] = this.notes;
52
- }
53
- if (typeof this.signature !== 'undefined') {
54
- toReturn['signature'] = this.signature;
55
- }
56
- return toReturn;
57
- }
58
- }
59
- export class GoogleMeetConferenceRequestStatus {
60
- constructor(kwargs) {
61
- if (!kwargs) {
62
- return;
63
- }
64
- Object.assign(this, kwargs);
65
- }
66
- static fromProto(proto) {
67
- let m = new GoogleMeetConferenceRequestStatus();
68
- m = Object.assign(m, proto);
69
- return m;
70
- }
71
- toApiJson() {
72
- if (typeof this.statusCode === 'undefined') {
73
- return {};
74
- }
75
- const toReturn = {};
76
- if (typeof this.statusCode !== 'undefined') {
77
- toReturn['statusCode'] = this.statusCode;
78
- }
79
- return toReturn;
80
- }
81
- }
82
- export class GoogleMeetConferenceSolution {
83
- constructor(kwargs) {
84
- if (!kwargs) {
85
- return;
86
- }
87
- Object.assign(this, kwargs);
88
- }
89
- static fromProto(proto) {
90
- let m = new GoogleMeetConferenceSolution();
91
- m = Object.assign(m, proto);
92
- if (proto.key) {
93
- m.key = GoogleMeetConferenceSolutionKey.fromProto(proto.key);
94
- }
95
- return m;
96
- }
97
- toApiJson() {
98
- if (typeof this.iconUri === 'undefined' &&
99
- typeof this.key === 'undefined' &&
100
- typeof this.name === 'undefined') {
101
- return {};
102
- }
103
- const toReturn = {};
104
- if (typeof this.iconUri !== 'undefined') {
105
- toReturn['iconUri'] = this.iconUri;
106
- }
107
- if (typeof this.key !== 'undefined' && this.key !== null) {
108
- toReturn['key'] = 'toApiJson' in this.key ? this.key.toApiJson() : this.key;
109
- }
110
- if (typeof this.name !== 'undefined') {
111
- toReturn['name'] = this.name;
112
- }
113
- return toReturn;
114
- }
115
- }
116
- export class GoogleMeetConferenceSolutionKey {
117
- constructor(kwargs) {
118
- if (!kwargs) {
119
- return;
120
- }
121
- Object.assign(this, kwargs);
122
- }
123
- static fromProto(proto) {
124
- let m = new GoogleMeetConferenceSolutionKey();
125
- m = Object.assign(m, proto);
126
- return m;
127
- }
128
- toApiJson() {
129
- if (typeof this.type === 'undefined') {
130
- return {};
131
- }
132
- const toReturn = {};
133
- if (typeof this.type !== 'undefined') {
134
- toReturn['type'] = this.type;
135
- }
136
- return toReturn;
137
- }
138
- }
139
- export class GoogleMeetCreateConferenceRequest {
140
- constructor(kwargs) {
141
- if (!kwargs) {
142
- return;
143
- }
144
- Object.assign(this, kwargs);
145
- }
146
- static fromProto(proto) {
147
- let m = new GoogleMeetCreateConferenceRequest();
148
- m = Object.assign(m, proto);
149
- if (proto.conferenceSolutionKey) {
150
- m.conferenceSolutionKey = GoogleMeetConferenceSolutionKey.fromProto(proto.conferenceSolutionKey);
151
- }
152
- if (proto.status) {
153
- m.status = GoogleMeetConferenceRequestStatus.fromProto(proto.status);
154
- }
155
- return m;
156
- }
157
- toApiJson() {
158
- if (typeof this.conferenceSolutionKey === 'undefined' &&
159
- typeof this.requestId === 'undefined' &&
160
- typeof this.status === 'undefined') {
161
- return {};
162
- }
163
- const toReturn = {};
164
- if (typeof this.conferenceSolutionKey !== 'undefined' && this.conferenceSolutionKey !== null) {
165
- toReturn['conferenceSolutionKey'] = 'toApiJson' in this.conferenceSolutionKey ? this.conferenceSolutionKey.toApiJson() : this.conferenceSolutionKey;
166
- }
167
- if (typeof this.requestId !== 'undefined') {
168
- toReturn['requestId'] = this.requestId;
169
- }
170
- if (typeof this.status !== 'undefined' && this.status !== null) {
171
- toReturn['status'] = 'toApiJson' in this.status ? this.status.toApiJson() : this.status;
172
- }
173
- return toReturn;
174
- }
175
- }
176
- export class GoogleMeetCreateMeetingRequest {
177
- constructor(kwargs) {
178
- if (!kwargs) {
179
- return;
180
- }
181
- Object.assign(this, kwargs);
182
- }
183
- static fromProto(proto) {
184
- let m = new GoogleMeetCreateMeetingRequest();
185
- m = Object.assign(m, proto);
186
- if (proto.meeting) {
187
- m.meeting = GoogleMeetMeeting.fromProto(proto.meeting);
188
- }
189
- return m;
190
- }
191
- toApiJson() {
192
- if (typeof this.calenderId === 'undefined' &&
193
- typeof this.meeting === 'undefined') {
194
- return {};
195
- }
196
- const toReturn = {};
197
- if (typeof this.calenderId !== 'undefined') {
198
- toReturn['calenderId'] = this.calenderId;
199
- }
200
- if (typeof this.meeting !== 'undefined' && this.meeting !== null) {
201
- toReturn['meeting'] = 'toApiJson' in this.meeting ? this.meeting.toApiJson() : this.meeting;
202
- }
203
- return toReturn;
204
- }
205
- }
206
- export class GoogleMeetCreateMeetingResponse {
207
- constructor(kwargs) {
208
- if (!kwargs) {
209
- return;
210
- }
211
- Object.assign(this, kwargs);
212
- }
213
- static fromProto(proto) {
214
- let m = new GoogleMeetCreateMeetingResponse();
215
- m = Object.assign(m, proto);
216
- if (proto.meeting) {
217
- m.meeting = GoogleMeetMeeting.fromProto(proto.meeting);
218
- }
219
- return m;
220
- }
221
- toApiJson() {
222
- if (typeof this.iamUserId === 'undefined' &&
223
- typeof this.calenderId === 'undefined' &&
224
- typeof this.meeting === 'undefined') {
225
- return {};
226
- }
227
- const toReturn = {};
228
- if (typeof this.iamUserId !== 'undefined') {
229
- toReturn['iamUserId'] = this.iamUserId;
230
- }
231
- if (typeof this.calenderId !== 'undefined') {
232
- toReturn['calenderId'] = this.calenderId;
233
- }
234
- if (typeof this.meeting !== 'undefined' && this.meeting !== null) {
235
- toReturn['meeting'] = 'toApiJson' in this.meeting ? this.meeting.toApiJson() : this.meeting;
236
- }
237
- return toReturn;
238
- }
239
- }
240
- export class GoogleMeetEntryPoint {
241
- constructor(kwargs) {
242
- if (!kwargs) {
243
- return;
244
- }
245
- Object.assign(this, kwargs);
246
- }
247
- static fromProto(proto) {
248
- let m = new GoogleMeetEntryPoint();
249
- m = Object.assign(m, proto);
250
- return m;
251
- }
252
- toApiJson() {
253
- if (typeof this.accessCode === 'undefined' &&
254
- typeof this.entryPointFeatures === 'undefined' &&
255
- typeof this.entryPointType === 'undefined' &&
256
- typeof this.label === 'undefined' &&
257
- typeof this.meetingCode === 'undefined' &&
258
- typeof this.passcode === 'undefined' &&
259
- typeof this.password === 'undefined' &&
260
- typeof this.pin === 'undefined' &&
261
- typeof this.regionCode === 'undefined' &&
262
- typeof this.uri === 'undefined') {
263
- return {};
264
- }
265
- const toReturn = {};
266
- if (typeof this.accessCode !== 'undefined') {
267
- toReturn['accessCode'] = this.accessCode;
268
- }
269
- if (typeof this.entryPointFeatures !== 'undefined') {
270
- toReturn['entryPointFeatures'] = this.entryPointFeatures;
271
- }
272
- if (typeof this.entryPointType !== 'undefined') {
273
- toReturn['entryPointType'] = this.entryPointType;
274
- }
275
- if (typeof this.label !== 'undefined') {
276
- toReturn['label'] = this.label;
277
- }
278
- if (typeof this.meetingCode !== 'undefined') {
279
- toReturn['meetingCode'] = this.meetingCode;
280
- }
281
- if (typeof this.passcode !== 'undefined') {
282
- toReturn['passcode'] = this.passcode;
283
- }
284
- if (typeof this.password !== 'undefined') {
285
- toReturn['password'] = this.password;
286
- }
287
- if (typeof this.pin !== 'undefined') {
288
- toReturn['pin'] = this.pin;
289
- }
290
- if (typeof this.regionCode !== 'undefined') {
291
- toReturn['regionCode'] = this.regionCode;
292
- }
293
- if (typeof this.uri !== 'undefined') {
294
- toReturn['uri'] = this.uri;
295
- }
296
- return toReturn;
297
- }
298
- }
299
- export class GoogleMeetMeeting {
300
- constructor(kwargs) {
301
- if (!kwargs) {
302
- return;
303
- }
304
- Object.assign(this, kwargs);
305
- }
306
- static fromProto(proto) {
307
- let m = new GoogleMeetMeeting();
308
- m = Object.assign(m, proto);
309
- if (proto.attendees) {
310
- m.attendees = proto.attendees.map(GoogleMeetMeetingAttendee.fromProto);
311
- }
312
- if (proto.conferenceData) {
313
- m.conferenceData = GoogleMeetConferenceData.fromProto(proto.conferenceData);
314
- }
315
- if (proto.end) {
316
- m.end = GoogleMeetMeetingDateTime.fromProto(proto.end);
317
- }
318
- if (proto.originalStartTime) {
319
- m.originalStartTime = GoogleMeetMeetingDateTime.fromProto(proto.originalStartTime);
320
- }
321
- if (proto.reminders) {
322
- m.reminders = GoogleMeetMeetingReminders.fromProto(proto.reminders);
323
- }
324
- if (proto.sequence) {
325
- m.sequence = parseInt(proto.sequence, 10);
326
- }
327
- if (proto.start) {
328
- m.start = GoogleMeetMeetingDateTime.fromProto(proto.start);
329
- }
330
- if (proto.creator) {
331
- m.creator = GoogleMeetMeetingCreator.fromProto(proto.creator);
332
- }
333
- return m;
334
- }
335
- toApiJson() {
336
- if (typeof this.anyoneCanAddSelf === 'undefined' &&
337
- typeof this.attendees === 'undefined' &&
338
- typeof this.attendeesOmitted === 'undefined' &&
339
- typeof this.colorId === 'undefined' &&
340
- typeof this.conferenceData === 'undefined' &&
341
- typeof this.description === 'undefined' &&
342
- typeof this.end === 'undefined' &&
343
- typeof this.endTimeUnspecified === 'undefined' &&
344
- typeof this.etag === 'undefined' &&
345
- typeof this.icalUid === 'undefined' &&
346
- typeof this.id === 'undefined' &&
347
- typeof this.kind === 'undefined' &&
348
- typeof this.location === 'undefined' &&
349
- typeof this.locked === 'undefined' &&
350
- typeof this.originalStartTime === 'undefined' &&
351
- typeof this.recurrence === 'undefined' &&
352
- typeof this.recurringMeetingId === 'undefined' &&
353
- typeof this.reminders === 'undefined' &&
354
- typeof this.sequence === 'undefined' &&
355
- typeof this.start === 'undefined' &&
356
- typeof this.status === 'undefined' &&
357
- typeof this.summary === 'undefined' &&
358
- typeof this.transparency === 'undefined' &&
359
- typeof this.visibility === 'undefined' &&
360
- typeof this.hangoutLink === 'undefined' &&
361
- typeof this.htmlLink === 'undefined' &&
362
- typeof this.created === 'undefined' &&
363
- typeof this.creator === 'undefined' &&
364
- typeof this.updated === 'undefined') {
365
- return {};
366
- }
367
- const toReturn = {};
368
- if (typeof this.anyoneCanAddSelf !== 'undefined') {
369
- toReturn['anyoneCanAddSelf'] = this.anyoneCanAddSelf;
370
- }
371
- if (typeof this.attendees !== 'undefined' && this.attendees !== null) {
372
- toReturn['attendees'] = 'toApiJson' in this.attendees ? this.attendees.toApiJson() : this.attendees;
373
- }
374
- if (typeof this.attendeesOmitted !== 'undefined') {
375
- toReturn['attendeesOmitted'] = this.attendeesOmitted;
376
- }
377
- if (typeof this.colorId !== 'undefined') {
378
- toReturn['colorId'] = this.colorId;
379
- }
380
- if (typeof this.conferenceData !== 'undefined' && this.conferenceData !== null) {
381
- toReturn['conferenceData'] = 'toApiJson' in this.conferenceData ? this.conferenceData.toApiJson() : this.conferenceData;
382
- }
383
- if (typeof this.description !== 'undefined') {
384
- toReturn['description'] = this.description;
385
- }
386
- if (typeof this.end !== 'undefined' && this.end !== null) {
387
- toReturn['end'] = 'toApiJson' in this.end ? this.end.toApiJson() : this.end;
388
- }
389
- if (typeof this.endTimeUnspecified !== 'undefined') {
390
- toReturn['endTimeUnspecified'] = this.endTimeUnspecified;
391
- }
392
- if (typeof this.etag !== 'undefined') {
393
- toReturn['etag'] = this.etag;
394
- }
395
- if (typeof this.icalUid !== 'undefined') {
396
- toReturn['icalUid'] = this.icalUid;
397
- }
398
- if (typeof this.id !== 'undefined') {
399
- toReturn['id'] = this.id;
400
- }
401
- if (typeof this.kind !== 'undefined') {
402
- toReturn['kind'] = this.kind;
403
- }
404
- if (typeof this.location !== 'undefined') {
405
- toReturn['location'] = this.location;
406
- }
407
- if (typeof this.locked !== 'undefined') {
408
- toReturn['locked'] = this.locked;
409
- }
410
- if (typeof this.originalStartTime !== 'undefined' && this.originalStartTime !== null) {
411
- toReturn['originalStartTime'] = 'toApiJson' in this.originalStartTime ? this.originalStartTime.toApiJson() : this.originalStartTime;
412
- }
413
- if (typeof this.recurrence !== 'undefined') {
414
- toReturn['recurrence'] = this.recurrence;
415
- }
416
- if (typeof this.recurringMeetingId !== 'undefined') {
417
- toReturn['recurringMeetingId'] = this.recurringMeetingId;
418
- }
419
- if (typeof this.reminders !== 'undefined' && this.reminders !== null) {
420
- toReturn['reminders'] = 'toApiJson' in this.reminders ? this.reminders.toApiJson() : this.reminders;
421
- }
422
- if (typeof this.sequence !== 'undefined') {
423
- toReturn['sequence'] = this.sequence;
424
- }
425
- if (typeof this.start !== 'undefined' && this.start !== null) {
426
- toReturn['start'] = 'toApiJson' in this.start ? this.start.toApiJson() : this.start;
427
- }
428
- if (typeof this.status !== 'undefined') {
429
- toReturn['status'] = this.status;
430
- }
431
- if (typeof this.summary !== 'undefined') {
432
- toReturn['summary'] = this.summary;
433
- }
434
- if (typeof this.transparency !== 'undefined') {
435
- toReturn['transparency'] = this.transparency;
436
- }
437
- if (typeof this.visibility !== 'undefined') {
438
- toReturn['visibility'] = this.visibility;
439
- }
440
- if (typeof this.hangoutLink !== 'undefined') {
441
- toReturn['hangoutLink'] = this.hangoutLink;
442
- }
443
- if (typeof this.htmlLink !== 'undefined') {
444
- toReturn['htmlLink'] = this.htmlLink;
445
- }
446
- if (typeof this.created !== 'undefined') {
447
- toReturn['created'] = this.created;
448
- }
449
- if (typeof this.creator !== 'undefined' && this.creator !== null) {
450
- toReturn['creator'] = 'toApiJson' in this.creator ? this.creator.toApiJson() : this.creator;
451
- }
452
- if (typeof this.updated !== 'undefined') {
453
- toReturn['updated'] = this.updated;
454
- }
455
- return toReturn;
456
- }
457
- }
458
- export class GoogleMeetMeetingAttendee {
459
- constructor(kwargs) {
460
- if (!kwargs) {
461
- return;
462
- }
463
- Object.assign(this, kwargs);
464
- }
465
- static fromProto(proto) {
466
- let m = new GoogleMeetMeetingAttendee();
467
- m = Object.assign(m, proto);
468
- if (proto.additionalGuests) {
469
- m.additionalGuests = parseInt(proto.additionalGuests, 10);
470
- }
471
- return m;
472
- }
473
- toApiJson() {
474
- if (typeof this.additionalGuests === 'undefined' &&
475
- typeof this.comment === 'undefined' &&
476
- typeof this.displayName === 'undefined' &&
477
- typeof this.email === 'undefined' &&
478
- typeof this.id === 'undefined' &&
479
- typeof this.optional === 'undefined' &&
480
- typeof this.organizer === 'undefined' &&
481
- typeof this.resource === 'undefined' &&
482
- typeof this.responseStatus === 'undefined' &&
483
- typeof this.self === 'undefined') {
484
- return {};
485
- }
486
- const toReturn = {};
487
- if (typeof this.additionalGuests !== 'undefined') {
488
- toReturn['additionalGuests'] = this.additionalGuests;
489
- }
490
- if (typeof this.comment !== 'undefined') {
491
- toReturn['comment'] = this.comment;
492
- }
493
- if (typeof this.displayName !== 'undefined') {
494
- toReturn['displayName'] = this.displayName;
495
- }
496
- if (typeof this.email !== 'undefined') {
497
- toReturn['email'] = this.email;
498
- }
499
- if (typeof this.id !== 'undefined') {
500
- toReturn['id'] = this.id;
501
- }
502
- if (typeof this.optional !== 'undefined') {
503
- toReturn['optional'] = this.optional;
504
- }
505
- if (typeof this.organizer !== 'undefined') {
506
- toReturn['organizer'] = this.organizer;
507
- }
508
- if (typeof this.resource !== 'undefined') {
509
- toReturn['resource'] = this.resource;
510
- }
511
- if (typeof this.responseStatus !== 'undefined') {
512
- toReturn['responseStatus'] = this.responseStatus;
513
- }
514
- if (typeof this.self !== 'undefined') {
515
- toReturn['self'] = this.self;
516
- }
517
- return toReturn;
518
- }
519
- }
520
- export class GoogleMeetMeetingCreator {
521
- constructor(kwargs) {
522
- if (!kwargs) {
523
- return;
524
- }
525
- Object.assign(this, kwargs);
526
- }
527
- static fromProto(proto) {
528
- let m = new GoogleMeetMeetingCreator();
529
- m = Object.assign(m, proto);
530
- return m;
531
- }
532
- toApiJson() {
533
- if (typeof this.displayName === 'undefined' &&
534
- typeof this.email === 'undefined' &&
535
- typeof this.id === 'undefined' &&
536
- typeof this.self === 'undefined') {
537
- return {};
538
- }
539
- const toReturn = {};
540
- if (typeof this.displayName !== 'undefined') {
541
- toReturn['displayName'] = this.displayName;
542
- }
543
- if (typeof this.email !== 'undefined') {
544
- toReturn['email'] = this.email;
545
- }
546
- if (typeof this.id !== 'undefined') {
547
- toReturn['id'] = this.id;
548
- }
549
- if (typeof this.self !== 'undefined') {
550
- toReturn['self'] = this.self;
551
- }
552
- return toReturn;
553
- }
554
- }
555
- export class GoogleMeetMeetingDateTime {
556
- constructor(kwargs) {
557
- if (!kwargs) {
558
- return;
559
- }
560
- Object.assign(this, kwargs);
561
- }
562
- static fromProto(proto) {
563
- let m = new GoogleMeetMeetingDateTime();
564
- m = Object.assign(m, proto);
565
- return m;
566
- }
567
- toApiJson() {
568
- if (typeof this.date === 'undefined' &&
569
- typeof this.dateTime === 'undefined' &&
570
- typeof this.timeZone === 'undefined') {
571
- return {};
572
- }
573
- const toReturn = {};
574
- if (typeof this.date !== 'undefined') {
575
- toReturn['date'] = this.date;
576
- }
577
- if (typeof this.dateTime !== 'undefined') {
578
- toReturn['dateTime'] = this.dateTime;
579
- }
580
- if (typeof this.timeZone !== 'undefined') {
581
- toReturn['timeZone'] = this.timeZone;
582
- }
583
- return toReturn;
584
- }
585
- }
586
- export class GoogleMeetMeetingReminder {
587
- constructor(kwargs) {
588
- if (!kwargs) {
589
- return;
590
- }
591
- Object.assign(this, kwargs);
592
- }
593
- static fromProto(proto) {
594
- let m = new GoogleMeetMeetingReminder();
595
- m = Object.assign(m, proto);
596
- if (proto.minutes) {
597
- m.minutes = parseInt(proto.minutes, 10);
598
- }
599
- return m;
600
- }
601
- toApiJson() {
602
- if (typeof this.method === 'undefined' &&
603
- typeof this.minutes === 'undefined') {
604
- return {};
605
- }
606
- const toReturn = {};
607
- if (typeof this.method !== 'undefined') {
608
- toReturn['method'] = this.method;
609
- }
610
- if (typeof this.minutes !== 'undefined') {
611
- toReturn['minutes'] = this.minutes;
612
- }
613
- return toReturn;
614
- }
615
- }
616
- export class GoogleMeetMeetingReminders {
617
- constructor(kwargs) {
618
- if (!kwargs) {
619
- return;
620
- }
621
- Object.assign(this, kwargs);
622
- }
623
- static fromProto(proto) {
624
- let m = new GoogleMeetMeetingReminders();
625
- m = Object.assign(m, proto);
626
- if (proto.overrides) {
627
- m.overrides = proto.overrides.map(GoogleMeetMeetingReminder.fromProto);
628
- }
629
- return m;
630
- }
631
- toApiJson() {
632
- if (typeof this.overrides === 'undefined' &&
633
- typeof this.useDefault === 'undefined') {
634
- return {};
635
- }
636
- const toReturn = {};
637
- if (typeof this.overrides !== 'undefined' && this.overrides !== null) {
638
- toReturn['overrides'] = 'toApiJson' in this.overrides ? this.overrides.toApiJson() : this.overrides;
639
- }
640
- if (typeof this.useDefault !== 'undefined') {
641
- toReturn['useDefault'] = this.useDefault;
642
- }
643
- return toReturn;
644
- }
645
- }
646
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1lZXQuanMiLCJzb3VyY2VSb290IjoiL2NvZGVmcmVzaC92b2x1bWUvbWVldGluZ3Mvc2Rrcy90eXBlc2NyaXB0L3NyYy9tZWV0aW5nc19zZGsvc3JjLyIsInNvdXJjZXMiOlsibGliL19pbnRlcm5hbC9vYmplY3RzL2dvb2dsZS1tZWV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyx3QkFBd0I7SUFpQmpDLFlBQVksTUFBNEM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFkRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FBQztRQUN4SCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FBQztRQUM5RyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUss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SUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsU0FBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3JMLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMvaW5kZXgnO1xuXG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zL2luZGV4JztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q29uZmVyZW5jZURhdGEgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRDb25mZXJlbmNlRGF0YUludGVyZmFjZSB7XG4gICAgY29uZmVyZW5jZUlkOiBzdHJpbmc7XG4gICAgY29uZmVyZW5jZVNvbHV0aW9uOiBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uO1xuICAgIGNyZWF0ZVJlcXVlc3Q6IEdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdDtcbiAgICBlbnRyeVBvaW50czogR29vZ2xlTWVldEVudHJ5UG9pbnRbXTtcbiAgICBub3Rlczogc3RyaW5nO1xuICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbmZlcmVuY2VTb2x1dGlvbikge20uY29uZmVyZW5jZVNvbHV0aW9uID0gR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbi5mcm9tUHJvdG8ocHJvdG8uY29uZmVyZW5jZVNvbHV0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVSZXF1ZXN0KSB7bS5jcmVhdGVSZXF1ZXN0ID0gR29vZ2xlTWVldENyZWF0ZUNvbmZlcmVuY2VSZXF1ZXN0LmZyb21Qcm90byhwcm90by5jcmVhdGVSZXF1ZXN0KTt9XG4gICAgICAgIGlmIChwcm90by5lbnRyeVBvaW50cykge20uZW50cnlQb2ludHMgPSBwcm90by5lbnRyeVBvaW50cy5tYXAoR29vZ2xlTWVldEVudHJ5UG9pbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jb25mZXJlbmNlSWQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jb25mZXJlbmNlU29sdXRpb24gPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jcmVhdGVSZXF1ZXN0ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZW50cnlQb2ludHMgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5ub3RlcyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNpZ25hdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZlcmVuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29uZmVyZW5jZUlkJ10gPSB0aGlzLmNvbmZlcmVuY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25mZXJlbmNlU29sdXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZlcmVuY2VTb2x1dGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb25mZXJlbmNlU29sdXRpb24gPyAodGhpcy5jb25mZXJlbmNlU29sdXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZVJlcXVlc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlUmVxdWVzdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVSZXF1ZXN0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZVJlcXVlc3QgPyAodGhpcy5jcmVhdGVSZXF1ZXN0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZVJlcXVlc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW50cnlQb2ludHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW50cnlQb2ludHMgIT09IG51bGwpIHt0b1JldHVyblsnZW50cnlQb2ludHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW50cnlQb2ludHMgPyAodGhpcy5lbnRyeVBvaW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbnRyeVBvaW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ub3RlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbm90ZXMnXSA9IHRoaXMubm90ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2lnbmF0dXJlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzaWduYXR1cmUnXSA9IHRoaXMuc2lnbmF0dXJlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRDb25mZXJlbmNlUmVxdWVzdFN0YXR1cyBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldENvbmZlcmVuY2VSZXF1ZXN0U3RhdHVzSW50ZXJmYWNlIHtcbiAgICBzdGF0dXNDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXMge1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDb25mZXJlbmNlUmVxdWVzdFN0YXR1c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc3RhdHVzQ29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c0NvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1c0NvZGUnXSA9IHRoaXMuc3RhdHVzQ29kZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uSW50ZXJmYWNlIHtcbiAgICBpY29uVXJpOiBzdHJpbmc7XG4gICAga2V5OiBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uS2V5O1xuICAgIG5hbWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmtleSkge20ua2V5ID0gR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleS5mcm9tUHJvdG8ocHJvdG8ua2V5KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuaWNvblVyaSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmtleSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uVXJpICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uVXJpJ10gPSB0aGlzLmljb25Vcmk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmtleSAhPT0gbnVsbCkge3RvUmV0dXJuWydrZXknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMua2V5ID8gKHRoaXMua2V5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleSBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleUludGVyZmFjZSB7XG4gICAgdHlwZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50eXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0eXBlJ10gPSB0aGlzLnR5cGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENyZWF0ZUNvbmZlcmVuY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q3JlYXRlQ29uZmVyZW5jZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbmZlcmVuY2VTb2x1dGlvbktleTogR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleTtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IEdvb2dsZU1lZXRDb25mZXJlbmNlUmVxdWVzdFN0YXR1cztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25mZXJlbmNlU29sdXRpb25LZXkpIHttLmNvbmZlcmVuY2VTb2x1dGlvbktleSA9IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXkuZnJvbVByb3RvKHByb3RvLmNvbmZlcmVuY2VTb2x1dGlvbktleSk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhdHVzKSB7bS5zdGF0dXMgPSBHb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXMuZnJvbVByb3RvKHByb3RvLnN0YXR1cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uS2V5ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucmVxdWVzdElkID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc3RhdHVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uS2V5ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbktleSAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25mZXJlbmNlU29sdXRpb25LZXknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uS2V5ID8gKHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uS2V5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbktleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXF1ZXN0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlcXVlc3RJZCddID0gdGhpcy5yZXF1ZXN0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGF0dXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhdHVzID8gKHRoaXMuc3RhdHVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXR1czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q3JlYXRlTWVldGluZ1JlcXVlc3QgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRDcmVhdGVNZWV0aW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kZXJJZDogc3RyaW5nO1xuICAgIG1lZXRpbmc6IEdvb2dsZU1lZXRNZWV0aW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldENyZWF0ZU1lZXRpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENyZWF0ZU1lZXRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lZXRpbmcpIHttLm1lZXRpbmcgPSBHb29nbGVNZWV0TWVldGluZy5mcm9tUHJvdG8ocHJvdG8ubWVldGluZyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDcmVhdGVNZWV0aW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuY2FsZW5kZXJJZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm1lZXRpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRlcklkJ10gPSB0aGlzLmNhbGVuZGVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZyA/ICh0aGlzLm1lZXRpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpYW1Vc2VySWQ6IHN0cmluZztcbiAgICBjYWxlbmRlcklkOiBzdHJpbmc7XG4gICAgbWVldGluZzogR29vZ2xlTWVldE1lZXRpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENyZWF0ZU1lZXRpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nKSB7bS5tZWV0aW5nID0gR29vZ2xlTWVldE1lZXRpbmcuZnJvbVByb3RvKHByb3RvLm1lZXRpbmcpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5pYW1Vc2VySWQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jYWxlbmRlcklkID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubWVldGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlhbVVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWFtVXNlcklkJ10gPSB0aGlzLmlhbVVzZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRlcklkJ10gPSB0aGlzLmNhbGVuZGVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZyA/ICh0aGlzLm1lZXRpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0RW50cnlQb2ludCBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldEVudHJ5UG9pbnRJbnRlcmZhY2Uge1xuICAgIGFjY2Vzc0NvZGU6IHN0cmluZztcbiAgICBlbnRyeVBvaW50RmVhdHVyZXM6IHN0cmluZ1tdO1xuICAgIGVudHJ5UG9pbnRUeXBlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBtZWV0aW5nQ29kZTogc3RyaW5nO1xuICAgIHBhc3Njb2RlOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICBwaW46IHN0cmluZztcbiAgICByZWdpb25Db2RlOiBzdHJpbmc7XG4gICAgdXJpOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0RW50cnlQb2ludCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRFbnRyeVBvaW50KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0RW50cnlQb2ludEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuYWNjZXNzQ29kZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmVudHJ5UG9pbnRGZWF0dXJlcyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmVudHJ5UG9pbnRUeXBlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubGFiZWwgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5tZWV0aW5nQ29kZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnBhc3Njb2RlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucGFzc3dvcmQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5waW4gPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5yZWdpb25Db2RlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudXJpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZXNzQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZXNzQ29kZSddID0gdGhpcy5hY2Nlc3NDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudHJ5UG9pbnRGZWF0dXJlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlQb2ludEZlYXR1cmVzJ10gPSB0aGlzLmVudHJ5UG9pbnRGZWF0dXJlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyeVBvaW50VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlQb2ludFR5cGUnXSA9IHRoaXMuZW50cnlQb2ludFR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFiZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xhYmVsJ10gPSB0aGlzLmxhYmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nQ29kZSddID0gdGhpcy5tZWV0aW5nQ29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXNzY29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFzc2NvZGUnXSA9IHRoaXMucGFzc2NvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFzc3dvcmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bhc3N3b3JkJ10gPSB0aGlzLnBhc3N3b3JkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGluJ10gPSB0aGlzLnBpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWdpb25Db2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWdpb25Db2RlJ10gPSB0aGlzLnJlZ2lvbkNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXJpICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cmknXSA9IHRoaXMudXJpO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRNZWV0aW5nIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ0ludGVyZmFjZSB7XG4gICAgYW55b25lQ2FuQWRkU2VsZjogYm9vbGVhbjtcbiAgICBhdHRlbmRlZXM6IEdvb2dsZU1lZXRNZWV0aW5nQXR0ZW5kZWVbXTtcbiAgICBhdHRlbmRlZXNPbWl0dGVkOiBib29sZWFuO1xuICAgIGNvbG9ySWQ6IHN0cmluZztcbiAgICBjb25mZXJlbmNlRGF0YTogR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZW5kOiBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lO1xuICAgIGVuZFRpbWVVbnNwZWNpZmllZDogYm9vbGVhbjtcbiAgICBldGFnOiBzdHJpbmc7XG4gICAgaWNhbFVpZDogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAga2luZDogc3RyaW5nO1xuICAgIGxvY2F0aW9uOiBzdHJpbmc7XG4gICAgbG9ja2VkOiBib29sZWFuO1xuICAgIG9yaWdpbmFsU3RhcnRUaW1lOiBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lO1xuICAgIHJlY3VycmVuY2U6IHN0cmluZ1tdO1xuICAgIHJlY3VycmluZ01lZXRpbmdJZDogc3RyaW5nO1xuICAgIHJlbWluZGVyczogR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnM7XG4gICAgc2VxdWVuY2U6IG51bWJlcjtcbiAgICBzdGFydDogR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZTtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgdHJhbnNwYXJlbmN5OiBzdHJpbmc7XG4gICAgdmlzaWJpbGl0eTogc3RyaW5nO1xuICAgIGhhbmdvdXRMaW5rOiBzdHJpbmc7XG4gICAgaHRtbExpbms6IHN0cmluZztcbiAgICBjcmVhdGVkOiBzdHJpbmc7XG4gICAgY3JlYXRvcjogR29vZ2xlTWVldE1lZXRpbmdDcmVhdG9yO1xuICAgIHVwZGF0ZWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRNZWV0aW5nIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldE1lZXRpbmcoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXR0ZW5kZWVzKSB7bS5hdHRlbmRlZXMgPSBwcm90by5hdHRlbmRlZXMubWFwKEdvb2dsZU1lZXRNZWV0aW5nQXR0ZW5kZWUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5jb25mZXJlbmNlRGF0YSkge20uY29uZmVyZW5jZURhdGEgPSBHb29nbGVNZWV0Q29uZmVyZW5jZURhdGEuZnJvbVByb3RvKHByb3RvLmNvbmZlcmVuY2VEYXRhKTt9XG4gICAgICAgIGlmIChwcm90by5lbmQpIHttLmVuZCA9IEdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWUuZnJvbVByb3RvKHByb3RvLmVuZCk7fVxuICAgICAgICBpZiAocHJvdG8ub3JpZ2luYWxTdGFydFRpbWUpIHttLm9yaWdpbmFsU3RhcnRUaW1lID0gR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZS5mcm9tUHJvdG8ocHJvdG8ub3JpZ2luYWxTdGFydFRpbWUpO31cbiAgICAgICAgaWYgKHByb3RvLnJlbWluZGVycykge20ucmVtaW5kZXJzID0gR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnMuZnJvbVByb3RvKHByb3RvLnJlbWluZGVycyk7fVxuICAgICAgICBpZiAocHJvdG8uc2VxdWVuY2UpIHttLnNlcXVlbmNlID0gcGFyc2VJbnQocHJvdG8uc2VxdWVuY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5zdGFydCkge20uc3RhcnQgPSBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lLmZyb21Qcm90byhwcm90by5zdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRvcikge20uY3JlYXRvciA9IEdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvci5mcm9tUHJvdG8ocHJvdG8uY3JlYXRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRNZWV0aW5nSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5hbnlvbmVDYW5BZGRTZWxmID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuYXR0ZW5kZWVzID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuYXR0ZW5kZWVzT21pdHRlZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmNvbG9ySWQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jb25mZXJlbmNlRGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZW5kID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZW5kVGltZVVuc3BlY2lmaWVkID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZXRhZyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmljYWxVaWQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5pZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmtpbmQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5sb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmxvY2tlZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm9yaWdpbmFsU3RhcnRUaW1lID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucmVjdXJyZW5jZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlY3VycmluZ01lZXRpbmdJZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlbWluZGVycyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlcXVlbmNlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc3RhcnQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zdGF0dXMgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zdW1tYXJ5ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudHJhbnNwYXJlbmN5ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudmlzaWJpbGl0eSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmhhbmdvdXRMaW5rID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuaHRtbExpbmsgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jcmVhdGVkID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuY3JlYXRvciA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVwZGF0ZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbnlvbmVDYW5BZGRTZWxmICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbnlvbmVDYW5BZGRTZWxmJ10gPSB0aGlzLmFueW9uZUNhbkFkZFNlbGY7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0ZW5kZWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmF0dGVuZGVlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhdHRlbmRlZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXR0ZW5kZWVzID8gKHRoaXMuYXR0ZW5kZWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmF0dGVuZGVlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRlbmRlZXNPbWl0dGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdHRlbmRlZXNPbWl0dGVkJ10gPSB0aGlzLmF0dGVuZGVlc09taXR0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sb3JJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sb3JJZCddID0gdGhpcy5jb2xvcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZlcmVuY2VEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbmZlcmVuY2VEYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbmZlcmVuY2VEYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZlcmVuY2VEYXRhID8gKHRoaXMuY29uZmVyZW5jZURhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29uZmVyZW5jZURhdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmQgIT09IG51bGwpIHt0b1JldHVyblsnZW5kJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZCA/ICh0aGlzLmVuZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kVGltZVVuc3BlY2lmaWVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmRUaW1lVW5zcGVjaWZpZWQnXSA9IHRoaXMuZW5kVGltZVVuc3BlY2lmaWVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV0YWcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V0YWcnXSA9IHRoaXMuZXRhZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY2FsVWlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY2FsVWlkJ10gPSB0aGlzLmljYWxVaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtpbmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tpbmQnXSA9IHRoaXMua2luZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9jYXRpb24nXSA9IHRoaXMubG9jYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9ja2VkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NrZWQnXSA9IHRoaXMubG9ja2VkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsU3RhcnRUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsU3RhcnRUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yaWdpbmFsU3RhcnRUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm9yaWdpbmFsU3RhcnRUaW1lID8gKHRoaXMub3JpZ2luYWxTdGFydFRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JpZ2luYWxTdGFydFRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVjdXJyZW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVjdXJyZW5jZSddID0gdGhpcy5yZWN1cnJlbmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlY3VycmluZ01lZXRpbmdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVjdXJyaW5nTWVldGluZ0lkJ10gPSB0aGlzLnJlY3VycmluZ01lZXRpbmdJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZW1pbmRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmVtaW5kZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3JlbWluZGVycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZW1pbmRlcnMgPyAodGhpcy5yZW1pbmRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmVtaW5kZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlcXVlbmNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXF1ZW5jZSddID0gdGhpcy5zZXF1ZW5jZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGFydCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydCA/ICh0aGlzLnN0YXJ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdW1tYXJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdW1tYXJ5J10gPSB0aGlzLnN1bW1hcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNwYXJlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0cmFuc3BhcmVuY3knXSA9IHRoaXMudHJhbnNwYXJlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpc2liaWxpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Zpc2liaWxpdHknXSA9IHRoaXMudmlzaWJpbGl0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYW5nb3V0TGluayAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFuZ291dExpbmsnXSA9IHRoaXMuaGFuZ291dExpbms7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaHRtbExpbmsgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2h0bWxMaW5rJ10gPSB0aGlzLmh0bWxMaW5rO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NyZWF0ZWQnXSA9IHRoaXMuY3JlYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0b3IgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdG9yID8gKHRoaXMuY3JlYXRvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0TWVldGluZ0F0dGVuZGVlIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ0F0dGVuZGVlSW50ZXJmYWNlIHtcbiAgICBhZGRpdGlvbmFsR3Vlc3RzOiBudW1iZXI7XG4gICAgY29tbWVudDogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIG9yZ2FuaXplcjogYm9vbGVhbjtcbiAgICByZXNvdXJjZTogYm9vbGVhbjtcbiAgICByZXNwb25zZVN0YXR1czogc3RyaW5nO1xuICAgIHNlbGY6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0TWVldGluZ0F0dGVuZGVlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hZGRpdGlvbmFsR3Vlc3RzKSB7bS5hZGRpdGlvbmFsR3Vlc3RzID0gcGFyc2VJbnQocHJvdG8uYWRkaXRpb25hbEd1ZXN0cywgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0TWVldGluZ0F0dGVuZGVlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5hZGRpdGlvbmFsR3Vlc3RzID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuY29tbWVudCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmRpc3BsYXlOYW1lID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZW1haWwgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5pZCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbmFsID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMub3JnYW5pemVyID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucmVzb3VyY2UgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5yZXNwb25zZVN0YXR1cyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGYgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRpdGlvbmFsR3Vlc3RzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRpdGlvbmFsR3Vlc3RzJ10gPSB0aGlzLmFkZGl0aW9uYWxHdWVzdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tbWVudCddID0gdGhpcy5jb21tZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc3BsYXlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXNwbGF5TmFtZSddID0gdGhpcy5kaXNwbGF5TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWwnXSA9IHRoaXMuZW1haWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbmFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25hbCddID0gdGhpcy5vcHRpb25hbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmdhbml6ZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yZ2FuaXplciddID0gdGhpcy5vcmdhbml6ZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzb3VyY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Jlc291cmNlJ10gPSB0aGlzLnJlc291cmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc3BvbnNlU3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXNwb25zZVN0YXR1cyddID0gdGhpcy5yZXNwb25zZVN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWxmICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWxmJ10gPSB0aGlzLnNlbGY7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldE1lZXRpbmdDcmVhdG9yIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ0NyZWF0b3JJbnRlcmZhY2Uge1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHNlbGY6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0TWVldGluZ0NyZWF0b3Ige1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0TWVldGluZ0NyZWF0b3IoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZGlzcGxheU5hbWUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5lbWFpbCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmlkID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc3BsYXlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXNwbGF5TmFtZSddID0gdGhpcy5kaXNwbGF5TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWwnXSA9IHRoaXMuZW1haWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGYgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlbGYnXSA9IHRoaXMuc2VsZjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lSW50ZXJmYWNlIHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgZGF0ZVRpbWU6IHN0cmluZztcbiAgICB0aW1lWm9uZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWUoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWVJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmRhdGUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5kYXRlVGltZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnRpbWVab25lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGF0ZSddID0gdGhpcy5kYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVUaW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXRlVGltZSddID0gdGhpcy5kYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGltZVpvbmUnXSA9IHRoaXMudGltZVpvbmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlciBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlckludGVyZmFjZSB7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgbWludXRlczogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXIoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWludXRlcykge20ubWludXRlcyA9IHBhcnNlSW50KHByb3RvLm1pbnV0ZXMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubWV0aG9kID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubWludXRlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWV0aG9kJ10gPSB0aGlzLm1ldGhvZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5taW51dGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtaW51dGVzJ10gPSB0aGlzLm1pbnV0ZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnMgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJzSW50ZXJmYWNlIHtcbiAgICBvdmVycmlkZXM6IEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJbXTtcbiAgICB1c2VEZWZhdWx0OiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0TWVldGluZ1JlbWluZGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vdmVycmlkZXMpIHttLm92ZXJyaWRlcyA9IHByb3RvLm92ZXJyaWRlcy5tYXAoR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0TWVldGluZ1JlbWluZGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMub3ZlcnJpZGVzID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudXNlRGVmYXVsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm92ZXJyaWRlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vdmVycmlkZXMgIT09IG51bGwpIHt0b1JldHVyblsnb3ZlcnJpZGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm92ZXJyaWRlcyA/ICh0aGlzLm92ZXJyaWRlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vdmVycmlkZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlRGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlRGVmYXVsdCddID0gdGhpcy51c2VEZWZhdWx0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19