@vendasta/social-posts 3.10.4 → 5.0.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 (132) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_internal/enums/index.mjs +9 -0
  3. package/esm2020/lib/_internal/enums/multilocation-post.enum.mjs +12 -0
  4. package/esm2020/lib/_internal/enums/social-posts.enum.mjs +39 -0
  5. package/esm2020/lib/_internal/index.mjs +16 -0
  6. package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
  7. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  8. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  9. package/esm2020/lib/_internal/interfaces/multilocation-post.interface.mjs +8 -0
  10. package/esm2020/lib/_internal/interfaces/pixabay-image.interface.mjs +8 -0
  11. package/esm2020/lib/_internal/interfaces/post-templates.interface.mjs +8 -0
  12. package/esm2020/lib/_internal/interfaces/social-post-stats.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/social-posts.interface.mjs +8 -0
  14. package/esm2020/lib/_internal/interfaces/tenor-gif.interface.mjs +8 -0
  15. package/esm2020/lib/_internal/multilocation-post.api.service.mjs +64 -0
  16. package/esm2020/lib/_internal/objects/api.mjs +1246 -0
  17. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  18. package/esm2020/lib/_internal/objects/index.mjs +15 -0
  19. package/esm2020/lib/_internal/objects/multilocation-post.mjs +115 -0
  20. package/esm2020/lib/_internal/objects/pixabay-image.mjs +138 -0
  21. package/esm2020/lib/_internal/objects/post-templates.mjs +75 -0
  22. package/esm2020/lib/_internal/objects/social-post-stats.mjs +127 -0
  23. package/esm2020/lib/_internal/objects/social-posts.mjs +272 -0
  24. package/esm2020/lib/_internal/objects/tenor-gif.mjs +106 -0
  25. package/esm2020/lib/_internal/partner-social-posts.api.service.mjs +46 -0
  26. package/esm2020/lib/_internal/pixabay-images.api.service.mjs +41 -0
  27. package/esm2020/lib/_internal/post-templates.api.service.mjs +59 -0
  28. package/esm2020/lib/_internal/social-posts.api.service.mjs +70 -0
  29. package/esm2020/lib/_internal/tenor-gifs.api.service.mjs +46 -0
  30. package/esm2020/lib/index.mjs +5 -0
  31. package/esm2020/lib/multilocation-posts.service.mjs +76 -0
  32. package/esm2020/lib/post-templates.service.mjs +72 -0
  33. package/esm2020/lib/social-posts.service.mjs +43 -0
  34. package/esm2020/public_api.mjs +5 -0
  35. package/esm2020/vendasta-social-posts.mjs +5 -0
  36. package/fesm2015/vendasta-social-posts.mjs +2617 -0
  37. package/fesm2015/vendasta-social-posts.mjs.map +1 -0
  38. package/fesm2020/vendasta-social-posts.mjs +2617 -0
  39. package/fesm2020/vendasta-social-posts.mjs.map +1 -0
  40. package/lib/_generated/host.service.d.ts +5 -9
  41. package/lib/_internal/index.d.ts +2 -0
  42. package/lib/_internal/interfaces/api.interface.d.ts +31 -0
  43. package/lib/_internal/interfaces/index.d.ts +3 -1
  44. package/lib/_internal/interfaces/pixabay-image.interface.d.ts +26 -0
  45. package/lib/_internal/interfaces/tenor-gif.interface.d.ts +20 -0
  46. package/lib/_internal/multilocation-post.api.service.d.ts +4 -0
  47. package/lib/_internal/objects/api.d.ts +49 -0
  48. package/lib/_internal/objects/index.d.ts +3 -1
  49. package/lib/_internal/objects/pixabay-image.d.ts +31 -0
  50. package/lib/_internal/objects/tenor-gif.d.ts +31 -0
  51. package/lib/_internal/partner-social-posts.api.service.d.ts +4 -0
  52. package/lib/_internal/pixabay-images.api.service.d.ts +16 -0
  53. package/lib/_internal/post-templates.api.service.d.ts +4 -0
  54. package/lib/_internal/social-posts.api.service.d.ts +4 -0
  55. package/lib/_internal/tenor-gifs.api.service.d.ts +17 -0
  56. package/lib/index.d.ts +1 -2
  57. package/lib/multilocation-posts.service.d.ts +3 -0
  58. package/lib/post-templates.service.d.ts +3 -0
  59. package/lib/social-posts.service.d.ts +3 -0
  60. package/package.json +24 -16
  61. package/src/README.md +1 -0
  62. package/vendasta-social-posts.d.ts +1 -5
  63. package/bundles/vendasta-social-posts.umd.js +0 -3733
  64. package/bundles/vendasta-social-posts.umd.js.map +0 -1
  65. package/bundles/vendasta-social-posts.umd.min.js +0 -2
  66. package/bundles/vendasta-social-posts.umd.min.js.map +0 -1
  67. package/esm2015/lib/_generated/host.service.js +0 -104
  68. package/esm2015/lib/_internal/enums/index.js +0 -13
  69. package/esm2015/lib/_internal/enums/multilocation-post.enum.js +0 -19
  70. package/esm2015/lib/_internal/enums/social-posts.enum.js +0 -67
  71. package/esm2015/lib/_internal/index.js +0 -18
  72. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -447
  73. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -19
  74. package/esm2015/lib/_internal/interfaces/index.js +0 -5
  75. package/esm2015/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  76. package/esm2015/lib/_internal/interfaces/post-templates.interface.js +0 -45
  77. package/esm2015/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  78. package/esm2015/lib/_internal/interfaces/social-posts.interface.js +0 -127
  79. package/esm2015/lib/_internal/multilocation-post.api.service.js +0 -136
  80. package/esm2015/lib/_internal/objects/api.js +0 -1805
  81. package/esm2015/lib/_internal/objects/field-mask.js +0 -53
  82. package/esm2015/lib/_internal/objects/index.js +0 -17
  83. package/esm2015/lib/_internal/objects/multilocation-post.js +0 -197
  84. package/esm2015/lib/_internal/objects/post-templates.js +0 -127
  85. package/esm2015/lib/_internal/objects/social-post-stats.js +0 -207
  86. package/esm2015/lib/_internal/objects/social-posts.js +0 -446
  87. package/esm2015/lib/_internal/partner-social-posts.api.service.js +0 -90
  88. package/esm2015/lib/_internal/post-templates.api.service.js +0 -122
  89. package/esm2015/lib/_internal/social-posts.api.service.js +0 -155
  90. package/esm2015/lib/index.js +0 -10
  91. package/esm2015/lib/multilocation-posts.service.js +0 -142
  92. package/esm2015/lib/post-templates.service.js +0 -135
  93. package/esm2015/lib/social-posts.module.js +0 -40
  94. package/esm2015/lib/social-posts.service.js +0 -82
  95. package/esm2015/public_api.js +0 -9
  96. package/esm2015/vendasta-social-posts.js +0 -14
  97. package/esm5/lib/_generated/host.service.js +0 -115
  98. package/esm5/lib/_internal/enums/index.js +0 -13
  99. package/esm5/lib/_internal/enums/multilocation-post.enum.js +0 -19
  100. package/esm5/lib/_internal/enums/social-posts.enum.js +0 -67
  101. package/esm5/lib/_internal/index.js +0 -18
  102. package/esm5/lib/_internal/interfaces/api.interface.js +0 -447
  103. package/esm5/lib/_internal/interfaces/field-mask.interface.js +0 -19
  104. package/esm5/lib/_internal/interfaces/index.js +0 -5
  105. package/esm5/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  106. package/esm5/lib/_internal/interfaces/post-templates.interface.js +0 -45
  107. package/esm5/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  108. package/esm5/lib/_internal/interfaces/social-posts.interface.js +0 -127
  109. package/esm5/lib/_internal/multilocation-post.api.service.js +0 -163
  110. package/esm5/lib/_internal/objects/api.js +0 -2015
  111. package/esm5/lib/_internal/objects/field-mask.js +0 -59
  112. package/esm5/lib/_internal/objects/index.js +0 -17
  113. package/esm5/lib/_internal/objects/multilocation-post.js +0 -215
  114. package/esm5/lib/_internal/objects/post-templates.js +0 -133
  115. package/esm5/lib/_internal/objects/social-post-stats.js +0 -225
  116. package/esm5/lib/_internal/objects/social-posts.js +0 -482
  117. package/esm5/lib/_internal/partner-social-posts.api.service.js +0 -100
  118. package/esm5/lib/_internal/post-templates.api.service.js +0 -145
  119. package/esm5/lib/_internal/social-posts.api.service.js +0 -186
  120. package/esm5/lib/index.js +0 -10
  121. package/esm5/lib/multilocation-posts.service.js +0 -188
  122. package/esm5/lib/post-templates.service.js +0 -179
  123. package/esm5/lib/social-posts.module.js +0 -44
  124. package/esm5/lib/social-posts.service.js +0 -103
  125. package/esm5/public_api.js +0 -9
  126. package/esm5/vendasta-social-posts.js +0 -14
  127. package/fesm2015/vendasta-social-posts.js +0 -3241
  128. package/fesm2015/vendasta-social-posts.js.map +0 -1
  129. package/fesm5/vendasta-social-posts.js +0 -3692
  130. package/fesm5/vendasta-social-posts.js.map +0 -1
  131. package/lib/social-posts.module.d.ts +0 -2
  132. package/vendasta-social-posts.metadata.json +0 -1
@@ -1,3733 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@vendasta/core'), require('@angular/common/http'), require('rxjs/operators'), require('rxjs')) :
3
- typeof define === 'function' && define.amd ? define('@vendasta/social-posts', ['exports', '@angular/core', '@vendasta/core', '@angular/common/http', 'rxjs/operators', 'rxjs'], factory) :
4
- (factory((global.vendasta = global.vendasta || {}, global.vendasta['social-posts'] = {}),global.ng.core,global.i1,global.ng.common.http,global.rxjs.operators,global.rxjs));
5
- }(this, (function (exports,i0,i1,i1$1,operators,rxjs) { 'use strict';
6
-
7
- /**
8
- * @fileoverview added by tsickle
9
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
10
- */
11
- var HostService = /** @class */ (function () {
12
- function HostService(environmentService) {
13
- this.environmentService = environmentService;
14
- }
15
- /**
16
- * @return {?}
17
- */
18
- HostService.prototype.host = /**
19
- * @return {?}
20
- */
21
- function () {
22
- if (this._host) {
23
- return this._host;
24
- }
25
- switch (this.environmentService.getEnvironment()) {
26
- case i1.Environment.LOCAL:
27
- this._host = 'social-post.vendasta-local.com';
28
- break;
29
- case i1.Environment.TEST:
30
- this._host = '';
31
- break;
32
- case i1.Environment.DEMO:
33
- this._host = 'social-posts-demo.apigateway.co';
34
- break;
35
- case i1.Environment.PROD:
36
- this._host = 'social-posts-prod.apigateway.co';
37
- break;
38
- }
39
- return this._host;
40
- };
41
- /**
42
- * @return {?}
43
- */
44
- HostService.prototype.httpsHost = /**
45
- * @return {?}
46
- */
47
- function () {
48
- if (this._httpsHost) {
49
- return this._httpsHost;
50
- }
51
- switch (this.environmentService.getEnvironment()) {
52
- case i1.Environment.LOCAL:
53
- this._httpsHost = 'social-post.vendasta-local.com';
54
- break;
55
- case i1.Environment.TEST:
56
- this._httpsHost = '';
57
- break;
58
- case i1.Environment.DEMO:
59
- this._httpsHost = 'social-posts-api-demo.apigateway.co';
60
- break;
61
- case i1.Environment.PROD:
62
- this._httpsHost = 'social-posts-api-prod.apigateway.co';
63
- break;
64
- }
65
- return this._httpsHost;
66
- };
67
- /**
68
- * @return {?}
69
- */
70
- HostService.prototype.hostWithScheme = /**
71
- * @return {?}
72
- */
73
- function () {
74
- /** @type {?} */
75
- var scheme = this.environmentService.getEnvironment() === i1.Environment.LOCAL ? 'http://' : 'https://';
76
- return scheme + this.host();
77
- };
78
- /**
79
- * @return {?}
80
- */
81
- HostService.prototype.httpsHostWithScheme = /**
82
- * @return {?}
83
- */
84
- function () {
85
- /** @type {?} */
86
- var scheme = this.environmentService.getEnvironment() === i1.Environment.LOCAL ? 'http://' : 'https://';
87
- return scheme + this.httpsHost();
88
- };
89
- HostService.decorators = [
90
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
91
- ];
92
- /** @nocollapse */
93
- HostService.ctorParameters = function () {
94
- return [
95
- { type: i1.EnvironmentService }
96
- ];
97
- };
98
- /** @nocollapse */ HostService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function HostService_Factory() { return new HostService(i0.ɵɵinject(i1.EnvironmentService)); }, token: HostService, providedIn: "root" });
99
- return HostService;
100
- }());
101
-
102
- /*! *****************************************************************************
103
- Copyright (c) Microsoft Corporation.
104
-
105
- Permission to use, copy, modify, and/or distribute this software for any
106
- purpose with or without fee is hereby granted.
107
-
108
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
109
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
110
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
111
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
112
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
113
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
114
- PERFORMANCE OF THIS SOFTWARE.
115
- ***************************************************************************** */
116
- var __assign = function () {
117
- __assign = Object.assign || function __assign(t) {
118
- for (var s, i = 1, n = arguments.length; i < n; i++) {
119
- s = arguments[i];
120
- for (var p in s)
121
- if (Object.prototype.hasOwnProperty.call(s, p))
122
- t[p] = s[p];
123
- }
124
- return t;
125
- };
126
- return __assign.apply(this, arguments);
127
- };
128
-
129
- /**
130
- * @fileoverview added by tsickle
131
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
132
- */
133
- // *********************************
134
- // Code generated by sdkgen
135
- // DO NOT EDIT!.
136
- //
137
- // Enums.
138
- // *********************************
139
- /** @enum {number} */
140
- var CallToActionCallToActionType = {
141
- LEARN_MORE: 0,
142
- BOOK: 1,
143
- ORDER: 2,
144
- SHOP: 3,
145
- SIGN_UP: 4,
146
- GET_OFFER: 5,
147
- CALL: 6,
148
- };
149
- CallToActionCallToActionType[CallToActionCallToActionType.LEARN_MORE] = 'LEARN_MORE';
150
- CallToActionCallToActionType[CallToActionCallToActionType.BOOK] = 'BOOK';
151
- CallToActionCallToActionType[CallToActionCallToActionType.ORDER] = 'ORDER';
152
- CallToActionCallToActionType[CallToActionCallToActionType.SHOP] = 'SHOP';
153
- CallToActionCallToActionType[CallToActionCallToActionType.SIGN_UP] = 'SIGN_UP';
154
- CallToActionCallToActionType[CallToActionCallToActionType.GET_OFFER] = 'GET_OFFER';
155
- CallToActionCallToActionType[CallToActionCallToActionType.CALL] = 'CALL';
156
- /** @enum {number} */
157
- var SocialPostDeletionStatus = {
158
- NONE: 0,
159
- FAILED: 1,
160
- IN_PROGRESS: 2,
161
- };
162
- SocialPostDeletionStatus[SocialPostDeletionStatus.NONE] = 'NONE';
163
- SocialPostDeletionStatus[SocialPostDeletionStatus.FAILED] = 'FAILED';
164
- SocialPostDeletionStatus[SocialPostDeletionStatus.IN_PROGRESS] = 'IN_PROGRESS';
165
- /** @enum {number} */
166
- var PostingStatus = {
167
- POSTING_IN_PROGRESS: 0,
168
- POSTING_FAILED: 1,
169
- POSTING_COMPLETED: 2,
170
- };
171
- PostingStatus[PostingStatus.POSTING_IN_PROGRESS] = 'POSTING_IN_PROGRESS';
172
- PostingStatus[PostingStatus.POSTING_FAILED] = 'POSTING_FAILED';
173
- PostingStatus[PostingStatus.POSTING_COMPLETED] = 'POSTING_COMPLETED';
174
- /** @enum {number} */
175
- var SocialPostService = {
176
- TWITTER: 0,
177
- FACEBOOK: 1,
178
- LINKED_IN: 2,
179
- GOOGLE_PLUS: 3,
180
- GOOGLE_MY_BUSINESS: 4,
181
- UNKNOWN: 5,
182
- INSTAGRAM: 6,
183
- };
184
- SocialPostService[SocialPostService.TWITTER] = 'TWITTER';
185
- SocialPostService[SocialPostService.FACEBOOK] = 'FACEBOOK';
186
- SocialPostService[SocialPostService.LINKED_IN] = 'LINKED_IN';
187
- SocialPostService[SocialPostService.GOOGLE_PLUS] = 'GOOGLE_PLUS';
188
- SocialPostService[SocialPostService.GOOGLE_MY_BUSINESS] = 'GOOGLE_MY_BUSINESS';
189
- SocialPostService[SocialPostService.UNKNOWN] = 'UNKNOWN';
190
- SocialPostService[SocialPostService.INSTAGRAM] = 'INSTAGRAM';
191
-
192
- /**
193
- * @fileoverview added by tsickle
194
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
195
- */
196
- // *********************************
197
- // Code generated by sdkgen
198
- // DO NOT EDIT!.
199
- //
200
- // Enums.
201
- // *********************************
202
- /** @enum {number} */
203
- var RemoveReason = {
204
- REMOVE_REASON_EDIT: 0,
205
- REMOVE_REASON_DELETE: 1,
206
- };
207
- RemoveReason[RemoveReason.REMOVE_REASON_EDIT] = 'REMOVE_REASON_EDIT';
208
- RemoveReason[RemoveReason.REMOVE_REASON_DELETE] = 'REMOVE_REASON_DELETE';
209
-
210
- /**
211
- * @fileoverview added by tsickle
212
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
213
- */
214
-
215
- /**
216
- * @fileoverview added by tsickle
217
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
218
- */
219
- /**
220
- * @template E
221
- * @param {?} enumRef
222
- * @param {?} value
223
- * @return {?}
224
- */
225
- function enumStringToValue(enumRef, value) {
226
- if (typeof value === 'number') {
227
- return value;
228
- }
229
- return enumRef[value];
230
- }
231
- var CallToAction = /** @class */ (function () {
232
- function CallToAction(kwargs) {
233
- if (!kwargs) {
234
- return;
235
- }
236
- Object.assign(this, kwargs);
237
- }
238
- /**
239
- * @param {?} proto
240
- * @return {?}
241
- */
242
- CallToAction.fromProto = /**
243
- * @param {?} proto
244
- * @return {?}
245
- */
246
- function (proto) {
247
- /** @type {?} */
248
- var m = new CallToAction();
249
- m = Object.assign(m, proto);
250
- if (proto.actionType) {
251
- m.actionType = enumStringToValue(CallToActionCallToActionType, proto.actionType);
252
- }
253
- return m;
254
- };
255
- /**
256
- * @return {?}
257
- */
258
- CallToAction.prototype.toApiJson = /**
259
- * @return {?}
260
- */
261
- function () {
262
- /** @type {?} */
263
- var toReturn = {};
264
- if (typeof this.url !== 'undefined') {
265
- toReturn['url'] = this.url;
266
- }
267
- if (typeof this.actionType !== 'undefined') {
268
- toReturn['actionType'] = this.actionType;
269
- }
270
- return toReturn;
271
- };
272
- return CallToAction;
273
- }());
274
- var Error = /** @class */ (function () {
275
- function Error(kwargs) {
276
- if (!kwargs) {
277
- return;
278
- }
279
- Object.assign(this, kwargs);
280
- }
281
- /**
282
- * @param {?} proto
283
- * @return {?}
284
- */
285
- Error.fromProto = /**
286
- * @param {?} proto
287
- * @return {?}
288
- */
289
- function (proto) {
290
- /** @type {?} */
291
- var m = new Error();
292
- m = Object.assign(m, proto);
293
- return m;
294
- };
295
- /**
296
- * @return {?}
297
- */
298
- Error.prototype.toApiJson = /**
299
- * @return {?}
300
- */
301
- function () {
302
- /** @type {?} */
303
- var toReturn = {};
304
- if (typeof this.reason !== 'undefined') {
305
- toReturn['reason'] = this.reason;
306
- }
307
- if (typeof this.category !== 'undefined') {
308
- toReturn['category'] = this.category;
309
- }
310
- return toReturn;
311
- };
312
- return Error;
313
- }());
314
- var Event = /** @class */ (function () {
315
- function Event(kwargs) {
316
- if (!kwargs) {
317
- return;
318
- }
319
- Object.assign(this, kwargs);
320
- }
321
- /**
322
- * @param {?} proto
323
- * @return {?}
324
- */
325
- Event.fromProto = /**
326
- * @param {?} proto
327
- * @return {?}
328
- */
329
- function (proto) {
330
- /** @type {?} */
331
- var m = new Event();
332
- m = Object.assign(m, proto);
333
- if (proto.startDatetime) {
334
- m.startDatetime = new Date(proto.startDatetime);
335
- }
336
- if (proto.endDatetime) {
337
- m.endDatetime = new Date(proto.endDatetime);
338
- }
339
- return m;
340
- };
341
- /**
342
- * @return {?}
343
- */
344
- Event.prototype.toApiJson = /**
345
- * @return {?}
346
- */
347
- function () {
348
- /** @type {?} */
349
- var toReturn = {};
350
- if (typeof this.title !== 'undefined') {
351
- toReturn['title'] = this.title;
352
- }
353
- if (typeof this.startDatetime !== 'undefined' && this.startDatetime !== null) {
354
- toReturn['startDatetime'] = 'toApiJson' in this.startDatetime ? (( /** @type {?} */(this.startDatetime))).toApiJson() : this.startDatetime;
355
- }
356
- if (typeof this.endDatetime !== 'undefined' && this.endDatetime !== null) {
357
- toReturn['endDatetime'] = 'toApiJson' in this.endDatetime ? (( /** @type {?} */(this.endDatetime))).toApiJson() : this.endDatetime;
358
- }
359
- return toReturn;
360
- };
361
- return Event;
362
- }());
363
- var SchedulePostStatus = /** @class */ (function () {
364
- function SchedulePostStatus(kwargs) {
365
- if (!kwargs) {
366
- return;
367
- }
368
- Object.assign(this, kwargs);
369
- }
370
- /**
371
- * @param {?} proto
372
- * @return {?}
373
- */
374
- SchedulePostStatus.fromProto = /**
375
- * @param {?} proto
376
- * @return {?}
377
- */
378
- function (proto) {
379
- /** @type {?} */
380
- var m = new SchedulePostStatus();
381
- m = Object.assign(m, proto);
382
- if (proto.error) {
383
- m.error = Error.fromProto(proto.error);
384
- }
385
- return m;
386
- };
387
- /**
388
- * @return {?}
389
- */
390
- SchedulePostStatus.prototype.toApiJson = /**
391
- * @return {?}
392
- */
393
- function () {
394
- /** @type {?} */
395
- var toReturn = {};
396
- if (typeof this.socialPostId !== 'undefined') {
397
- toReturn['socialPostId'] = this.socialPostId;
398
- }
399
- if (typeof this.socialServiceId !== 'undefined') {
400
- toReturn['socialServiceId'] = this.socialServiceId;
401
- }
402
- if (typeof this.socialServiceLabel !== 'undefined') {
403
- toReturn['socialServiceLabel'] = this.socialServiceLabel;
404
- }
405
- if (typeof this.error !== 'undefined' && this.error !== null) {
406
- toReturn['error'] = 'toApiJson' in this.error ? (( /** @type {?} */(this.error))).toApiJson() : this.error;
407
- }
408
- return toReturn;
409
- };
410
- return SchedulePostStatus;
411
- }());
412
- var SocialPost = /** @class */ (function () {
413
- function SocialPost(kwargs) {
414
- if (!kwargs) {
415
- return;
416
- }
417
- Object.assign(this, kwargs);
418
- }
419
- /**
420
- * @param {?} proto
421
- * @return {?}
422
- */
423
- SocialPost.fromProto = /**
424
- * @param {?} proto
425
- * @return {?}
426
- */
427
- function (proto) {
428
- /** @type {?} */
429
- var m = new SocialPost();
430
- m = Object.assign(m, proto);
431
- if (proto.posted) {
432
- m.posted = new Date(proto.posted);
433
- }
434
- if (proto.deletionStatus) {
435
- m.deletionStatus = enumStringToValue(SocialPostDeletionStatus, proto.deletionStatus);
436
- }
437
- if (proto.service) {
438
- m.service = enumStringToValue(SocialPostService, proto.service);
439
- }
440
- if (proto.created) {
441
- m.created = new Date(proto.created);
442
- }
443
- if (proto.scheduled) {
444
- m.scheduled = new Date(proto.scheduled);
445
- }
446
- if (proto.status) {
447
- m.status = enumStringToValue(PostingStatus, proto.status);
448
- }
449
- if (proto.event) {
450
- m.event = Event.fromProto(proto.event);
451
- }
452
- if (proto.callToAction) {
453
- m.callToAction = CallToAction.fromProto(proto.callToAction);
454
- }
455
- if (proto.error) {
456
- m.error = Error.fromProto(proto.error);
457
- }
458
- return m;
459
- };
460
- /**
461
- * @return {?}
462
- */
463
- SocialPost.prototype.toApiJson = /**
464
- * @return {?}
465
- */
466
- function () {
467
- /** @type {?} */
468
- var toReturn = {};
469
- if (typeof this.businessId !== 'undefined') {
470
- toReturn['businessId'] = this.businessId;
471
- }
472
- if (typeof this.socialPostId !== 'undefined') {
473
- toReturn['socialPostId'] = this.socialPostId;
474
- }
475
- if (typeof this.postText !== 'undefined') {
476
- toReturn['postText'] = this.postText;
477
- }
478
- if (typeof this.posted !== 'undefined' && this.posted !== null) {
479
- toReturn['posted'] = 'toApiJson' in this.posted ? (( /** @type {?} */(this.posted))).toApiJson() : this.posted;
480
- }
481
- if (typeof this.isError !== 'undefined') {
482
- toReturn['isError'] = this.isError;
483
- }
484
- if (typeof this.deletionStatus !== 'undefined') {
485
- toReturn['deletionStatus'] = this.deletionStatus;
486
- }
487
- if (typeof this.service !== 'undefined') {
488
- toReturn['service'] = this.service;
489
- }
490
- if (typeof this.permalink !== 'undefined') {
491
- toReturn['permalink'] = this.permalink;
492
- }
493
- if (typeof this.created !== 'undefined' && this.created !== null) {
494
- toReturn['created'] = 'toApiJson' in this.created ? (( /** @type {?} */(this.created))).toApiJson() : this.created;
495
- }
496
- if (typeof this.profileUrl !== 'undefined') {
497
- toReturn['profileUrl'] = this.profileUrl;
498
- }
499
- if (typeof this.profileImageUrl !== 'undefined') {
500
- toReturn['profileImageUrl'] = this.profileImageUrl;
501
- }
502
- if (typeof this.scheduled !== 'undefined' && this.scheduled !== null) {
503
- toReturn['scheduled'] = 'toApiJson' in this.scheduled ? (( /** @type {?} */(this.scheduled))).toApiJson() : this.scheduled;
504
- }
505
- if (typeof this.status !== 'undefined') {
506
- toReturn['status'] = this.status;
507
- }
508
- if (typeof this.imageUrl !== 'undefined') {
509
- toReturn['imageUrl'] = this.imageUrl;
510
- }
511
- if (typeof this.name !== 'undefined') {
512
- toReturn['name'] = this.name;
513
- }
514
- if (typeof this.username !== 'undefined') {
515
- toReturn['username'] = this.username;
516
- }
517
- if (typeof this.parentId !== 'undefined') {
518
- toReturn['parentId'] = this.parentId;
519
- }
520
- if (typeof this.socialServiceId !== 'undefined') {
521
- toReturn['socialServiceId'] = this.socialServiceId;
522
- }
523
- if (typeof this.event !== 'undefined' && this.event !== null) {
524
- toReturn['event'] = 'toApiJson' in this.event ? (( /** @type {?} */(this.event))).toApiJson() : this.event;
525
- }
526
- if (typeof this.callToAction !== 'undefined' && this.callToAction !== null) {
527
- toReturn['callToAction'] = 'toApiJson' in this.callToAction ? (( /** @type {?} */(this.callToAction))).toApiJson() : this.callToAction;
528
- }
529
- if (typeof this.videoUrl !== 'undefined') {
530
- toReturn['videoUrl'] = this.videoUrl;
531
- }
532
- if (typeof this.error !== 'undefined' && this.error !== null) {
533
- toReturn['error'] = 'toApiJson' in this.error ? (( /** @type {?} */(this.error))).toApiJson() : this.error;
534
- }
535
- if (typeof this.imageUrls !== 'undefined') {
536
- toReturn['imageUrls'] = this.imageUrls;
537
- }
538
- if (typeof this.linkPreviewImageUrl !== 'undefined') {
539
- toReturn['linkPreviewImageUrl'] = this.linkPreviewImageUrl;
540
- }
541
- if (typeof this.brandId !== 'undefined') {
542
- toReturn['brandId'] = this.brandId;
543
- }
544
- if (typeof this.multilocationPostId !== 'undefined') {
545
- toReturn['multilocationPostId'] = this.multilocationPostId;
546
- }
547
- return toReturn;
548
- };
549
- return SocialPost;
550
- }());
551
- var SocialPostData = /** @class */ (function () {
552
- function SocialPostData(kwargs) {
553
- if (!kwargs) {
554
- return;
555
- }
556
- Object.assign(this, kwargs);
557
- }
558
- /**
559
- * @param {?} proto
560
- * @return {?}
561
- */
562
- SocialPostData.fromProto = /**
563
- * @param {?} proto
564
- * @return {?}
565
- */
566
- function (proto) {
567
- /** @type {?} */
568
- var m = new SocialPostData();
569
- m = Object.assign(m, proto);
570
- if (proto.scheduleFor) {
571
- m.scheduleFor = new Date(proto.scheduleFor);
572
- }
573
- return m;
574
- };
575
- /**
576
- * @return {?}
577
- */
578
- SocialPostData.prototype.toApiJson = /**
579
- * @return {?}
580
- */
581
- function () {
582
- /** @type {?} */
583
- var toReturn = {};
584
- if (typeof this.postText !== 'undefined') {
585
- toReturn['postText'] = this.postText;
586
- }
587
- if (typeof this.imageUrl !== 'undefined') {
588
- toReturn['imageUrl'] = this.imageUrl;
589
- }
590
- if (typeof this.scheduleFor !== 'undefined' && this.scheduleFor !== null) {
591
- toReturn['scheduleFor'] = 'toApiJson' in this.scheduleFor ? (( /** @type {?} */(this.scheduleFor))).toApiJson() : this.scheduleFor;
592
- }
593
- return toReturn;
594
- };
595
- return SocialPostData;
596
- }());
597
-
598
- /**
599
- * @fileoverview added by tsickle
600
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
601
- */
602
- var FacebookPostStats = /** @class */ (function () {
603
- function FacebookPostStats(kwargs) {
604
- if (!kwargs) {
605
- return;
606
- }
607
- Object.assign(this, kwargs);
608
- }
609
- /**
610
- * @param {?} proto
611
- * @return {?}
612
- */
613
- FacebookPostStats.fromProto = /**
614
- * @param {?} proto
615
- * @return {?}
616
- */
617
- function (proto) {
618
- /** @type {?} */
619
- var m = new FacebookPostStats();
620
- m = Object.assign(m, proto);
621
- if (proto.commentCount) {
622
- m.commentCount = parseInt(proto.commentCount, 10);
623
- }
624
- if (proto.shareCount) {
625
- m.shareCount = parseInt(proto.shareCount, 10);
626
- }
627
- if (proto.likeCount) {
628
- m.likeCount = parseInt(proto.likeCount, 10);
629
- }
630
- if (proto.reactions) {
631
- m.reactions = parseInt(proto.reactions, 10);
632
- }
633
- if (proto.peopleReached) {
634
- m.peopleReached = parseInt(proto.peopleReached, 10);
635
- }
636
- return m;
637
- };
638
- /**
639
- * @return {?}
640
- */
641
- FacebookPostStats.prototype.toApiJson = /**
642
- * @return {?}
643
- */
644
- function () {
645
- /** @type {?} */
646
- var toReturn = {};
647
- if (typeof this.commentCount !== 'undefined') {
648
- toReturn['commentCount'] = this.commentCount;
649
- }
650
- if (typeof this.shareCount !== 'undefined') {
651
- toReturn['shareCount'] = this.shareCount;
652
- }
653
- if (typeof this.likeCount !== 'undefined') {
654
- toReturn['likeCount'] = this.likeCount;
655
- }
656
- if (typeof this.hasLike !== 'undefined') {
657
- toReturn['hasLike'] = this.hasLike;
658
- }
659
- if (typeof this.canLike !== 'undefined') {
660
- toReturn['canLike'] = this.canLike;
661
- }
662
- if (typeof this.reactions !== 'undefined') {
663
- toReturn['reactions'] = this.reactions;
664
- }
665
- if (typeof this.peopleReached !== 'undefined') {
666
- toReturn['peopleReached'] = this.peopleReached;
667
- }
668
- return toReturn;
669
- };
670
- return FacebookPostStats;
671
- }());
672
- var SocialPostStats = /** @class */ (function () {
673
- function SocialPostStats(kwargs) {
674
- if (!kwargs) {
675
- return;
676
- }
677
- Object.assign(this, kwargs);
678
- }
679
- /**
680
- * @param {?} proto
681
- * @return {?}
682
- */
683
- SocialPostStats.fromProto = /**
684
- * @param {?} proto
685
- * @return {?}
686
- */
687
- function (proto) {
688
- /** @type {?} */
689
- var m = new SocialPostStats();
690
- m = Object.assign(m, proto);
691
- if (proto.facebookPostStats) {
692
- m.facebookPostStats = FacebookPostStats.fromProto(proto.facebookPostStats);
693
- }
694
- if (proto.twitterPostStats) {
695
- m.twitterPostStats = TwitterPostStats.fromProto(proto.twitterPostStats);
696
- }
697
- return m;
698
- };
699
- /**
700
- * @return {?}
701
- */
702
- SocialPostStats.prototype.toApiJson = /**
703
- * @return {?}
704
- */
705
- function () {
706
- /** @type {?} */
707
- var toReturn = {};
708
- if (typeof this.internalPostId !== 'undefined') {
709
- toReturn['internalPostId'] = this.internalPostId;
710
- }
711
- if (typeof this.facebookPostStats !== 'undefined' && this.facebookPostStats !== null) {
712
- toReturn['facebookPostStats'] = 'toApiJson' in this.facebookPostStats ? (( /** @type {?} */(this.facebookPostStats))).toApiJson() : this.facebookPostStats;
713
- }
714
- if (typeof this.twitterPostStats !== 'undefined' && this.twitterPostStats !== null) {
715
- toReturn['twitterPostStats'] = 'toApiJson' in this.twitterPostStats ? (( /** @type {?} */(this.twitterPostStats))).toApiJson() : this.twitterPostStats;
716
- }
717
- return toReturn;
718
- };
719
- return SocialPostStats;
720
- }());
721
- var TwitterPostStats = /** @class */ (function () {
722
- function TwitterPostStats(kwargs) {
723
- if (!kwargs) {
724
- return;
725
- }
726
- Object.assign(this, kwargs);
727
- }
728
- /**
729
- * @param {?} proto
730
- * @return {?}
731
- */
732
- TwitterPostStats.fromProto = /**
733
- * @param {?} proto
734
- * @return {?}
735
- */
736
- function (proto) {
737
- /** @type {?} */
738
- var m = new TwitterPostStats();
739
- m = Object.assign(m, proto);
740
- if (proto.favourites) {
741
- m.favourites = parseInt(proto.favourites, 10);
742
- }
743
- if (proto.retweets) {
744
- m.retweets = parseInt(proto.retweets, 10);
745
- }
746
- return m;
747
- };
748
- /**
749
- * @return {?}
750
- */
751
- TwitterPostStats.prototype.toApiJson = /**
752
- * @return {?}
753
- */
754
- function () {
755
- /** @type {?} */
756
- var toReturn = {};
757
- if (typeof this.favourites !== 'undefined') {
758
- toReturn['favourites'] = this.favourites;
759
- }
760
- if (typeof this.hasFavourited !== 'undefined') {
761
- toReturn['hasFavourited'] = this.hasFavourited;
762
- }
763
- if (typeof this.retweets !== 'undefined') {
764
- toReturn['retweets'] = this.retweets;
765
- }
766
- if (typeof this.hasRetweeted !== 'undefined') {
767
- toReturn['hasRetweeted'] = this.hasRetweeted;
768
- }
769
- return toReturn;
770
- };
771
- return TwitterPostStats;
772
- }());
773
-
774
- /**
775
- * @fileoverview added by tsickle
776
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
777
- */
778
- var PostTemplate = /** @class */ (function () {
779
- function PostTemplate(kwargs) {
780
- if (!kwargs) {
781
- return;
782
- }
783
- Object.assign(this, kwargs);
784
- }
785
- /**
786
- * @param {?} proto
787
- * @return {?}
788
- */
789
- PostTemplate.fromProto = /**
790
- * @param {?} proto
791
- * @return {?}
792
- */
793
- function (proto) {
794
- /** @type {?} */
795
- var m = new PostTemplate();
796
- m = Object.assign(m, proto);
797
- if (proto.created) {
798
- m.created = new Date(proto.created);
799
- }
800
- if (proto.updated) {
801
- m.updated = new Date(proto.updated);
802
- }
803
- if (proto.postDateTime) {
804
- m.postDateTime = new Date(proto.postDateTime);
805
- }
806
- return m;
807
- };
808
- /**
809
- * @return {?}
810
- */
811
- PostTemplate.prototype.toApiJson = /**
812
- * @return {?}
813
- */
814
- function () {
815
- /** @type {?} */
816
- var toReturn = {};
817
- if (typeof this.accountGroupId !== 'undefined') {
818
- toReturn['accountGroupId'] = this.accountGroupId;
819
- }
820
- if (typeof this.templateId !== 'undefined') {
821
- toReturn['templateId'] = this.templateId;
822
- }
823
- if (typeof this.title !== 'undefined') {
824
- toReturn['title'] = this.title;
825
- }
826
- if (typeof this.created !== 'undefined' && this.created !== null) {
827
- toReturn['created'] = 'toApiJson' in this.created ? (( /** @type {?} */(this.created))).toApiJson() : this.created;
828
- }
829
- if (typeof this.updated !== 'undefined' && this.updated !== null) {
830
- toReturn['updated'] = 'toApiJson' in this.updated ? (( /** @type {?} */(this.updated))).toApiJson() : this.updated;
831
- }
832
- if (typeof this.postText !== 'undefined') {
833
- toReturn['postText'] = this.postText;
834
- }
835
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
836
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
837
- }
838
- if (typeof this.gmbPostCustomization !== 'undefined') {
839
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
840
- }
841
- if (typeof this.imageUrl !== 'undefined') {
842
- toReturn['imageUrl'] = this.imageUrl;
843
- }
844
- if (typeof this.imagePath !== 'undefined') {
845
- toReturn['imagePath'] = this.imagePath;
846
- }
847
- if (typeof this.imageSize !== 'undefined') {
848
- toReturn['imageSize'] = this.imageSize;
849
- }
850
- if (typeof this.previews !== 'undefined') {
851
- toReturn['previews'] = this.previews;
852
- }
853
- if (typeof this.options !== 'undefined') {
854
- toReturn['options'] = this.options;
855
- }
856
- if (typeof this.videoUrl !== 'undefined') {
857
- toReturn['videoUrl'] = this.videoUrl;
858
- }
859
- return toReturn;
860
- };
861
- return PostTemplate;
862
- }());
863
-
864
- /**
865
- * @fileoverview added by tsickle
866
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
867
- */
868
- var Location = /** @class */ (function () {
869
- function Location(kwargs) {
870
- if (!kwargs) {
871
- return;
872
- }
873
- Object.assign(this, kwargs);
874
- }
875
- /**
876
- * @param {?} proto
877
- * @return {?}
878
- */
879
- Location.fromProto = /**
880
- * @param {?} proto
881
- * @return {?}
882
- */
883
- function (proto) {
884
- /** @type {?} */
885
- var m = new Location();
886
- m = Object.assign(m, proto);
887
- return m;
888
- };
889
- /**
890
- * @return {?}
891
- */
892
- Location.prototype.toApiJson = /**
893
- * @return {?}
894
- */
895
- function () {
896
- /** @type {?} */
897
- var toReturn = {};
898
- if (typeof this.socialServiceIds !== 'undefined') {
899
- toReturn['socialServiceIds'] = this.socialServiceIds;
900
- }
901
- if (typeof this.accountGroupId !== 'undefined') {
902
- toReturn['accountGroupId'] = this.accountGroupId;
903
- }
904
- return toReturn;
905
- };
906
- return Location;
907
- }());
908
- var MultilocationPost = /** @class */ (function () {
909
- function MultilocationPost(kwargs) {
910
- if (!kwargs) {
911
- return;
912
- }
913
- Object.assign(this, kwargs);
914
- }
915
- /**
916
- * @param {?} proto
917
- * @return {?}
918
- */
919
- MultilocationPost.fromProto = /**
920
- * @param {?} proto
921
- * @return {?}
922
- */
923
- function (proto) {
924
- /** @type {?} */
925
- var m = new MultilocationPost();
926
- m = Object.assign(m, proto);
927
- if (proto.originalScheduledDate) {
928
- m.originalScheduledDate = new Date(proto.originalScheduledDate);
929
- }
930
- if (proto.originalLocations) {
931
- m.originalLocations = proto.originalLocations.map(Location.fromProto);
932
- }
933
- if (proto.editedLocations) {
934
- m.editedLocations = proto.editedLocations.map(Location.fromProto);
935
- }
936
- if (proto.deletedLocations) {
937
- m.deletedLocations = proto.deletedLocations.map(Location.fromProto);
938
- }
939
- return m;
940
- };
941
- /**
942
- * @return {?}
943
- */
944
- MultilocationPost.prototype.toApiJson = /**
945
- * @return {?}
946
- */
947
- function () {
948
- /** @type {?} */
949
- var toReturn = {};
950
- if (typeof this.brandId !== 'undefined') {
951
- toReturn['brandId'] = this.brandId;
952
- }
953
- if (typeof this.multilocationId !== 'undefined') {
954
- toReturn['multilocationId'] = this.multilocationId;
955
- }
956
- if (typeof this.originalText !== 'undefined') {
957
- toReturn['originalText'] = this.originalText;
958
- }
959
- if (typeof this.originalScheduledDate !== 'undefined' && this.originalScheduledDate !== null) {
960
- toReturn['originalScheduledDate'] = 'toApiJson' in this.originalScheduledDate ? (( /** @type {?} */(this.originalScheduledDate))).toApiJson() : this.originalScheduledDate;
961
- }
962
- if (typeof this.originalMedia !== 'undefined') {
963
- toReturn['originalMedia'] = this.originalMedia;
964
- }
965
- if (typeof this.originalLocations !== 'undefined' && this.originalLocations !== null) {
966
- toReturn['originalLocations'] = 'toApiJson' in this.originalLocations ? (( /** @type {?} */(this.originalLocations))).toApiJson() : this.originalLocations;
967
- }
968
- if (typeof this.editedLocations !== 'undefined' && this.editedLocations !== null) {
969
- toReturn['editedLocations'] = 'toApiJson' in this.editedLocations ? (( /** @type {?} */(this.editedLocations))).toApiJson() : this.editedLocations;
970
- }
971
- if (typeof this.deletedLocations !== 'undefined' && this.deletedLocations !== null) {
972
- toReturn['deletedLocations'] = 'toApiJson' in this.deletedLocations ? (( /** @type {?} */(this.deletedLocations))).toApiJson() : this.deletedLocations;
973
- }
974
- if (typeof this.originalGifs !== 'undefined') {
975
- toReturn['originalGifs'] = this.originalGifs;
976
- }
977
- if (typeof this.originalVideos !== 'undefined') {
978
- toReturn['originalVideos'] = this.originalVideos;
979
- }
980
- return toReturn;
981
- };
982
- return MultilocationPost;
983
- }());
984
- var MultilocationPostError = /** @class */ (function () {
985
- function MultilocationPostError(kwargs) {
986
- if (!kwargs) {
987
- return;
988
- }
989
- Object.assign(this, kwargs);
990
- }
991
- /**
992
- * @param {?} proto
993
- * @return {?}
994
- */
995
- MultilocationPostError.fromProto = /**
996
- * @param {?} proto
997
- * @return {?}
998
- */
999
- function (proto) {
1000
- /** @type {?} */
1001
- var m = new MultilocationPostError();
1002
- m = Object.assign(m, proto);
1003
- return m;
1004
- };
1005
- /**
1006
- * @return {?}
1007
- */
1008
- MultilocationPostError.prototype.toApiJson = /**
1009
- * @return {?}
1010
- */
1011
- function () {
1012
- /** @type {?} */
1013
- var toReturn = {};
1014
- if (typeof this.socialServiceId !== 'undefined') {
1015
- toReturn['socialServiceId'] = this.socialServiceId;
1016
- }
1017
- if (typeof this.accountGroupId !== 'undefined') {
1018
- toReturn['accountGroupId'] = this.accountGroupId;
1019
- }
1020
- if (typeof this.errorReason !== 'undefined') {
1021
- toReturn['errorReason'] = this.errorReason;
1022
- }
1023
- return toReturn;
1024
- };
1025
- return MultilocationPostError;
1026
- }());
1027
-
1028
- /**
1029
- * @fileoverview added by tsickle
1030
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1031
- */
1032
- var FieldMask = /** @class */ (function () {
1033
- function FieldMask(kwargs) {
1034
- if (!kwargs) {
1035
- return;
1036
- }
1037
- Object.assign(this, kwargs);
1038
- }
1039
- /**
1040
- * @param {?} proto
1041
- * @return {?}
1042
- */
1043
- FieldMask.fromProto = /**
1044
- * @param {?} proto
1045
- * @return {?}
1046
- */
1047
- function (proto) {
1048
- /** @type {?} */
1049
- var m = new FieldMask();
1050
- m = Object.assign(m, proto);
1051
- return m;
1052
- };
1053
- /**
1054
- * @return {?}
1055
- */
1056
- FieldMask.prototype.toApiJson = /**
1057
- * @return {?}
1058
- */
1059
- function () {
1060
- /** @type {?} */
1061
- var toReturn = {};
1062
- if (typeof this.paths !== 'undefined') {
1063
- toReturn['paths'] = this.paths;
1064
- }
1065
- return toReturn;
1066
- };
1067
- return FieldMask;
1068
- }());
1069
-
1070
- /**
1071
- * @fileoverview added by tsickle
1072
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1073
- */
1074
- /**
1075
- * @template E
1076
- * @param {?} enumRef
1077
- * @param {?} value
1078
- * @return {?}
1079
- */
1080
- function enumStringToValue$5(enumRef, value) {
1081
- if (typeof value === 'number') {
1082
- return value;
1083
- }
1084
- return enumRef[value];
1085
- }
1086
- var CreateMultilocationPostRequest = /** @class */ (function () {
1087
- function CreateMultilocationPostRequest(kwargs) {
1088
- if (!kwargs) {
1089
- return;
1090
- }
1091
- Object.assign(this, kwargs);
1092
- }
1093
- /**
1094
- * @param {?} proto
1095
- * @return {?}
1096
- */
1097
- CreateMultilocationPostRequest.fromProto = /**
1098
- * @param {?} proto
1099
- * @return {?}
1100
- */
1101
- function (proto) {
1102
- /** @type {?} */
1103
- var m = new CreateMultilocationPostRequest();
1104
- m = Object.assign(m, proto);
1105
- if (proto.scheduledDate) {
1106
- m.scheduledDate = new Date(proto.scheduledDate);
1107
- }
1108
- if (proto.locations) {
1109
- m.locations = proto.locations.map(Location.fromProto);
1110
- }
1111
- return m;
1112
- };
1113
- /**
1114
- * @return {?}
1115
- */
1116
- CreateMultilocationPostRequest.prototype.toApiJson = /**
1117
- * @return {?}
1118
- */
1119
- function () {
1120
- /** @type {?} */
1121
- var toReturn = {};
1122
- if (typeof this.brandId !== 'undefined') {
1123
- toReturn['brandId'] = this.brandId;
1124
- }
1125
- if (typeof this.text !== 'undefined') {
1126
- toReturn['text'] = this.text;
1127
- }
1128
- if (typeof this.media !== 'undefined') {
1129
- toReturn['media'] = this.media;
1130
- }
1131
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1132
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? (( /** @type {?} */(this.scheduledDate))).toApiJson() : this.scheduledDate;
1133
- }
1134
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1135
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
1136
- }
1137
- if (typeof this.gifs !== 'undefined') {
1138
- toReturn['gifs'] = this.gifs;
1139
- }
1140
- if (typeof this.videos !== 'undefined') {
1141
- toReturn['videos'] = this.videos;
1142
- }
1143
- return toReturn;
1144
- };
1145
- return CreateMultilocationPostRequest;
1146
- }());
1147
- var CreateMultilocationPostResponse = /** @class */ (function () {
1148
- function CreateMultilocationPostResponse(kwargs) {
1149
- if (!kwargs) {
1150
- return;
1151
- }
1152
- Object.assign(this, kwargs);
1153
- }
1154
- /**
1155
- * @param {?} proto
1156
- * @return {?}
1157
- */
1158
- CreateMultilocationPostResponse.fromProto = /**
1159
- * @param {?} proto
1160
- * @return {?}
1161
- */
1162
- function (proto) {
1163
- /** @type {?} */
1164
- var m = new CreateMultilocationPostResponse();
1165
- m = Object.assign(m, proto);
1166
- if (proto.post) {
1167
- m.post = MultilocationPost.fromProto(proto.post);
1168
- }
1169
- if (proto.errors) {
1170
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1171
- }
1172
- return m;
1173
- };
1174
- /**
1175
- * @return {?}
1176
- */
1177
- CreateMultilocationPostResponse.prototype.toApiJson = /**
1178
- * @return {?}
1179
- */
1180
- function () {
1181
- /** @type {?} */
1182
- var toReturn = {};
1183
- if (typeof this.post !== 'undefined' && this.post !== null) {
1184
- toReturn['post'] = 'toApiJson' in this.post ? (( /** @type {?} */(this.post))).toApiJson() : this.post;
1185
- }
1186
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1187
- toReturn['errors'] = 'toApiJson' in this.errors ? (( /** @type {?} */(this.errors))).toApiJson() : this.errors;
1188
- }
1189
- return toReturn;
1190
- };
1191
- return CreateMultilocationPostResponse;
1192
- }());
1193
- var CreatePostTemplateRequest = /** @class */ (function () {
1194
- function CreatePostTemplateRequest(kwargs) {
1195
- if (!kwargs) {
1196
- return;
1197
- }
1198
- Object.assign(this, kwargs);
1199
- }
1200
- /**
1201
- * @param {?} proto
1202
- * @return {?}
1203
- */
1204
- CreatePostTemplateRequest.fromProto = /**
1205
- * @param {?} proto
1206
- * @return {?}
1207
- */
1208
- function (proto) {
1209
- /** @type {?} */
1210
- var m = new CreatePostTemplateRequest();
1211
- m = Object.assign(m, proto);
1212
- if (proto.postDateTime) {
1213
- m.postDateTime = new Date(proto.postDateTime);
1214
- }
1215
- return m;
1216
- };
1217
- /**
1218
- * @return {?}
1219
- */
1220
- CreatePostTemplateRequest.prototype.toApiJson = /**
1221
- * @return {?}
1222
- */
1223
- function () {
1224
- /** @type {?} */
1225
- var toReturn = {};
1226
- if (typeof this.accountGroupId !== 'undefined') {
1227
- toReturn['accountGroupId'] = this.accountGroupId;
1228
- }
1229
- if (typeof this.title !== 'undefined') {
1230
- toReturn['title'] = this.title;
1231
- }
1232
- if (typeof this.postText !== 'undefined') {
1233
- toReturn['postText'] = this.postText;
1234
- }
1235
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
1236
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
1237
- }
1238
- if (typeof this.gmbPostCustomization !== 'undefined') {
1239
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
1240
- }
1241
- if (typeof this.imageUrl !== 'undefined') {
1242
- toReturn['imageUrl'] = this.imageUrl;
1243
- }
1244
- if (typeof this.imagePath !== 'undefined') {
1245
- toReturn['imagePath'] = this.imagePath;
1246
- }
1247
- if (typeof this.imageSize !== 'undefined') {
1248
- toReturn['imageSize'] = this.imageSize;
1249
- }
1250
- if (typeof this.previews !== 'undefined') {
1251
- toReturn['previews'] = this.previews;
1252
- }
1253
- if (typeof this.options !== 'undefined') {
1254
- toReturn['options'] = this.options;
1255
- }
1256
- if (typeof this.videoUrl !== 'undefined') {
1257
- toReturn['videoUrl'] = this.videoUrl;
1258
- }
1259
- return toReturn;
1260
- };
1261
- return CreatePostTemplateRequest;
1262
- }());
1263
- var CreatePostTemplateResponse = /** @class */ (function () {
1264
- function CreatePostTemplateResponse(kwargs) {
1265
- if (!kwargs) {
1266
- return;
1267
- }
1268
- Object.assign(this, kwargs);
1269
- }
1270
- /**
1271
- * @param {?} proto
1272
- * @return {?}
1273
- */
1274
- CreatePostTemplateResponse.fromProto = /**
1275
- * @param {?} proto
1276
- * @return {?}
1277
- */
1278
- function (proto) {
1279
- /** @type {?} */
1280
- var m = new CreatePostTemplateResponse();
1281
- m = Object.assign(m, proto);
1282
- return m;
1283
- };
1284
- /**
1285
- * @return {?}
1286
- */
1287
- CreatePostTemplateResponse.prototype.toApiJson = /**
1288
- * @return {?}
1289
- */
1290
- function () {
1291
- /** @type {?} */
1292
- var toReturn = {};
1293
- if (typeof this.templateId !== 'undefined') {
1294
- toReturn['templateId'] = this.templateId;
1295
- }
1296
- return toReturn;
1297
- };
1298
- return CreatePostTemplateResponse;
1299
- }());
1300
- var DateRangeFilter = /** @class */ (function () {
1301
- function DateRangeFilter(kwargs) {
1302
- if (!kwargs) {
1303
- return;
1304
- }
1305
- Object.assign(this, kwargs);
1306
- }
1307
- /**
1308
- * @param {?} proto
1309
- * @return {?}
1310
- */
1311
- DateRangeFilter.fromProto = /**
1312
- * @param {?} proto
1313
- * @return {?}
1314
- */
1315
- function (proto) {
1316
- /** @type {?} */
1317
- var m = new DateRangeFilter();
1318
- m = Object.assign(m, proto);
1319
- if (proto.beginRange) {
1320
- m.beginRange = new Date(proto.beginRange);
1321
- }
1322
- if (proto.endRange) {
1323
- m.endRange = new Date(proto.endRange);
1324
- }
1325
- return m;
1326
- };
1327
- /**
1328
- * @return {?}
1329
- */
1330
- DateRangeFilter.prototype.toApiJson = /**
1331
- * @return {?}
1332
- */
1333
- function () {
1334
- /** @type {?} */
1335
- var toReturn = {};
1336
- if (typeof this.beginRange !== 'undefined' && this.beginRange !== null) {
1337
- toReturn['beginRange'] = 'toApiJson' in this.beginRange ? (( /** @type {?} */(this.beginRange))).toApiJson() : this.beginRange;
1338
- }
1339
- if (typeof this.endRange !== 'undefined' && this.endRange !== null) {
1340
- toReturn['endRange'] = 'toApiJson' in this.endRange ? (( /** @type {?} */(this.endRange))).toApiJson() : this.endRange;
1341
- }
1342
- return toReturn;
1343
- };
1344
- return DateRangeFilter;
1345
- }());
1346
- var DeleteMultilocationPostRequest = /** @class */ (function () {
1347
- function DeleteMultilocationPostRequest(kwargs) {
1348
- if (!kwargs) {
1349
- return;
1350
- }
1351
- Object.assign(this, kwargs);
1352
- }
1353
- /**
1354
- * @param {?} proto
1355
- * @return {?}
1356
- */
1357
- DeleteMultilocationPostRequest.fromProto = /**
1358
- * @param {?} proto
1359
- * @return {?}
1360
- */
1361
- function (proto) {
1362
- /** @type {?} */
1363
- var m = new DeleteMultilocationPostRequest();
1364
- m = Object.assign(m, proto);
1365
- return m;
1366
- };
1367
- /**
1368
- * @return {?}
1369
- */
1370
- DeleteMultilocationPostRequest.prototype.toApiJson = /**
1371
- * @return {?}
1372
- */
1373
- function () {
1374
- /** @type {?} */
1375
- var toReturn = {};
1376
- if (typeof this.brandId !== 'undefined') {
1377
- toReturn['brandId'] = this.brandId;
1378
- }
1379
- if (typeof this.multilocationId !== 'undefined') {
1380
- toReturn['multilocationId'] = this.multilocationId;
1381
- }
1382
- return toReturn;
1383
- };
1384
- return DeleteMultilocationPostRequest;
1385
- }());
1386
- var DeletePostTemplateRequest = /** @class */ (function () {
1387
- function DeletePostTemplateRequest(kwargs) {
1388
- if (!kwargs) {
1389
- return;
1390
- }
1391
- Object.assign(this, kwargs);
1392
- }
1393
- /**
1394
- * @param {?} proto
1395
- * @return {?}
1396
- */
1397
- DeletePostTemplateRequest.fromProto = /**
1398
- * @param {?} proto
1399
- * @return {?}
1400
- */
1401
- function (proto) {
1402
- /** @type {?} */
1403
- var m = new DeletePostTemplateRequest();
1404
- m = Object.assign(m, proto);
1405
- return m;
1406
- };
1407
- /**
1408
- * @return {?}
1409
- */
1410
- DeletePostTemplateRequest.prototype.toApiJson = /**
1411
- * @return {?}
1412
- */
1413
- function () {
1414
- /** @type {?} */
1415
- var toReturn = {};
1416
- if (typeof this.accountGroupId !== 'undefined') {
1417
- toReturn['accountGroupId'] = this.accountGroupId;
1418
- }
1419
- if (typeof this.templateId !== 'undefined') {
1420
- toReturn['templateId'] = this.templateId;
1421
- }
1422
- return toReturn;
1423
- };
1424
- return DeletePostTemplateRequest;
1425
- }());
1426
- var DeleteSocialPostRequest = /** @class */ (function () {
1427
- function DeleteSocialPostRequest(kwargs) {
1428
- if (!kwargs) {
1429
- return;
1430
- }
1431
- Object.assign(this, kwargs);
1432
- }
1433
- /**
1434
- * @param {?} proto
1435
- * @return {?}
1436
- */
1437
- DeleteSocialPostRequest.fromProto = /**
1438
- * @param {?} proto
1439
- * @return {?}
1440
- */
1441
- function (proto) {
1442
- /** @type {?} */
1443
- var m = new DeleteSocialPostRequest();
1444
- m = Object.assign(m, proto);
1445
- return m;
1446
- };
1447
- /**
1448
- * @return {?}
1449
- */
1450
- DeleteSocialPostRequest.prototype.toApiJson = /**
1451
- * @return {?}
1452
- */
1453
- function () {
1454
- /** @type {?} */
1455
- var toReturn = {};
1456
- if (typeof this.businessId !== 'undefined') {
1457
- toReturn['businessId'] = this.businessId;
1458
- }
1459
- if (typeof this.socialPostId !== 'undefined') {
1460
- toReturn['socialPostId'] = this.socialPostId;
1461
- }
1462
- return toReturn;
1463
- };
1464
- return DeleteSocialPostRequest;
1465
- }());
1466
- var EditMultilocationPostRequest = /** @class */ (function () {
1467
- function EditMultilocationPostRequest(kwargs) {
1468
- if (!kwargs) {
1469
- return;
1470
- }
1471
- Object.assign(this, kwargs);
1472
- }
1473
- /**
1474
- * @param {?} proto
1475
- * @return {?}
1476
- */
1477
- EditMultilocationPostRequest.fromProto = /**
1478
- * @param {?} proto
1479
- * @return {?}
1480
- */
1481
- function (proto) {
1482
- /** @type {?} */
1483
- var m = new EditMultilocationPostRequest();
1484
- m = Object.assign(m, proto);
1485
- if (proto.scheduledDate) {
1486
- m.scheduledDate = new Date(proto.scheduledDate);
1487
- }
1488
- if (proto.fieldMask) {
1489
- m.fieldMask = FieldMask.fromProto(proto.fieldMask);
1490
- }
1491
- if (proto.locations) {
1492
- m.locations = proto.locations.map(Location.fromProto);
1493
- }
1494
- return m;
1495
- };
1496
- /**
1497
- * @return {?}
1498
- */
1499
- EditMultilocationPostRequest.prototype.toApiJson = /**
1500
- * @return {?}
1501
- */
1502
- function () {
1503
- /** @type {?} */
1504
- var toReturn = {};
1505
- if (typeof this.brandId !== 'undefined') {
1506
- toReturn['brandId'] = this.brandId;
1507
- }
1508
- if (typeof this.multilocationId !== 'undefined') {
1509
- toReturn['multilocationId'] = this.multilocationId;
1510
- }
1511
- if (typeof this.text !== 'undefined') {
1512
- toReturn['text'] = this.text;
1513
- }
1514
- if (typeof this.media !== 'undefined') {
1515
- toReturn['media'] = this.media;
1516
- }
1517
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1518
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? (( /** @type {?} */(this.scheduledDate))).toApiJson() : this.scheduledDate;
1519
- }
1520
- if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
1521
- toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? (( /** @type {?} */(this.fieldMask))).toApiJson() : this.fieldMask;
1522
- }
1523
- if (typeof this.gifs !== 'undefined') {
1524
- toReturn['gifs'] = this.gifs;
1525
- }
1526
- if (typeof this.videos !== 'undefined') {
1527
- toReturn['videos'] = this.videos;
1528
- }
1529
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1530
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
1531
- }
1532
- return toReturn;
1533
- };
1534
- return EditMultilocationPostRequest;
1535
- }());
1536
- var EditMultilocationPostResponse = /** @class */ (function () {
1537
- function EditMultilocationPostResponse(kwargs) {
1538
- if (!kwargs) {
1539
- return;
1540
- }
1541
- Object.assign(this, kwargs);
1542
- }
1543
- /**
1544
- * @param {?} proto
1545
- * @return {?}
1546
- */
1547
- EditMultilocationPostResponse.fromProto = /**
1548
- * @param {?} proto
1549
- * @return {?}
1550
- */
1551
- function (proto) {
1552
- /** @type {?} */
1553
- var m = new EditMultilocationPostResponse();
1554
- m = Object.assign(m, proto);
1555
- if (proto.post) {
1556
- m.post = MultilocationPost.fromProto(proto.post);
1557
- }
1558
- if (proto.errors) {
1559
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1560
- }
1561
- return m;
1562
- };
1563
- /**
1564
- * @return {?}
1565
- */
1566
- EditMultilocationPostResponse.prototype.toApiJson = /**
1567
- * @return {?}
1568
- */
1569
- function () {
1570
- /** @type {?} */
1571
- var toReturn = {};
1572
- if (typeof this.post !== 'undefined' && this.post !== null) {
1573
- toReturn['post'] = 'toApiJson' in this.post ? (( /** @type {?} */(this.post))).toApiJson() : this.post;
1574
- }
1575
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1576
- toReturn['errors'] = 'toApiJson' in this.errors ? (( /** @type {?} */(this.errors))).toApiJson() : this.errors;
1577
- }
1578
- return toReturn;
1579
- };
1580
- return EditMultilocationPostResponse;
1581
- }());
1582
- var PartnerListScheduledSocialPostsRequestFilters = /** @class */ (function () {
1583
- function PartnerListScheduledSocialPostsRequestFilters(kwargs) {
1584
- if (!kwargs) {
1585
- return;
1586
- }
1587
- Object.assign(this, kwargs);
1588
- }
1589
- /**
1590
- * @param {?} proto
1591
- * @return {?}
1592
- */
1593
- PartnerListScheduledSocialPostsRequestFilters.fromProto = /**
1594
- * @param {?} proto
1595
- * @return {?}
1596
- */
1597
- function (proto) {
1598
- /** @type {?} */
1599
- var m = new PartnerListScheduledSocialPostsRequestFilters();
1600
- m = Object.assign(m, proto);
1601
- if (proto.dateRange) {
1602
- m.dateRange = DateRangeFilter.fromProto(proto.dateRange);
1603
- }
1604
- return m;
1605
- };
1606
- /**
1607
- * @return {?}
1608
- */
1609
- PartnerListScheduledSocialPostsRequestFilters.prototype.toApiJson = /**
1610
- * @return {?}
1611
- */
1612
- function () {
1613
- /** @type {?} */
1614
- var toReturn = {};
1615
- if (typeof this.dateRange !== 'undefined' && this.dateRange !== null) {
1616
- toReturn['dateRange'] = 'toApiJson' in this.dateRange ? (( /** @type {?} */(this.dateRange))).toApiJson() : this.dateRange;
1617
- }
1618
- if (typeof this.partnerId !== 'undefined') {
1619
- toReturn['partnerId'] = this.partnerId;
1620
- }
1621
- return toReturn;
1622
- };
1623
- return PartnerListScheduledSocialPostsRequestFilters;
1624
- }());
1625
- var GetMultiSocialPostStatsRequest = /** @class */ (function () {
1626
- function GetMultiSocialPostStatsRequest(kwargs) {
1627
- if (!kwargs) {
1628
- return;
1629
- }
1630
- Object.assign(this, kwargs);
1631
- }
1632
- /**
1633
- * @param {?} proto
1634
- * @return {?}
1635
- */
1636
- GetMultiSocialPostStatsRequest.fromProto = /**
1637
- * @param {?} proto
1638
- * @return {?}
1639
- */
1640
- function (proto) {
1641
- /** @type {?} */
1642
- var m = new GetMultiSocialPostStatsRequest();
1643
- m = Object.assign(m, proto);
1644
- return m;
1645
- };
1646
- /**
1647
- * @return {?}
1648
- */
1649
- GetMultiSocialPostStatsRequest.prototype.toApiJson = /**
1650
- * @return {?}
1651
- */
1652
- function () {
1653
- /** @type {?} */
1654
- var toReturn = {};
1655
- if (typeof this.internalPostIds !== 'undefined') {
1656
- toReturn['internalPostIds'] = this.internalPostIds;
1657
- }
1658
- if (typeof this.businessId !== 'undefined') {
1659
- toReturn['businessId'] = this.businessId;
1660
- }
1661
- if (typeof this.partnerId !== 'undefined') {
1662
- toReturn['partnerId'] = this.partnerId;
1663
- }
1664
- return toReturn;
1665
- };
1666
- return GetMultiSocialPostStatsRequest;
1667
- }());
1668
- var GetMultiSocialPostStatsResponse = /** @class */ (function () {
1669
- function GetMultiSocialPostStatsResponse(kwargs) {
1670
- if (!kwargs) {
1671
- return;
1672
- }
1673
- Object.assign(this, kwargs);
1674
- }
1675
- /**
1676
- * @param {?} proto
1677
- * @return {?}
1678
- */
1679
- GetMultiSocialPostStatsResponse.fromProto = /**
1680
- * @param {?} proto
1681
- * @return {?}
1682
- */
1683
- function (proto) {
1684
- /** @type {?} */
1685
- var m = new GetMultiSocialPostStatsResponse();
1686
- m = Object.assign(m, proto);
1687
- if (proto.socialPostStats) {
1688
- m.socialPostStats = proto.socialPostStats.map(SocialPostStats.fromProto);
1689
- }
1690
- return m;
1691
- };
1692
- /**
1693
- * @return {?}
1694
- */
1695
- GetMultiSocialPostStatsResponse.prototype.toApiJson = /**
1696
- * @return {?}
1697
- */
1698
- function () {
1699
- /** @type {?} */
1700
- var toReturn = {};
1701
- if (typeof this.socialPostStats !== 'undefined' && this.socialPostStats !== null) {
1702
- toReturn['socialPostStats'] = 'toApiJson' in this.socialPostStats ? (( /** @type {?} */(this.socialPostStats))).toApiJson() : this.socialPostStats;
1703
- }
1704
- return toReturn;
1705
- };
1706
- return GetMultiSocialPostStatsResponse;
1707
- }());
1708
- var GetMultiSocialPostsRequest = /** @class */ (function () {
1709
- function GetMultiSocialPostsRequest(kwargs) {
1710
- if (!kwargs) {
1711
- return;
1712
- }
1713
- Object.assign(this, kwargs);
1714
- }
1715
- /**
1716
- * @param {?} proto
1717
- * @return {?}
1718
- */
1719
- GetMultiSocialPostsRequest.fromProto = /**
1720
- * @param {?} proto
1721
- * @return {?}
1722
- */
1723
- function (proto) {
1724
- /** @type {?} */
1725
- var m = new GetMultiSocialPostsRequest();
1726
- m = Object.assign(m, proto);
1727
- return m;
1728
- };
1729
- /**
1730
- * @return {?}
1731
- */
1732
- GetMultiSocialPostsRequest.prototype.toApiJson = /**
1733
- * @return {?}
1734
- */
1735
- function () {
1736
- /** @type {?} */
1737
- var toReturn = {};
1738
- if (typeof this.businessId !== 'undefined') {
1739
- toReturn['businessId'] = this.businessId;
1740
- }
1741
- if (typeof this.internalPostIds !== 'undefined') {
1742
- toReturn['internalPostIds'] = this.internalPostIds;
1743
- }
1744
- return toReturn;
1745
- };
1746
- return GetMultiSocialPostsRequest;
1747
- }());
1748
- var GetMultiSocialPostsResponse = /** @class */ (function () {
1749
- function GetMultiSocialPostsResponse(kwargs) {
1750
- if (!kwargs) {
1751
- return;
1752
- }
1753
- Object.assign(this, kwargs);
1754
- }
1755
- /**
1756
- * @param {?} proto
1757
- * @return {?}
1758
- */
1759
- GetMultiSocialPostsResponse.fromProto = /**
1760
- * @param {?} proto
1761
- * @return {?}
1762
- */
1763
- function (proto) {
1764
- /** @type {?} */
1765
- var m = new GetMultiSocialPostsResponse();
1766
- m = Object.assign(m, proto);
1767
- if (proto.socialPosts) {
1768
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
1769
- }
1770
- return m;
1771
- };
1772
- /**
1773
- * @return {?}
1774
- */
1775
- GetMultiSocialPostsResponse.prototype.toApiJson = /**
1776
- * @return {?}
1777
- */
1778
- function () {
1779
- /** @type {?} */
1780
- var toReturn = {};
1781
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
1782
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
1783
- }
1784
- return toReturn;
1785
- };
1786
- return GetMultiSocialPostsResponse;
1787
- }());
1788
- var GetMultilocationPostRequest = /** @class */ (function () {
1789
- function GetMultilocationPostRequest(kwargs) {
1790
- if (!kwargs) {
1791
- return;
1792
- }
1793
- Object.assign(this, kwargs);
1794
- }
1795
- /**
1796
- * @param {?} proto
1797
- * @return {?}
1798
- */
1799
- GetMultilocationPostRequest.fromProto = /**
1800
- * @param {?} proto
1801
- * @return {?}
1802
- */
1803
- function (proto) {
1804
- /** @type {?} */
1805
- var m = new GetMultilocationPostRequest();
1806
- m = Object.assign(m, proto);
1807
- return m;
1808
- };
1809
- /**
1810
- * @return {?}
1811
- */
1812
- GetMultilocationPostRequest.prototype.toApiJson = /**
1813
- * @return {?}
1814
- */
1815
- function () {
1816
- /** @type {?} */
1817
- var toReturn = {};
1818
- if (typeof this.brandId !== 'undefined') {
1819
- toReturn['brandId'] = this.brandId;
1820
- }
1821
- if (typeof this.multilocationId !== 'undefined') {
1822
- toReturn['multilocationId'] = this.multilocationId;
1823
- }
1824
- return toReturn;
1825
- };
1826
- return GetMultilocationPostRequest;
1827
- }());
1828
- var GetMultilocationPostResponse = /** @class */ (function () {
1829
- function GetMultilocationPostResponse(kwargs) {
1830
- if (!kwargs) {
1831
- return;
1832
- }
1833
- Object.assign(this, kwargs);
1834
- }
1835
- /**
1836
- * @param {?} proto
1837
- * @return {?}
1838
- */
1839
- GetMultilocationPostResponse.fromProto = /**
1840
- * @param {?} proto
1841
- * @return {?}
1842
- */
1843
- function (proto) {
1844
- /** @type {?} */
1845
- var m = new GetMultilocationPostResponse();
1846
- m = Object.assign(m, proto);
1847
- if (proto.multilocationPost) {
1848
- m.multilocationPost = MultilocationPost.fromProto(proto.multilocationPost);
1849
- }
1850
- return m;
1851
- };
1852
- /**
1853
- * @return {?}
1854
- */
1855
- GetMultilocationPostResponse.prototype.toApiJson = /**
1856
- * @return {?}
1857
- */
1858
- function () {
1859
- /** @type {?} */
1860
- var toReturn = {};
1861
- if (typeof this.multilocationPost !== 'undefined' && this.multilocationPost !== null) {
1862
- toReturn['multilocationPost'] = 'toApiJson' in this.multilocationPost ? (( /** @type {?} */(this.multilocationPost))).toApiJson() : this.multilocationPost;
1863
- }
1864
- return toReturn;
1865
- };
1866
- return GetMultilocationPostResponse;
1867
- }());
1868
- var GetPostTemplateRequest = /** @class */ (function () {
1869
- function GetPostTemplateRequest(kwargs) {
1870
- if (!kwargs) {
1871
- return;
1872
- }
1873
- Object.assign(this, kwargs);
1874
- }
1875
- /**
1876
- * @param {?} proto
1877
- * @return {?}
1878
- */
1879
- GetPostTemplateRequest.fromProto = /**
1880
- * @param {?} proto
1881
- * @return {?}
1882
- */
1883
- function (proto) {
1884
- /** @type {?} */
1885
- var m = new GetPostTemplateRequest();
1886
- m = Object.assign(m, proto);
1887
- return m;
1888
- };
1889
- /**
1890
- * @return {?}
1891
- */
1892
- GetPostTemplateRequest.prototype.toApiJson = /**
1893
- * @return {?}
1894
- */
1895
- function () {
1896
- /** @type {?} */
1897
- var toReturn = {};
1898
- if (typeof this.accountGroupId !== 'undefined') {
1899
- toReturn['accountGroupId'] = this.accountGroupId;
1900
- }
1901
- if (typeof this.templateId !== 'undefined') {
1902
- toReturn['templateId'] = this.templateId;
1903
- }
1904
- return toReturn;
1905
- };
1906
- return GetPostTemplateRequest;
1907
- }());
1908
- var GetPostTemplateResponse = /** @class */ (function () {
1909
- function GetPostTemplateResponse(kwargs) {
1910
- if (!kwargs) {
1911
- return;
1912
- }
1913
- Object.assign(this, kwargs);
1914
- }
1915
- /**
1916
- * @param {?} proto
1917
- * @return {?}
1918
- */
1919
- GetPostTemplateResponse.fromProto = /**
1920
- * @param {?} proto
1921
- * @return {?}
1922
- */
1923
- function (proto) {
1924
- /** @type {?} */
1925
- var m = new GetPostTemplateResponse();
1926
- m = Object.assign(m, proto);
1927
- if (proto.postTemplate) {
1928
- m.postTemplate = PostTemplate.fromProto(proto.postTemplate);
1929
- }
1930
- return m;
1931
- };
1932
- /**
1933
- * @return {?}
1934
- */
1935
- GetPostTemplateResponse.prototype.toApiJson = /**
1936
- * @return {?}
1937
- */
1938
- function () {
1939
- /** @type {?} */
1940
- var toReturn = {};
1941
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
1942
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? (( /** @type {?} */(this.postTemplate))).toApiJson() : this.postTemplate;
1943
- }
1944
- return toReturn;
1945
- };
1946
- return GetPostTemplateResponse;
1947
- }());
1948
- var GetScheduledPostCountRequest = /** @class */ (function () {
1949
- function GetScheduledPostCountRequest(kwargs) {
1950
- if (!kwargs) {
1951
- return;
1952
- }
1953
- Object.assign(this, kwargs);
1954
- }
1955
- /**
1956
- * @param {?} proto
1957
- * @return {?}
1958
- */
1959
- GetScheduledPostCountRequest.fromProto = /**
1960
- * @param {?} proto
1961
- * @return {?}
1962
- */
1963
- function (proto) {
1964
- /** @type {?} */
1965
- var m = new GetScheduledPostCountRequest();
1966
- m = Object.assign(m, proto);
1967
- return m;
1968
- };
1969
- /**
1970
- * @return {?}
1971
- */
1972
- GetScheduledPostCountRequest.prototype.toApiJson = /**
1973
- * @return {?}
1974
- */
1975
- function () {
1976
- /** @type {?} */
1977
- var toReturn = {};
1978
- if (typeof this.partnerId !== 'undefined') {
1979
- toReturn['partnerId'] = this.partnerId;
1980
- }
1981
- if (typeof this.businessId !== 'undefined') {
1982
- toReturn['businessId'] = this.businessId;
1983
- }
1984
- if (typeof this.socialServiceIds !== 'undefined') {
1985
- toReturn['socialServiceIds'] = this.socialServiceIds;
1986
- }
1987
- return toReturn;
1988
- };
1989
- return GetScheduledPostCountRequest;
1990
- }());
1991
- var GetScheduledPostCountResponse = /** @class */ (function () {
1992
- function GetScheduledPostCountResponse(kwargs) {
1993
- if (!kwargs) {
1994
- return;
1995
- }
1996
- Object.assign(this, kwargs);
1997
- }
1998
- /**
1999
- * @param {?} proto
2000
- * @return {?}
2001
- */
2002
- GetScheduledPostCountResponse.fromProto = /**
2003
- * @param {?} proto
2004
- * @return {?}
2005
- */
2006
- function (proto) {
2007
- /** @type {?} */
2008
- var m = new GetScheduledPostCountResponse();
2009
- m = Object.assign(m, proto);
2010
- if (proto.count) {
2011
- m.count = parseInt(proto.count, 10);
2012
- }
2013
- return m;
2014
- };
2015
- /**
2016
- * @return {?}
2017
- */
2018
- GetScheduledPostCountResponse.prototype.toApiJson = /**
2019
- * @return {?}
2020
- */
2021
- function () {
2022
- /** @type {?} */
2023
- var toReturn = {};
2024
- if (typeof this.count !== 'undefined') {
2025
- toReturn['count'] = this.count;
2026
- }
2027
- return toReturn;
2028
- };
2029
- return GetScheduledPostCountResponse;
2030
- }());
2031
- var ListMultilocationPostsForBrandRequest = /** @class */ (function () {
2032
- function ListMultilocationPostsForBrandRequest(kwargs) {
2033
- if (!kwargs) {
2034
- return;
2035
- }
2036
- Object.assign(this, kwargs);
2037
- }
2038
- /**
2039
- * @param {?} proto
2040
- * @return {?}
2041
- */
2042
- ListMultilocationPostsForBrandRequest.fromProto = /**
2043
- * @param {?} proto
2044
- * @return {?}
2045
- */
2046
- function (proto) {
2047
- /** @type {?} */
2048
- var m = new ListMultilocationPostsForBrandRequest();
2049
- m = Object.assign(m, proto);
2050
- if (proto.startDate) {
2051
- m.startDate = new Date(proto.startDate);
2052
- }
2053
- if (proto.endDate) {
2054
- m.endDate = new Date(proto.endDate);
2055
- }
2056
- if (proto.pageSize) {
2057
- m.pageSize = parseInt(proto.pageSize, 10);
2058
- }
2059
- return m;
2060
- };
2061
- /**
2062
- * @return {?}
2063
- */
2064
- ListMultilocationPostsForBrandRequest.prototype.toApiJson = /**
2065
- * @return {?}
2066
- */
2067
- function () {
2068
- /** @type {?} */
2069
- var toReturn = {};
2070
- if (typeof this.brandId !== 'undefined') {
2071
- toReturn['brandId'] = this.brandId;
2072
- }
2073
- if (typeof this.startDate !== 'undefined' && this.startDate !== null) {
2074
- toReturn['startDate'] = 'toApiJson' in this.startDate ? (( /** @type {?} */(this.startDate))).toApiJson() : this.startDate;
2075
- }
2076
- if (typeof this.endDate !== 'undefined' && this.endDate !== null) {
2077
- toReturn['endDate'] = 'toApiJson' in this.endDate ? (( /** @type {?} */(this.endDate))).toApiJson() : this.endDate;
2078
- }
2079
- if (typeof this.cursor !== 'undefined') {
2080
- toReturn['cursor'] = this.cursor;
2081
- }
2082
- if (typeof this.pageSize !== 'undefined') {
2083
- toReturn['pageSize'] = this.pageSize;
2084
- }
2085
- return toReturn;
2086
- };
2087
- return ListMultilocationPostsForBrandRequest;
2088
- }());
2089
- var ListMultilocationPostsForBrandResponse = /** @class */ (function () {
2090
- function ListMultilocationPostsForBrandResponse(kwargs) {
2091
- if (!kwargs) {
2092
- return;
2093
- }
2094
- Object.assign(this, kwargs);
2095
- }
2096
- /**
2097
- * @param {?} proto
2098
- * @return {?}
2099
- */
2100
- ListMultilocationPostsForBrandResponse.fromProto = /**
2101
- * @param {?} proto
2102
- * @return {?}
2103
- */
2104
- function (proto) {
2105
- /** @type {?} */
2106
- var m = new ListMultilocationPostsForBrandResponse();
2107
- m = Object.assign(m, proto);
2108
- if (proto.multilocationPosts) {
2109
- m.multilocationPosts = proto.multilocationPosts.map(MultilocationPost.fromProto);
2110
- }
2111
- if (proto.failedSocialPosts) {
2112
- m.failedSocialPosts = proto.failedSocialPosts.map(SocialPost.fromProto);
2113
- }
2114
- return m;
2115
- };
2116
- /**
2117
- * @return {?}
2118
- */
2119
- ListMultilocationPostsForBrandResponse.prototype.toApiJson = /**
2120
- * @return {?}
2121
- */
2122
- function () {
2123
- /** @type {?} */
2124
- var toReturn = {};
2125
- if (typeof this.multilocationPosts !== 'undefined' && this.multilocationPosts !== null) {
2126
- toReturn['multilocationPosts'] = 'toApiJson' in this.multilocationPosts ? (( /** @type {?} */(this.multilocationPosts))).toApiJson() : this.multilocationPosts;
2127
- }
2128
- if (typeof this.nextCursor !== 'undefined') {
2129
- toReturn['nextCursor'] = this.nextCursor;
2130
- }
2131
- if (typeof this.hasMore !== 'undefined') {
2132
- toReturn['hasMore'] = this.hasMore;
2133
- }
2134
- if (typeof this.failedSocialPosts !== 'undefined' && this.failedSocialPosts !== null) {
2135
- toReturn['failedSocialPosts'] = 'toApiJson' in this.failedSocialPosts ? (( /** @type {?} */(this.failedSocialPosts))).toApiJson() : this.failedSocialPosts;
2136
- }
2137
- return toReturn;
2138
- };
2139
- return ListMultilocationPostsForBrandResponse;
2140
- }());
2141
- var ListPostTemplatesRequest = /** @class */ (function () {
2142
- function ListPostTemplatesRequest(kwargs) {
2143
- if (!kwargs) {
2144
- return;
2145
- }
2146
- Object.assign(this, kwargs);
2147
- }
2148
- /**
2149
- * @param {?} proto
2150
- * @return {?}
2151
- */
2152
- ListPostTemplatesRequest.fromProto = /**
2153
- * @param {?} proto
2154
- * @return {?}
2155
- */
2156
- function (proto) {
2157
- /** @type {?} */
2158
- var m = new ListPostTemplatesRequest();
2159
- m = Object.assign(m, proto);
2160
- if (proto.pageSize) {
2161
- m.pageSize = parseInt(proto.pageSize, 10);
2162
- }
2163
- return m;
2164
- };
2165
- /**
2166
- * @return {?}
2167
- */
2168
- ListPostTemplatesRequest.prototype.toApiJson = /**
2169
- * @return {?}
2170
- */
2171
- function () {
2172
- /** @type {?} */
2173
- var toReturn = {};
2174
- if (typeof this.accountGroupId !== 'undefined') {
2175
- toReturn['accountGroupId'] = this.accountGroupId;
2176
- }
2177
- if (typeof this.cursor !== 'undefined') {
2178
- toReturn['cursor'] = this.cursor;
2179
- }
2180
- if (typeof this.pageSize !== 'undefined') {
2181
- toReturn['pageSize'] = this.pageSize;
2182
- }
2183
- return toReturn;
2184
- };
2185
- return ListPostTemplatesRequest;
2186
- }());
2187
- var ListPostTemplatesResponse = /** @class */ (function () {
2188
- function ListPostTemplatesResponse(kwargs) {
2189
- if (!kwargs) {
2190
- return;
2191
- }
2192
- Object.assign(this, kwargs);
2193
- }
2194
- /**
2195
- * @param {?} proto
2196
- * @return {?}
2197
- */
2198
- ListPostTemplatesResponse.fromProto = /**
2199
- * @param {?} proto
2200
- * @return {?}
2201
- */
2202
- function (proto) {
2203
- /** @type {?} */
2204
- var m = new ListPostTemplatesResponse();
2205
- m = Object.assign(m, proto);
2206
- if (proto.postTemplate) {
2207
- m.postTemplate = proto.postTemplate.map(PostTemplate.fromProto);
2208
- }
2209
- return m;
2210
- };
2211
- /**
2212
- * @return {?}
2213
- */
2214
- ListPostTemplatesResponse.prototype.toApiJson = /**
2215
- * @return {?}
2216
- */
2217
- function () {
2218
- /** @type {?} */
2219
- var toReturn = {};
2220
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
2221
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? (( /** @type {?} */(this.postTemplate))).toApiJson() : this.postTemplate;
2222
- }
2223
- if (typeof this.nextCursor !== 'undefined') {
2224
- toReturn['nextCursor'] = this.nextCursor;
2225
- }
2226
- if (typeof this.hasMore !== 'undefined') {
2227
- toReturn['hasMore'] = this.hasMore;
2228
- }
2229
- return toReturn;
2230
- };
2231
- return ListPostTemplatesResponse;
2232
- }());
2233
- var ListSocialPostsRequest = /** @class */ (function () {
2234
- function ListSocialPostsRequest(kwargs) {
2235
- if (!kwargs) {
2236
- return;
2237
- }
2238
- Object.assign(this, kwargs);
2239
- }
2240
- /**
2241
- * @param {?} proto
2242
- * @return {?}
2243
- */
2244
- ListSocialPostsRequest.fromProto = /**
2245
- * @param {?} proto
2246
- * @return {?}
2247
- */
2248
- function (proto) {
2249
- /** @type {?} */
2250
- var m = new ListSocialPostsRequest();
2251
- m = Object.assign(m, proto);
2252
- if (proto.start) {
2253
- m.start = new Date(proto.start);
2254
- }
2255
- if (proto.end) {
2256
- m.end = new Date(proto.end);
2257
- }
2258
- if (proto.pageSize) {
2259
- m.pageSize = parseInt(proto.pageSize, 10);
2260
- }
2261
- return m;
2262
- };
2263
- /**
2264
- * @return {?}
2265
- */
2266
- ListSocialPostsRequest.prototype.toApiJson = /**
2267
- * @return {?}
2268
- */
2269
- function () {
2270
- /** @type {?} */
2271
- var toReturn = {};
2272
- if (typeof this.start !== 'undefined' && this.start !== null) {
2273
- toReturn['start'] = 'toApiJson' in this.start ? (( /** @type {?} */(this.start))).toApiJson() : this.start;
2274
- }
2275
- if (typeof this.end !== 'undefined' && this.end !== null) {
2276
- toReturn['end'] = 'toApiJson' in this.end ? (( /** @type {?} */(this.end))).toApiJson() : this.end;
2277
- }
2278
- if (typeof this.businessId !== 'undefined') {
2279
- toReturn['businessId'] = this.businessId;
2280
- }
2281
- if (typeof this.partnerId !== 'undefined') {
2282
- toReturn['partnerId'] = this.partnerId;
2283
- }
2284
- if (typeof this.cursor !== 'undefined') {
2285
- toReturn['cursor'] = this.cursor;
2286
- }
2287
- if (typeof this.socialServiceIds !== 'undefined') {
2288
- toReturn['socialServiceIds'] = this.socialServiceIds;
2289
- }
2290
- if (typeof this.tags !== 'undefined') {
2291
- toReturn['tags'] = this.tags;
2292
- }
2293
- if (typeof this.pageSize !== 'undefined') {
2294
- toReturn['pageSize'] = this.pageSize;
2295
- }
2296
- return toReturn;
2297
- };
2298
- return ListSocialPostsRequest;
2299
- }());
2300
- var ListSocialPostsResponse = /** @class */ (function () {
2301
- function ListSocialPostsResponse(kwargs) {
2302
- if (!kwargs) {
2303
- return;
2304
- }
2305
- Object.assign(this, kwargs);
2306
- }
2307
- /**
2308
- * @param {?} proto
2309
- * @return {?}
2310
- */
2311
- ListSocialPostsResponse.fromProto = /**
2312
- * @param {?} proto
2313
- * @return {?}
2314
- */
2315
- function (proto) {
2316
- /** @type {?} */
2317
- var m = new ListSocialPostsResponse();
2318
- m = Object.assign(m, proto);
2319
- if (proto.socialPosts) {
2320
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2321
- }
2322
- return m;
2323
- };
2324
- /**
2325
- * @return {?}
2326
- */
2327
- ListSocialPostsResponse.prototype.toApiJson = /**
2328
- * @return {?}
2329
- */
2330
- function () {
2331
- /** @type {?} */
2332
- var toReturn = {};
2333
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2334
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
2335
- }
2336
- if (typeof this.nextCursor !== 'undefined') {
2337
- toReturn['nextCursor'] = this.nextCursor;
2338
- }
2339
- if (typeof this.hasMore !== 'undefined') {
2340
- toReturn['hasMore'] = this.hasMore;
2341
- }
2342
- return toReturn;
2343
- };
2344
- return ListSocialPostsResponse;
2345
- }());
2346
- var PartnerListScheduledPostsResponse = /** @class */ (function () {
2347
- function PartnerListScheduledPostsResponse(kwargs) {
2348
- if (!kwargs) {
2349
- return;
2350
- }
2351
- Object.assign(this, kwargs);
2352
- }
2353
- /**
2354
- * @param {?} proto
2355
- * @return {?}
2356
- */
2357
- PartnerListScheduledPostsResponse.fromProto = /**
2358
- * @param {?} proto
2359
- * @return {?}
2360
- */
2361
- function (proto) {
2362
- /** @type {?} */
2363
- var m = new PartnerListScheduledPostsResponse();
2364
- m = Object.assign(m, proto);
2365
- if (proto.socialPosts) {
2366
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2367
- }
2368
- return m;
2369
- };
2370
- /**
2371
- * @return {?}
2372
- */
2373
- PartnerListScheduledPostsResponse.prototype.toApiJson = /**
2374
- * @return {?}
2375
- */
2376
- function () {
2377
- /** @type {?} */
2378
- var toReturn = {};
2379
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2380
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
2381
- }
2382
- if (typeof this.nextCursor !== 'undefined') {
2383
- toReturn['nextCursor'] = this.nextCursor;
2384
- }
2385
- if (typeof this.hasMore !== 'undefined') {
2386
- toReturn['hasMore'] = this.hasMore;
2387
- }
2388
- return toReturn;
2389
- };
2390
- return PartnerListScheduledPostsResponse;
2391
- }());
2392
- var PartnerListScheduledSocialPostsRequest = /** @class */ (function () {
2393
- function PartnerListScheduledSocialPostsRequest(kwargs) {
2394
- if (!kwargs) {
2395
- return;
2396
- }
2397
- Object.assign(this, kwargs);
2398
- }
2399
- /**
2400
- * @param {?} proto
2401
- * @return {?}
2402
- */
2403
- PartnerListScheduledSocialPostsRequest.fromProto = /**
2404
- * @param {?} proto
2405
- * @return {?}
2406
- */
2407
- function (proto) {
2408
- /** @type {?} */
2409
- var m = new PartnerListScheduledSocialPostsRequest();
2410
- m = Object.assign(m, proto);
2411
- if (proto.filters) {
2412
- m.filters = PartnerListScheduledSocialPostsRequestFilters.fromProto(proto.filters);
2413
- }
2414
- if (proto.pageSize) {
2415
- m.pageSize = parseInt(proto.pageSize, 10);
2416
- }
2417
- return m;
2418
- };
2419
- /**
2420
- * @return {?}
2421
- */
2422
- PartnerListScheduledSocialPostsRequest.prototype.toApiJson = /**
2423
- * @return {?}
2424
- */
2425
- function () {
2426
- /** @type {?} */
2427
- var toReturn = {};
2428
- if (typeof this.cursor !== 'undefined') {
2429
- toReturn['cursor'] = this.cursor;
2430
- }
2431
- if (typeof this.filters !== 'undefined' && this.filters !== null) {
2432
- toReturn['filters'] = 'toApiJson' in this.filters ? (( /** @type {?} */(this.filters))).toApiJson() : this.filters;
2433
- }
2434
- if (typeof this.pageSize !== 'undefined') {
2435
- toReturn['pageSize'] = this.pageSize;
2436
- }
2437
- return toReturn;
2438
- };
2439
- return PartnerListScheduledSocialPostsRequest;
2440
- }());
2441
- var RemoveFromMultilocationPostRequest = /** @class */ (function () {
2442
- function RemoveFromMultilocationPostRequest(kwargs) {
2443
- if (!kwargs) {
2444
- return;
2445
- }
2446
- Object.assign(this, kwargs);
2447
- }
2448
- /**
2449
- * @param {?} proto
2450
- * @return {?}
2451
- */
2452
- RemoveFromMultilocationPostRequest.fromProto = /**
2453
- * @param {?} proto
2454
- * @return {?}
2455
- */
2456
- function (proto) {
2457
- /** @type {?} */
2458
- var m = new RemoveFromMultilocationPostRequest();
2459
- m = Object.assign(m, proto);
2460
- if (proto.reason) {
2461
- m.reason = enumStringToValue$5(RemoveReason, proto.reason);
2462
- }
2463
- if (proto.locations) {
2464
- m.locations = proto.locations.map(Location.fromProto);
2465
- }
2466
- return m;
2467
- };
2468
- /**
2469
- * @return {?}
2470
- */
2471
- RemoveFromMultilocationPostRequest.prototype.toApiJson = /**
2472
- * @return {?}
2473
- */
2474
- function () {
2475
- /** @type {?} */
2476
- var toReturn = {};
2477
- if (typeof this.reason !== 'undefined') {
2478
- toReturn['reason'] = this.reason;
2479
- }
2480
- if (typeof this.brandId !== 'undefined') {
2481
- toReturn['brandId'] = this.brandId;
2482
- }
2483
- if (typeof this.multilocationId !== 'undefined') {
2484
- toReturn['multilocationId'] = this.multilocationId;
2485
- }
2486
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
2487
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
2488
- }
2489
- return toReturn;
2490
- };
2491
- return RemoveFromMultilocationPostRequest;
2492
- }());
2493
- var SchedulePostRequest = /** @class */ (function () {
2494
- function SchedulePostRequest(kwargs) {
2495
- if (!kwargs) {
2496
- return;
2497
- }
2498
- Object.assign(this, kwargs);
2499
- }
2500
- /**
2501
- * @param {?} proto
2502
- * @return {?}
2503
- */
2504
- SchedulePostRequest.fromProto = /**
2505
- * @param {?} proto
2506
- * @return {?}
2507
- */
2508
- function (proto) {
2509
- /** @type {?} */
2510
- var m = new SchedulePostRequest();
2511
- m = Object.assign(m, proto);
2512
- if (proto.socialPost) {
2513
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2514
- }
2515
- return m;
2516
- };
2517
- /**
2518
- * @return {?}
2519
- */
2520
- SchedulePostRequest.prototype.toApiJson = /**
2521
- * @return {?}
2522
- */
2523
- function () {
2524
- /** @type {?} */
2525
- var toReturn = {};
2526
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2527
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? (( /** @type {?} */(this.socialPost))).toApiJson() : this.socialPost;
2528
- }
2529
- if (typeof this.socialServiceIds !== 'undefined') {
2530
- toReturn['socialServiceIds'] = this.socialServiceIds;
2531
- }
2532
- if (typeof this.partnerId !== 'undefined') {
2533
- toReturn['partnerId'] = this.partnerId;
2534
- }
2535
- if (typeof this.businessId !== 'undefined') {
2536
- toReturn['businessId'] = this.businessId;
2537
- }
2538
- return toReturn;
2539
- };
2540
- return SchedulePostRequest;
2541
- }());
2542
- var SchedulePostResponse = /** @class */ (function () {
2543
- function SchedulePostResponse(kwargs) {
2544
- if (!kwargs) {
2545
- return;
2546
- }
2547
- Object.assign(this, kwargs);
2548
- }
2549
- /**
2550
- * @param {?} proto
2551
- * @return {?}
2552
- */
2553
- SchedulePostResponse.fromProto = /**
2554
- * @param {?} proto
2555
- * @return {?}
2556
- */
2557
- function (proto) {
2558
- /** @type {?} */
2559
- var m = new SchedulePostResponse();
2560
- m = Object.assign(m, proto);
2561
- if (proto.statuses) {
2562
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2563
- }
2564
- return m;
2565
- };
2566
- /**
2567
- * @return {?}
2568
- */
2569
- SchedulePostResponse.prototype.toApiJson = /**
2570
- * @return {?}
2571
- */
2572
- function () {
2573
- /** @type {?} */
2574
- var toReturn = {};
2575
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2576
- toReturn['statuses'] = 'toApiJson' in this.statuses ? (( /** @type {?} */(this.statuses))).toApiJson() : this.statuses;
2577
- }
2578
- return toReturn;
2579
- };
2580
- return SchedulePostResponse;
2581
- }());
2582
- var ScheduleToAllPagesRequest = /** @class */ (function () {
2583
- function ScheduleToAllPagesRequest(kwargs) {
2584
- if (!kwargs) {
2585
- return;
2586
- }
2587
- Object.assign(this, kwargs);
2588
- }
2589
- /**
2590
- * @param {?} proto
2591
- * @return {?}
2592
- */
2593
- ScheduleToAllPagesRequest.fromProto = /**
2594
- * @param {?} proto
2595
- * @return {?}
2596
- */
2597
- function (proto) {
2598
- /** @type {?} */
2599
- var m = new ScheduleToAllPagesRequest();
2600
- m = Object.assign(m, proto);
2601
- if (proto.socialPost) {
2602
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2603
- }
2604
- return m;
2605
- };
2606
- /**
2607
- * @return {?}
2608
- */
2609
- ScheduleToAllPagesRequest.prototype.toApiJson = /**
2610
- * @return {?}
2611
- */
2612
- function () {
2613
- /** @type {?} */
2614
- var toReturn = {};
2615
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2616
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? (( /** @type {?} */(this.socialPost))).toApiJson() : this.socialPost;
2617
- }
2618
- if (typeof this.partnerId !== 'undefined') {
2619
- toReturn['partnerId'] = this.partnerId;
2620
- }
2621
- if (typeof this.businessId !== 'undefined') {
2622
- toReturn['businessId'] = this.businessId;
2623
- }
2624
- return toReturn;
2625
- };
2626
- return ScheduleToAllPagesRequest;
2627
- }());
2628
- var ScheduleToAllPagesResponse = /** @class */ (function () {
2629
- function ScheduleToAllPagesResponse(kwargs) {
2630
- if (!kwargs) {
2631
- return;
2632
- }
2633
- Object.assign(this, kwargs);
2634
- }
2635
- /**
2636
- * @param {?} proto
2637
- * @return {?}
2638
- */
2639
- ScheduleToAllPagesResponse.fromProto = /**
2640
- * @param {?} proto
2641
- * @return {?}
2642
- */
2643
- function (proto) {
2644
- /** @type {?} */
2645
- var m = new ScheduleToAllPagesResponse();
2646
- m = Object.assign(m, proto);
2647
- if (proto.statuses) {
2648
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2649
- }
2650
- return m;
2651
- };
2652
- /**
2653
- * @return {?}
2654
- */
2655
- ScheduleToAllPagesResponse.prototype.toApiJson = /**
2656
- * @return {?}
2657
- */
2658
- function () {
2659
- /** @type {?} */
2660
- var toReturn = {};
2661
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2662
- toReturn['statuses'] = 'toApiJson' in this.statuses ? (( /** @type {?} */(this.statuses))).toApiJson() : this.statuses;
2663
- }
2664
- return toReturn;
2665
- };
2666
- return ScheduleToAllPagesResponse;
2667
- }());
2668
- var UpdatePostTemplateRequest = /** @class */ (function () {
2669
- function UpdatePostTemplateRequest(kwargs) {
2670
- if (!kwargs) {
2671
- return;
2672
- }
2673
- Object.assign(this, kwargs);
2674
- }
2675
- /**
2676
- * @param {?} proto
2677
- * @return {?}
2678
- */
2679
- UpdatePostTemplateRequest.fromProto = /**
2680
- * @param {?} proto
2681
- * @return {?}
2682
- */
2683
- function (proto) {
2684
- /** @type {?} */
2685
- var m = new UpdatePostTemplateRequest();
2686
- m = Object.assign(m, proto);
2687
- if (proto.postDateTime) {
2688
- m.postDateTime = new Date(proto.postDateTime);
2689
- }
2690
- return m;
2691
- };
2692
- /**
2693
- * @return {?}
2694
- */
2695
- UpdatePostTemplateRequest.prototype.toApiJson = /**
2696
- * @return {?}
2697
- */
2698
- function () {
2699
- /** @type {?} */
2700
- var toReturn = {};
2701
- if (typeof this.accountGroupId !== 'undefined') {
2702
- toReturn['accountGroupId'] = this.accountGroupId;
2703
- }
2704
- if (typeof this.templateId !== 'undefined') {
2705
- toReturn['templateId'] = this.templateId;
2706
- }
2707
- if (typeof this.title !== 'undefined') {
2708
- toReturn['title'] = this.title;
2709
- }
2710
- if (typeof this.postText !== 'undefined') {
2711
- toReturn['postText'] = this.postText;
2712
- }
2713
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
2714
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
2715
- }
2716
- if (typeof this.gmbPostCustomization !== 'undefined') {
2717
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
2718
- }
2719
- if (typeof this.imageUrl !== 'undefined') {
2720
- toReturn['imageUrl'] = this.imageUrl;
2721
- }
2722
- if (typeof this.imagePath !== 'undefined') {
2723
- toReturn['imagePath'] = this.imagePath;
2724
- }
2725
- if (typeof this.imageSize !== 'undefined') {
2726
- toReturn['imageSize'] = this.imageSize;
2727
- }
2728
- if (typeof this.previews !== 'undefined') {
2729
- toReturn['previews'] = this.previews;
2730
- }
2731
- if (typeof this.options !== 'undefined') {
2732
- toReturn['options'] = this.options;
2733
- }
2734
- if (typeof this.videoUrl !== 'undefined') {
2735
- toReturn['videoUrl'] = this.videoUrl;
2736
- }
2737
- return toReturn;
2738
- };
2739
- return UpdatePostTemplateRequest;
2740
- }());
2741
-
2742
- /**
2743
- * @fileoverview added by tsickle
2744
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2745
- */
2746
-
2747
- /**
2748
- * @fileoverview added by tsickle
2749
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2750
- */
2751
- var PostTemplatesApiService = /** @class */ (function () {
2752
- function PostTemplatesApiService(http, hostService) {
2753
- this.http = http;
2754
- this.hostService = hostService;
2755
- }
2756
- /**
2757
- * @private
2758
- * @return {?}
2759
- */
2760
- PostTemplatesApiService.prototype.apiOptions = /**
2761
- * @private
2762
- * @return {?}
2763
- */
2764
- function () {
2765
- return {
2766
- headers: new i1$1.HttpHeaders({
2767
- 'Content-Type': 'application/json'
2768
- }),
2769
- withCredentials: true
2770
- };
2771
- };
2772
- /**
2773
- * @param {?} r
2774
- * @return {?}
2775
- */
2776
- PostTemplatesApiService.prototype.updatePostTemplate = /**
2777
- * @param {?} r
2778
- * @return {?}
2779
- */
2780
- function (r) {
2781
- /** @type {?} */
2782
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new UpdatePostTemplateRequest(r);
2783
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/UpdatePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
2784
- };
2785
- /**
2786
- * @param {?} r
2787
- * @return {?}
2788
- */
2789
- PostTemplatesApiService.prototype.createPostTemplate = /**
2790
- * @param {?} r
2791
- * @return {?}
2792
- */
2793
- function (r) {
2794
- /** @type {?} */
2795
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new CreatePostTemplateRequest(r);
2796
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/CreatePostTemplate", request.toApiJson(), this.apiOptions())
2797
- .pipe(operators.map(( /**
2798
- * @param {?} resp
2799
- * @return {?}
2800
- */function (resp) { return CreatePostTemplateResponse.fromProto(resp); })), operators.share());
2801
- };
2802
- /**
2803
- * @param {?} r
2804
- * @return {?}
2805
- */
2806
- PostTemplatesApiService.prototype.getPostTemplate = /**
2807
- * @param {?} r
2808
- * @return {?}
2809
- */
2810
- function (r) {
2811
- /** @type {?} */
2812
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetPostTemplateRequest(r);
2813
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/GetPostTemplate", request.toApiJson(), this.apiOptions())
2814
- .pipe(operators.map(( /**
2815
- * @param {?} resp
2816
- * @return {?}
2817
- */function (resp) { return GetPostTemplateResponse.fromProto(resp); })), operators.share());
2818
- };
2819
- /**
2820
- * @param {?} r
2821
- * @return {?}
2822
- */
2823
- PostTemplatesApiService.prototype.listPostTemplates = /**
2824
- * @param {?} r
2825
- * @return {?}
2826
- */
2827
- function (r) {
2828
- /** @type {?} */
2829
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListPostTemplatesRequest(r);
2830
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/ListPostTemplates", request.toApiJson(), this.apiOptions())
2831
- .pipe(operators.map(( /**
2832
- * @param {?} resp
2833
- * @return {?}
2834
- */function (resp) { return ListPostTemplatesResponse.fromProto(resp); })), operators.share());
2835
- };
2836
- /**
2837
- * @param {?} r
2838
- * @return {?}
2839
- */
2840
- PostTemplatesApiService.prototype.deletePostTemplate = /**
2841
- * @param {?} r
2842
- * @return {?}
2843
- */
2844
- function (r) {
2845
- /** @type {?} */
2846
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeletePostTemplateRequest(r);
2847
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/DeletePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
2848
- };
2849
- PostTemplatesApiService.decorators = [
2850
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
2851
- ];
2852
- /** @nocollapse */
2853
- PostTemplatesApiService.ctorParameters = function () {
2854
- return [
2855
- { type: i1$1.HttpClient },
2856
- { type: HostService }
2857
- ];
2858
- };
2859
- /** @nocollapse */ PostTemplatesApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PostTemplatesApiService_Factory() { return new PostTemplatesApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: PostTemplatesApiService, providedIn: "root" });
2860
- return PostTemplatesApiService;
2861
- }());
2862
-
2863
- /**
2864
- * @fileoverview added by tsickle
2865
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2866
- */
2867
- var SocialPostsApiService = /** @class */ (function () {
2868
- function SocialPostsApiService(http, hostService) {
2869
- this.http = http;
2870
- this.hostService = hostService;
2871
- }
2872
- /**
2873
- * @private
2874
- * @return {?}
2875
- */
2876
- SocialPostsApiService.prototype.apiOptions = /**
2877
- * @private
2878
- * @return {?}
2879
- */
2880
- function () {
2881
- return {
2882
- headers: new i1$1.HttpHeaders({
2883
- 'Content-Type': 'application/json'
2884
- }),
2885
- withCredentials: true
2886
- };
2887
- };
2888
- /**
2889
- * @param {?} r
2890
- * @return {?}
2891
- */
2892
- SocialPostsApiService.prototype.list = /**
2893
- * @param {?} r
2894
- * @return {?}
2895
- */
2896
- function (r) {
2897
- /** @type {?} */
2898
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListSocialPostsRequest(r);
2899
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/List", request.toApiJson(), this.apiOptions())
2900
- .pipe(operators.map(( /**
2901
- * @param {?} resp
2902
- * @return {?}
2903
- */function (resp) { return ListSocialPostsResponse.fromProto(resp); })), operators.share());
2904
- };
2905
- /**
2906
- * @param {?} r
2907
- * @return {?}
2908
- */
2909
- SocialPostsApiService.prototype.deleteSocialPost = /**
2910
- * @param {?} r
2911
- * @return {?}
2912
- */
2913
- function (r) {
2914
- /** @type {?} */
2915
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeleteSocialPostRequest(r);
2916
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/DeleteSocialPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
2917
- };
2918
- /**
2919
- * @param {?} r
2920
- * @return {?}
2921
- */
2922
- SocialPostsApiService.prototype.scheduleToAllPages = /**
2923
- * @param {?} r
2924
- * @return {?}
2925
- */
2926
- function (r) {
2927
- /** @type {?} */
2928
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ScheduleToAllPagesRequest(r);
2929
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/ScheduleToAllPages", request.toApiJson(), this.apiOptions())
2930
- .pipe(operators.map(( /**
2931
- * @param {?} resp
2932
- * @return {?}
2933
- */function (resp) { return ScheduleToAllPagesResponse.fromProto(resp); })), operators.share());
2934
- };
2935
- /**
2936
- * @param {?} r
2937
- * @return {?}
2938
- */
2939
- SocialPostsApiService.prototype.schedule = /**
2940
- * @param {?} r
2941
- * @return {?}
2942
- */
2943
- function (r) {
2944
- /** @type {?} */
2945
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new SchedulePostRequest(r);
2946
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/Schedule", request.toApiJson(), this.apiOptions())
2947
- .pipe(operators.map(( /**
2948
- * @param {?} resp
2949
- * @return {?}
2950
- */function (resp) { return SchedulePostResponse.fromProto(resp); })), operators.share());
2951
- };
2952
- /**
2953
- * @param {?} r
2954
- * @return {?}
2955
- */
2956
- SocialPostsApiService.prototype.getMultiSocialPosts = /**
2957
- * @param {?} r
2958
- * @return {?}
2959
- */
2960
- function (r) {
2961
- /** @type {?} */
2962
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultiSocialPostsRequest(r);
2963
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPosts", request.toApiJson(), this.apiOptions())
2964
- .pipe(operators.map(( /**
2965
- * @param {?} resp
2966
- * @return {?}
2967
- */function (resp) { return GetMultiSocialPostsResponse.fromProto(resp); })), operators.share());
2968
- };
2969
- /**
2970
- * @param {?} r
2971
- * @return {?}
2972
- */
2973
- SocialPostsApiService.prototype.getMultiSocialPostStats = /**
2974
- * @param {?} r
2975
- * @return {?}
2976
- */
2977
- function (r) {
2978
- /** @type {?} */
2979
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultiSocialPostStatsRequest(r);
2980
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPostStats", request.toApiJson(), this.apiOptions())
2981
- .pipe(operators.map(( /**
2982
- * @param {?} resp
2983
- * @return {?}
2984
- */function (resp) { return GetMultiSocialPostStatsResponse.fromProto(resp); })), operators.share());
2985
- };
2986
- /**
2987
- * @param {?} r
2988
- * @return {?}
2989
- */
2990
- SocialPostsApiService.prototype.getScheduledPostCount = /**
2991
- * @param {?} r
2992
- * @return {?}
2993
- */
2994
- function (r) {
2995
- /** @type {?} */
2996
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetScheduledPostCountRequest(r);
2997
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetScheduledPostCount", request.toApiJson(), this.apiOptions())
2998
- .pipe(operators.map(( /**
2999
- * @param {?} resp
3000
- * @return {?}
3001
- */function (resp) { return GetScheduledPostCountResponse.fromProto(resp); })), operators.share());
3002
- };
3003
- SocialPostsApiService.decorators = [
3004
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3005
- ];
3006
- /** @nocollapse */
3007
- SocialPostsApiService.ctorParameters = function () {
3008
- return [
3009
- { type: i1$1.HttpClient },
3010
- { type: HostService }
3011
- ];
3012
- };
3013
- /** @nocollapse */ SocialPostsApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SocialPostsApiService_Factory() { return new SocialPostsApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: SocialPostsApiService, providedIn: "root" });
3014
- return SocialPostsApiService;
3015
- }());
3016
-
3017
- /**
3018
- * @fileoverview added by tsickle
3019
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3020
- */
3021
- var MultilocationPostApiService = /** @class */ (function () {
3022
- function MultilocationPostApiService(http, hostService) {
3023
- this.http = http;
3024
- this.hostService = hostService;
3025
- }
3026
- /**
3027
- * @private
3028
- * @return {?}
3029
- */
3030
- MultilocationPostApiService.prototype.apiOptions = /**
3031
- * @private
3032
- * @return {?}
3033
- */
3034
- function () {
3035
- return {
3036
- headers: new i1$1.HttpHeaders({
3037
- 'Content-Type': 'application/json'
3038
- }),
3039
- withCredentials: true
3040
- };
3041
- };
3042
- /**
3043
- * @param {?} r
3044
- * @return {?}
3045
- */
3046
- MultilocationPostApiService.prototype.createMultilocationPost = /**
3047
- * @param {?} r
3048
- * @return {?}
3049
- */
3050
- function (r) {
3051
- /** @type {?} */
3052
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new CreateMultilocationPostRequest(r);
3053
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/CreateMultilocationPost", request.toApiJson(), this.apiOptions())
3054
- .pipe(operators.map(( /**
3055
- * @param {?} resp
3056
- * @return {?}
3057
- */function (resp) { return CreateMultilocationPostResponse.fromProto(resp); })), operators.share());
3058
- };
3059
- /**
3060
- * @param {?} r
3061
- * @return {?}
3062
- */
3063
- MultilocationPostApiService.prototype.editMultilocationPost = /**
3064
- * @param {?} r
3065
- * @return {?}
3066
- */
3067
- function (r) {
3068
- /** @type {?} */
3069
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new EditMultilocationPostRequest(r);
3070
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/EditMultilocationPost", request.toApiJson(), this.apiOptions())
3071
- .pipe(operators.map(( /**
3072
- * @param {?} resp
3073
- * @return {?}
3074
- */function (resp) { return EditMultilocationPostResponse.fromProto(resp); })), operators.share());
3075
- };
3076
- /**
3077
- * @param {?} r
3078
- * @return {?}
3079
- */
3080
- MultilocationPostApiService.prototype.removeFromMultilocationPost = /**
3081
- * @param {?} r
3082
- * @return {?}
3083
- */
3084
- function (r) {
3085
- /** @type {?} */
3086
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new RemoveFromMultilocationPostRequest(r);
3087
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/RemoveFromMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3088
- };
3089
- /**
3090
- * @param {?} r
3091
- * @return {?}
3092
- */
3093
- MultilocationPostApiService.prototype.listMultilocationPostsForBrand = /**
3094
- * @param {?} r
3095
- * @return {?}
3096
- */
3097
- function (r) {
3098
- /** @type {?} */
3099
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListMultilocationPostsForBrandRequest(r);
3100
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/ListMultilocationPostsForBrand", request.toApiJson(), this.apiOptions())
3101
- .pipe(operators.map(( /**
3102
- * @param {?} resp
3103
- * @return {?}
3104
- */function (resp) { return ListMultilocationPostsForBrandResponse.fromProto(resp); })), operators.share());
3105
- };
3106
- /**
3107
- * @param {?} r
3108
- * @return {?}
3109
- */
3110
- MultilocationPostApiService.prototype.deleteMultilocationPost = /**
3111
- * @param {?} r
3112
- * @return {?}
3113
- */
3114
- function (r) {
3115
- /** @type {?} */
3116
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeleteMultilocationPostRequest(r);
3117
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/DeleteMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3118
- };
3119
- /**
3120
- * @param {?} r
3121
- * @return {?}
3122
- */
3123
- MultilocationPostApiService.prototype.getMultilocationPost = /**
3124
- * @param {?} r
3125
- * @return {?}
3126
- */
3127
- function (r) {
3128
- /** @type {?} */
3129
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultilocationPostRequest(r);
3130
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/GetMultilocationPost", request.toApiJson(), this.apiOptions())
3131
- .pipe(operators.map(( /**
3132
- * @param {?} resp
3133
- * @return {?}
3134
- */function (resp) { return GetMultilocationPostResponse.fromProto(resp); })), operators.share());
3135
- };
3136
- MultilocationPostApiService.decorators = [
3137
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3138
- ];
3139
- /** @nocollapse */
3140
- MultilocationPostApiService.ctorParameters = function () {
3141
- return [
3142
- { type: i1$1.HttpClient },
3143
- { type: HostService }
3144
- ];
3145
- };
3146
- /** @nocollapse */ MultilocationPostApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function MultilocationPostApiService_Factory() { return new MultilocationPostApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: MultilocationPostApiService, providedIn: "root" });
3147
- return MultilocationPostApiService;
3148
- }());
3149
-
3150
- /**
3151
- * @fileoverview added by tsickle
3152
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3153
- */
3154
- var PartnerSocialPostsApiService = /** @class */ (function () {
3155
- function PartnerSocialPostsApiService(http, hostService) {
3156
- this.http = http;
3157
- this.hostService = hostService;
3158
- }
3159
- /**
3160
- * @private
3161
- * @return {?}
3162
- */
3163
- PartnerSocialPostsApiService.prototype.apiOptions = /**
3164
- * @private
3165
- * @return {?}
3166
- */
3167
- function () {
3168
- return {
3169
- headers: new i1$1.HttpHeaders({
3170
- 'Content-Type': 'application/json'
3171
- }),
3172
- withCredentials: true
3173
- };
3174
- };
3175
- /**
3176
- * @param {?} r
3177
- * @return {?}
3178
- */
3179
- PartnerSocialPostsApiService.prototype.listScheduled = /**
3180
- * @param {?} r
3181
- * @return {?}
3182
- */
3183
- function (r) {
3184
- /** @type {?} */
3185
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new PartnerListScheduledSocialPostsRequest(r);
3186
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduled", request.toApiJson(), this.apiOptions())
3187
- .pipe(operators.map(( /**
3188
- * @param {?} resp
3189
- * @return {?}
3190
- */function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), operators.share());
3191
- };
3192
- /**
3193
- * @param {?} r
3194
- * @return {?}
3195
- */
3196
- PartnerSocialPostsApiService.prototype.listScheduledByCreated = /**
3197
- * @param {?} r
3198
- * @return {?}
3199
- */
3200
- function (r) {
3201
- /** @type {?} */
3202
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new PartnerListScheduledSocialPostsRequest(r);
3203
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduledByCreated", request.toApiJson(), this.apiOptions())
3204
- .pipe(operators.map(( /**
3205
- * @param {?} resp
3206
- * @return {?}
3207
- */function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), operators.share());
3208
- };
3209
- PartnerSocialPostsApiService.decorators = [
3210
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3211
- ];
3212
- /** @nocollapse */
3213
- PartnerSocialPostsApiService.ctorParameters = function () {
3214
- return [
3215
- { type: i1$1.HttpClient },
3216
- { type: HostService }
3217
- ];
3218
- };
3219
- /** @nocollapse */ PartnerSocialPostsApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PartnerSocialPostsApiService_Factory() { return new PartnerSocialPostsApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: PartnerSocialPostsApiService, providedIn: "root" });
3220
- return PartnerSocialPostsApiService;
3221
- }());
3222
-
3223
- /**
3224
- * @fileoverview added by tsickle
3225
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3226
- */
3227
- var PostTemplatesService = /** @class */ (function () {
3228
- function PostTemplatesService(socialPostsApiService) {
3229
- this.socialPostsApiService = socialPostsApiService;
3230
- }
3231
- /**
3232
- * @param {?} accountGroupId
3233
- * @param {?} templateId
3234
- * @param {?} title
3235
- * @param {?} postText
3236
- * @param {?} postDateTime
3237
- * @param {?} gmbPostCustomization
3238
- * @param {?} imageUrl
3239
- * @param {?} imagePath
3240
- * @param {?} imageSize
3241
- * @param {?} previews
3242
- * @param {?} options
3243
- * @param {?} videoUrl
3244
- * @return {?}
3245
- */
3246
- PostTemplatesService.prototype.updatePostTemplate = /**
3247
- * @param {?} accountGroupId
3248
- * @param {?} templateId
3249
- * @param {?} title
3250
- * @param {?} postText
3251
- * @param {?} postDateTime
3252
- * @param {?} gmbPostCustomization
3253
- * @param {?} imageUrl
3254
- * @param {?} imagePath
3255
- * @param {?} imageSize
3256
- * @param {?} previews
3257
- * @param {?} options
3258
- * @param {?} videoUrl
3259
- * @return {?}
3260
- */
3261
- function (accountGroupId, templateId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3262
- /** @type {?} */
3263
- var req = new UpdatePostTemplateRequest({
3264
- accountGroupId: accountGroupId,
3265
- templateId: templateId,
3266
- title: title,
3267
- postText: postText,
3268
- postDateTime: postDateTime,
3269
- gmbPostCustomization: gmbPostCustomization,
3270
- imageUrl: imageUrl,
3271
- imagePath: imagePath,
3272
- imageSize: imageSize,
3273
- previews: previews,
3274
- options: options,
3275
- videoUrl: videoUrl
3276
- });
3277
- return this.socialPostsApiService.updatePostTemplate(req);
3278
- };
3279
- /**
3280
- * @param {?} accountGroupId
3281
- * @param {?} title
3282
- * @param {?} postText
3283
- * @param {?} postDateTime
3284
- * @param {?} gmbPostCustomization
3285
- * @param {?} imageUrl
3286
- * @param {?} imagePath
3287
- * @param {?} imageSize
3288
- * @param {?} previews
3289
- * @param {?} options
3290
- * @param {?} videoUrl
3291
- * @return {?}
3292
- */
3293
- PostTemplatesService.prototype.createPostTemplate = /**
3294
- * @param {?} accountGroupId
3295
- * @param {?} title
3296
- * @param {?} postText
3297
- * @param {?} postDateTime
3298
- * @param {?} gmbPostCustomization
3299
- * @param {?} imageUrl
3300
- * @param {?} imagePath
3301
- * @param {?} imageSize
3302
- * @param {?} previews
3303
- * @param {?} options
3304
- * @param {?} videoUrl
3305
- * @return {?}
3306
- */
3307
- function (accountGroupId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3308
- /** @type {?} */
3309
- var req = new CreatePostTemplateRequest({
3310
- accountGroupId: accountGroupId,
3311
- title: title,
3312
- postText: postText,
3313
- postDateTime: postDateTime,
3314
- gmbPostCustomization: gmbPostCustomization,
3315
- imageUrl: imageUrl,
3316
- imagePath: imagePath,
3317
- imageSize: imageSize,
3318
- previews: previews,
3319
- options: options,
3320
- videoUrl: videoUrl
3321
- });
3322
- return this.socialPostsApiService.createPostTemplate(req);
3323
- };
3324
- /**
3325
- * @param {?} accountGroupId
3326
- * @param {?} templateId
3327
- * @return {?}
3328
- */
3329
- PostTemplatesService.prototype.getPostTemplate = /**
3330
- * @param {?} accountGroupId
3331
- * @param {?} templateId
3332
- * @return {?}
3333
- */
3334
- function (accountGroupId, templateId) {
3335
- /** @type {?} */
3336
- var req = new GetPostTemplateRequest({
3337
- accountGroupId: accountGroupId,
3338
- templateId: templateId
3339
- });
3340
- return this.socialPostsApiService.getPostTemplate(req);
3341
- };
3342
- /**
3343
- * @param {?} accountGroupId
3344
- * @param {?} cursor
3345
- * @param {?} pageSize
3346
- * @return {?}
3347
- */
3348
- PostTemplatesService.prototype.listPostTemplates = /**
3349
- * @param {?} accountGroupId
3350
- * @param {?} cursor
3351
- * @param {?} pageSize
3352
- * @return {?}
3353
- */
3354
- function (accountGroupId, cursor, pageSize) {
3355
- /** @type {?} */
3356
- var req = new ListPostTemplatesRequest({
3357
- accountGroupId: accountGroupId,
3358
- cursor: cursor,
3359
- pageSize: pageSize
3360
- });
3361
- return this.socialPostsApiService.listPostTemplates(req);
3362
- };
3363
- /**
3364
- * @param {?} accountGroupId
3365
- * @param {?} templateId
3366
- * @return {?}
3367
- */
3368
- PostTemplatesService.prototype.deletePostTemplate = /**
3369
- * @param {?} accountGroupId
3370
- * @param {?} templateId
3371
- * @return {?}
3372
- */
3373
- function (accountGroupId, templateId) {
3374
- /** @type {?} */
3375
- var req = new DeletePostTemplateRequest({
3376
- accountGroupId: accountGroupId,
3377
- templateId: templateId
3378
- });
3379
- return this.socialPostsApiService.deletePostTemplate(req);
3380
- };
3381
- PostTemplatesService.decorators = [
3382
- { type: i0.Injectable }
3383
- ];
3384
- /** @nocollapse */
3385
- PostTemplatesService.ctorParameters = function () {
3386
- return [
3387
- { type: PostTemplatesApiService }
3388
- ];
3389
- };
3390
- return PostTemplatesService;
3391
- }());
3392
-
3393
- /**
3394
- * @fileoverview added by tsickle
3395
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3396
- */
3397
- var SocialPostsService = /** @class */ (function () {
3398
- function SocialPostsService(socialPostsApiService) {
3399
- this.socialPostsApiService = socialPostsApiService;
3400
- }
3401
- /**
3402
- * @param {?} start
3403
- * @param {?} end
3404
- * @param {?} socialServiceIds
3405
- * @param {?} businessId
3406
- * @param {?} partnerId
3407
- * @param {?} cursor
3408
- * @param {?} tags
3409
- * @param {?} pageSize
3410
- * @return {?}
3411
- */
3412
- SocialPostsService.prototype.list = /**
3413
- * @param {?} start
3414
- * @param {?} end
3415
- * @param {?} socialServiceIds
3416
- * @param {?} businessId
3417
- * @param {?} partnerId
3418
- * @param {?} cursor
3419
- * @param {?} tags
3420
- * @param {?} pageSize
3421
- * @return {?}
3422
- */
3423
- function (start, end, socialServiceIds, businessId, partnerId, cursor, tags, pageSize) {
3424
- /** @type {?} */
3425
- var req = new ListSocialPostsRequest({
3426
- start: start,
3427
- end: end,
3428
- businessId: businessId,
3429
- partnerId: partnerId,
3430
- cursor: cursor,
3431
- socialServiceIds: socialServiceIds,
3432
- tags: tags,
3433
- pageSize: pageSize,
3434
- });
3435
- return this.socialPostsApiService.list(req);
3436
- };
3437
- /**
3438
- * @param {?} businessId
3439
- * @param {?} internalPostIds
3440
- * @return {?}
3441
- */
3442
- SocialPostsService.prototype.getMultiSocialPosts = /**
3443
- * @param {?} businessId
3444
- * @param {?} internalPostIds
3445
- * @return {?}
3446
- */
3447
- function (businessId, internalPostIds) {
3448
- if (!internalPostIds || internalPostIds.length === 0) {
3449
- /** @type {?} */
3450
- var res = new GetMultiSocialPostsResponse();
3451
- return rxjs.of(res);
3452
- }
3453
- /** @type {?} */
3454
- var req = new GetMultiSocialPostsRequest({ businessId: businessId, internalPostIds: internalPostIds });
3455
- return this.socialPostsApiService.getMultiSocialPosts(req);
3456
- };
3457
- /**
3458
- * @param {?} partnerId
3459
- * @param {?} businessId
3460
- * @param {?} socialServiceIds
3461
- * @return {?}
3462
- */
3463
- SocialPostsService.prototype.getScheduledPostCount = /**
3464
- * @param {?} partnerId
3465
- * @param {?} businessId
3466
- * @param {?} socialServiceIds
3467
- * @return {?}
3468
- */
3469
- function (partnerId, businessId, socialServiceIds) {
3470
- /** @type {?} */
3471
- var req = new GetScheduledPostCountRequest({ partnerId: partnerId, businessId: businessId, socialServiceIds: socialServiceIds });
3472
- return this.socialPostsApiService.getScheduledPostCount(req);
3473
- };
3474
- SocialPostsService.decorators = [
3475
- { type: i0.Injectable }
3476
- ];
3477
- /** @nocollapse */
3478
- SocialPostsService.ctorParameters = function () {
3479
- return [
3480
- { type: SocialPostsApiService }
3481
- ];
3482
- };
3483
- return SocialPostsService;
3484
- }());
3485
-
3486
- /**
3487
- * @fileoverview added by tsickle
3488
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3489
- */
3490
- var MultilocationPostsService = /** @class */ (function () {
3491
- function MultilocationPostsService(multilocationApiService) {
3492
- this.multilocationApiService = multilocationApiService;
3493
- }
3494
- /**
3495
- * @param {?} brandId
3496
- * @param {?} text
3497
- * @param {?} media
3498
- * @param {?} gifs
3499
- * @param {?} videos
3500
- * @param {?} scheduledDate
3501
- * @param {?} locations
3502
- * @return {?}
3503
- */
3504
- MultilocationPostsService.prototype.createMultilocationPost = /**
3505
- * @param {?} brandId
3506
- * @param {?} text
3507
- * @param {?} media
3508
- * @param {?} gifs
3509
- * @param {?} videos
3510
- * @param {?} scheduledDate
3511
- * @param {?} locations
3512
- * @return {?}
3513
- */
3514
- function (brandId, text, media, gifs, videos, scheduledDate, locations) {
3515
- /** @type {?} */
3516
- var req = new CreateMultilocationPostRequest({
3517
- brandId: brandId,
3518
- text: text,
3519
- media: media,
3520
- gifs: gifs,
3521
- videos: videos,
3522
- scheduledDate: scheduledDate,
3523
- locations: locations
3524
- });
3525
- return this.multilocationApiService.createMultilocationPost(req);
3526
- };
3527
- /**
3528
- * @param {?} brandId
3529
- * @param {?} multilocationId
3530
- * @param {?} text
3531
- * @param {?} media
3532
- * @param {?} gifs
3533
- * @param {?} videos
3534
- * @param {?} scheduledDate
3535
- * @param {?} locations
3536
- * @param {?} fieldMask
3537
- * @return {?}
3538
- */
3539
- MultilocationPostsService.prototype.editMultilocationPost = /**
3540
- * @param {?} brandId
3541
- * @param {?} multilocationId
3542
- * @param {?} text
3543
- * @param {?} media
3544
- * @param {?} gifs
3545
- * @param {?} videos
3546
- * @param {?} scheduledDate
3547
- * @param {?} locations
3548
- * @param {?} fieldMask
3549
- * @return {?}
3550
- */
3551
- function (brandId, multilocationId, text, media, gifs, videos, scheduledDate, locations, fieldMask) {
3552
- /** @type {?} */
3553
- var req = new EditMultilocationPostRequest({
3554
- brandId: brandId,
3555
- multilocationId: multilocationId,
3556
- text: text,
3557
- media: media,
3558
- gifs: gifs,
3559
- videos: videos,
3560
- scheduledDate: scheduledDate,
3561
- locations: locations,
3562
- fieldMask: fieldMask
3563
- });
3564
- return this.multilocationApiService.editMultilocationPost(req);
3565
- };
3566
- /**
3567
- * @param {?} reason
3568
- * @param {?} brandId
3569
- * @param {?} multilocationId
3570
- * @param {?} locations
3571
- * @return {?}
3572
- */
3573
- MultilocationPostsService.prototype.removeFromMultilocationPost = /**
3574
- * @param {?} reason
3575
- * @param {?} brandId
3576
- * @param {?} multilocationId
3577
- * @param {?} locations
3578
- * @return {?}
3579
- */
3580
- function (reason, brandId, multilocationId, locations) {
3581
- /** @type {?} */
3582
- var req = new RemoveFromMultilocationPostRequest({
3583
- reason: reason,
3584
- brandId: brandId,
3585
- multilocationId: multilocationId,
3586
- locations: locations
3587
- });
3588
- return this.multilocationApiService.removeFromMultilocationPost(req);
3589
- };
3590
- /**
3591
- * @param {?} brandId
3592
- * @param {?} startDate
3593
- * @param {?} endDate
3594
- * @param {?} cursor
3595
- * @param {?} pageSize
3596
- * @return {?}
3597
- */
3598
- MultilocationPostsService.prototype.listMultilocationPostsForBrand = /**
3599
- * @param {?} brandId
3600
- * @param {?} startDate
3601
- * @param {?} endDate
3602
- * @param {?} cursor
3603
- * @param {?} pageSize
3604
- * @return {?}
3605
- */
3606
- function (brandId, startDate, endDate, cursor, pageSize) {
3607
- /** @type {?} */
3608
- var req = new ListMultilocationPostsForBrandRequest({
3609
- brandId: brandId,
3610
- startDate: startDate,
3611
- endDate: endDate,
3612
- cursor: cursor,
3613
- pageSize: pageSize
3614
- });
3615
- return this.multilocationApiService.listMultilocationPostsForBrand(req);
3616
- };
3617
- /**
3618
- * @param {?} brandId
3619
- * @param {?} multilocationId
3620
- * @return {?}
3621
- */
3622
- MultilocationPostsService.prototype.deleteMultilocationPost = /**
3623
- * @param {?} brandId
3624
- * @param {?} multilocationId
3625
- * @return {?}
3626
- */
3627
- function (brandId, multilocationId) {
3628
- /** @type {?} */
3629
- var req = new DeleteMultilocationPostRequest({
3630
- brandId: brandId,
3631
- multilocationId: multilocationId
3632
- });
3633
- return this.multilocationApiService.deleteMultilocationPost(req);
3634
- };
3635
- /**
3636
- * @param {?} brandId
3637
- * @param {?} multilocationId
3638
- * @return {?}
3639
- */
3640
- MultilocationPostsService.prototype.getMultilocationPost = /**
3641
- * @param {?} brandId
3642
- * @param {?} multilocationId
3643
- * @return {?}
3644
- */
3645
- function (brandId, multilocationId) {
3646
- /** @type {?} */
3647
- var req = new GetMultilocationPostRequest({
3648
- brandId: brandId,
3649
- multilocationId: multilocationId
3650
- });
3651
- return this.multilocationApiService.getMultilocationPost(req);
3652
- };
3653
- MultilocationPostsService.decorators = [
3654
- { type: i0.Injectable }
3655
- ];
3656
- /** @nocollapse */
3657
- MultilocationPostsService.ctorParameters = function () {
3658
- return [
3659
- { type: MultilocationPostApiService }
3660
- ];
3661
- };
3662
- return MultilocationPostsService;
3663
- }());
3664
-
3665
- /**
3666
- * @fileoverview added by tsickle
3667
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3668
- */
3669
- var SocialPostsModule = /** @class */ (function () {
3670
- function SocialPostsModule() {
3671
- }
3672
- SocialPostsModule.decorators = [
3673
- { type: i0.NgModule, args: [{
3674
- imports: [i1.SessionServiceModule, i1.EnvironmentServiceModule],
3675
- providers: [
3676
- MultilocationPostApiService,
3677
- PartnerSocialPostsApiService,
3678
- PostTemplatesApiService,
3679
- SocialPostsApiService,
3680
- HostService,
3681
- PostTemplatesService,
3682
- SocialPostsService,
3683
- MultilocationPostsService
3684
- ],
3685
- exports: [],
3686
- entryComponents: []
3687
- },] }
3688
- ];
3689
- return SocialPostsModule;
3690
- }());
3691
-
3692
- /**
3693
- * @fileoverview added by tsickle
3694
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3695
- */
3696
-
3697
- /**
3698
- * @fileoverview added by tsickle
3699
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3700
- */
3701
-
3702
- /**
3703
- * @fileoverview added by tsickle
3704
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3705
- */
3706
-
3707
- /**
3708
- * @fileoverview added by tsickle
3709
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3710
- */
3711
-
3712
- exports.SocialPostsModule = SocialPostsModule;
3713
- exports.SocialPostsService = SocialPostsService;
3714
- exports.PostTemplatesService = PostTemplatesService;
3715
- exports.MultilocationPostsService = MultilocationPostsService;
3716
- exports.FieldMask = FieldMask;
3717
- exports.Location = Location;
3718
- exports.PostingStatus = PostingStatus;
3719
- exports.MultilocationPostApiService = MultilocationPostApiService;
3720
- exports.GetMultilocationPostRequest = GetMultilocationPostRequest;
3721
- exports.DeleteMultilocationPostRequest = DeleteMultilocationPostRequest;
3722
- exports.ListMultilocationPostsForBrandRequest = ListMultilocationPostsForBrandRequest;
3723
- exports.ɵb = HostService;
3724
- exports.ɵa = MultilocationPostApiService;
3725
- exports.ɵc = PartnerSocialPostsApiService;
3726
- exports.ɵd = PostTemplatesApiService;
3727
- exports.ɵe = SocialPostsApiService;
3728
-
3729
- Object.defineProperty(exports, '__esModule', { value: true });
3730
-
3731
- })));
3732
-
3733
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZGFzdGEtc29jaWFsLXBvc3RzLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UudHMiLCJub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvZW51bXMvc29jaWFsLXBvc3RzLmVudW0udHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9lbnVtcy9tdWx0aWxvY2F0aW9uLXBvc3QuZW51bS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvc29jaWFsLXBvc3RzLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9zb2NpYWwtcG9zdC1zdGF0cy50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvcG9zdC10ZW1wbGF0ZXMudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9vYmplY3RzL211bHRpbG9jYXRpb24tcG9zdC50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvZmllbGQtbWFzay50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvYXBpLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvcG9zdC10ZW1wbGF0ZXMuYXBpLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9zb2NpYWwtcG9zdHMuYXBpLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9tdWx0aWxvY2F0aW9uLXBvc3QuYXBpLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9wYXJ0bmVyLXNvY2lhbC1wb3N0cy5hcGkuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvcG9zdC10ZW1wbGF0ZXMuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvc29jaWFsLXBvc3RzLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL211bHRpbG9jYXRpb24tcG9zdHMuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvc29jaWFsLXBvc3RzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEVudmlyb25tZW50IH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaG9zdDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2h0dHBzSG9zdDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSkge1xuICAgIH1cblxuICAgIGhvc3QoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2hvc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ob3N0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkxPQ0FMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnc29jaWFsLXBvc3QudmVuZGFzdGEtbG9jYWwuY29tJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuVEVTVDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkRFTU86XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9ICdzb2NpYWwtcG9zdHMtZGVtby5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuUFJPRDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJ3NvY2lhbC1wb3N0cy1wcm9kLmFwaWdhdGV3YXkuY28nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3N0O1xuICAgIH1cblxuICAgIGh0dHBzSG9zdCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5faHR0cHNIb3N0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cHNIb3N0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkxPQ0FMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdzb2NpYWwtcG9zdC52ZW5kYXN0YS1sb2NhbC5jb20nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5URVNUOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5ERU1POlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdzb2NpYWwtcG9zdHMtYXBpLWRlbW8uYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LlBST0Q6XG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cHNIb3N0ID0gJ3NvY2lhbC1wb3N0cy1hcGktcHJvZC5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cHNIb3N0O1xuICAgIH1cblxuICAgIGhvc3RXaXRoU2NoZW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNjaGVtZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVudmlyb25tZW50KCkgPT09IEVudmlyb25tZW50LkxPQ0FMID8gJ2h0dHA6Ly8nIDogJ2h0dHBzOi8vJztcbiAgICAgICAgcmV0dXJuIHNjaGVtZSArIHRoaXMuaG9zdCgpXG4gICAgfVxuXG4gICAgaHR0cHNIb3N0V2l0aFNjaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpID09PSBFbnZpcm9ubWVudC5MT0NBTCA/ICdodHRwOi8vJyA6ICdodHRwczovLyc7XG4gICAgICAgIHJldHVybiBzY2hlbWUgKyB0aGlzLmh0dHBzSG9zdCgpXG4gICAgfVxufVxuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBFbnVtcy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZW51bSBDYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlIHtcbiAgICBMRUFSTl9NT1JFID0gMCxcbiAgICBCT09LID0gMSxcbiAgICBPUkRFUiA9IDIsXG4gICAgU0hPUCA9IDMsXG4gICAgU0lHTl9VUCA9IDQsXG4gICAgR0VUX09GRkVSID0gNSxcbiAgICBDQUxMID0gNixcbn1cblxuZXhwb3J0IGVudW0gU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzIHtcbiAgICBOT05FID0gMCxcbiAgICBGQUlMRUQgPSAxLFxuICAgIElOX1BST0dSRVNTID0gMixcbn1cblxuZXhwb3J0IGVudW0gUG9zdGluZ1N0YXR1cyB7XG4gICAgUE9TVElOR19JTl9QUk9HUkVTUyA9IDAsXG4gICAgUE9TVElOR19GQUlMRUQgPSAxLFxuICAgIFBPU1RJTkdfQ09NUExFVEVEID0gMixcbn1cblxuZXhwb3J0IGVudW0gU29jaWFsUG9zdFNlcnZpY2Uge1xuICAgIFRXSVRURVIgPSAwLFxuICAgIEZBQ0VCT09LID0gMSxcbiAgICBMSU5LRURfSU4gPSAyLFxuICAgIEdPT0dMRV9QTFVTID0gMyxcbiAgICBHT09HTEVfTVlfQlVTSU5FU1MgPSA0LFxuICAgIFVOS05PV04gPSA1LFxuICAgIElOU1RBR1JBTSA9IDYsXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEVudW1zLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBlbnVtIFJlbW92ZVJlYXNvbiB7XG4gICAgUkVNT1ZFX1JFQVNPTl9FRElUID0gMCxcbiAgICBSRU1PVkVfUkVBU09OX0RFTEVURSA9IDEsXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIENhbGxUb0FjdGlvbiBpbXBsZW1lbnRzIGkuQ2FsbFRvQWN0aW9uSW50ZXJmYWNlIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBhY3Rpb25UeXBlOiBlLkNhbGxUb0FjdGlvbkNhbGxUb0FjdGlvblR5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYWxsVG9BY3Rpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYWxsVG9BY3Rpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWN0aW9uVHlwZSkge20uYWN0aW9uVHlwZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ2FsbFRvQWN0aW9uQ2FsbFRvQWN0aW9uVHlwZT4oZS5DYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlLCBwcm90by5hY3Rpb25UeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FsbFRvQWN0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cmwnXSA9IHRoaXMudXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvblR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvblR5cGUnXSA9IHRoaXMuYWN0aW9uVHlwZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvciBpbXBsZW1lbnRzIGkuRXJyb3JJbnRlcmZhY2Uge1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFcnJvciB7XG4gICAgICAgIGxldCBtID0gbmV3IEVycm9yKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FcnJvckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlYXNvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVhc29uJ10gPSB0aGlzLnJlYXNvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXRlZ29yeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2F0ZWdvcnknXSA9IHRoaXMuY2F0ZWdvcnk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnQgaW1wbGVtZW50cyBpLkV2ZW50SW50ZXJmYWNlIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZXRpbWU6IERhdGU7XG4gICAgZW5kRGF0ZXRpbWU6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFdmVudCB7XG4gICAgICAgIGxldCBtID0gbmV3IEV2ZW50KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0RGF0ZXRpbWUpIHttLnN0YXJ0RGF0ZXRpbWUgPSBuZXcgRGF0ZShwcm90by5zdGFydERhdGV0aW1lKTt9XG4gICAgICAgIGlmIChwcm90by5lbmREYXRldGltZSkge20uZW5kRGF0ZXRpbWUgPSBuZXcgRGF0ZShwcm90by5lbmREYXRldGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkV2ZW50SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0RGF0ZXRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnREYXRldGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydERhdGV0aW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0RGF0ZXRpbWUgPyAodGhpcy5zdGFydERhdGV0aW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0RGF0ZXRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kRGF0ZXRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kRGF0ZXRpbWUgIT09IG51bGwpIHt0b1JldHVyblsnZW5kRGF0ZXRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kRGF0ZXRpbWUgPyAodGhpcy5lbmREYXRldGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmREYXRldGltZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RTdGF0dXMgaW1wbGVtZW50cyBpLlNjaGVkdWxlUG9zdFN0YXR1c0ludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdElkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUlkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUxhYmVsOiBzdHJpbmc7XG4gICAgZXJyb3I6IEVycm9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVQb3N0U3RhdHVzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0U3RhdHVzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVycm9yKSB7bS5lcnJvciA9IEVycm9yLmZyb21Qcm90byhwcm90by5lcnJvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFN0YXR1c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsUG9zdElkJ10gPSB0aGlzLnNvY2lhbFBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZCddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUxhYmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlTGFiZWwnXSA9IHRoaXMuc29jaWFsU2VydmljZUxhYmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVycm9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVycm9yID8gKHRoaXMuZXJyb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdCBpbXBsZW1lbnRzIGkuU29jaWFsUG9zdEludGVyZmFjZSB7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHNvY2lhbFBvc3RJZDogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdGVkOiBEYXRlO1xuICAgIGlzRXJyb3I6IGJvb2xlYW47XG4gICAgZGVsZXRpb25TdGF0dXM6IGUuU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzO1xuICAgIHNlcnZpY2U6IGUuU29jaWFsUG9zdFNlcnZpY2U7XG4gICAgcGVybWFsaW5rOiBzdHJpbmc7XG4gICAgY3JlYXRlZDogRGF0ZTtcbiAgICBwcm9maWxlVXJsOiBzdHJpbmc7XG4gICAgcHJvZmlsZUltYWdlVXJsOiBzdHJpbmc7XG4gICAgc2NoZWR1bGVkOiBEYXRlO1xuICAgIHN0YXR1czogZS5Qb3N0aW5nU3RhdHVzO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50SWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBldmVudDogRXZlbnQ7XG4gICAgY2FsbFRvQWN0aW9uOiBDYWxsVG9BY3Rpb247XG4gICAgdmlkZW9Vcmw6IHN0cmluZztcbiAgICBlcnJvcjogRXJyb3I7XG4gICAgaW1hZ2VVcmxzOiBzdHJpbmdbXTtcbiAgICBsaW5rUHJldmlld0ltYWdlVXJsOiBzdHJpbmc7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNvY2lhbFBvc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTb2NpYWxQb3N0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3RlZCkge20ucG9zdGVkID0gbmV3IERhdGUocHJvdG8ucG9zdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5kZWxldGlvblN0YXR1cykge20uZGVsZXRpb25TdGF0dXMgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNvY2lhbFBvc3REZWxldGlvblN0YXR1cz4oZS5Tb2NpYWxQb3N0RGVsZXRpb25TdGF0dXMsIHByb3RvLmRlbGV0aW9uU3RhdHVzKTt9XG4gICAgICAgIGlmIChwcm90by5zZXJ2aWNlKSB7bS5zZXJ2aWNlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Tb2NpYWxQb3N0U2VydmljZT4oZS5Tb2NpYWxQb3N0U2VydmljZSwgcHJvdG8uc2VydmljZSk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlZCkge20uc2NoZWR1bGVkID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkKTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUG9zdGluZ1N0YXR1cz4oZS5Qb3N0aW5nU3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLmV2ZW50KSB7bS5ldmVudCA9IEV2ZW50LmZyb21Qcm90byhwcm90by5ldmVudCk7fVxuICAgICAgICBpZiAocHJvdG8uY2FsbFRvQWN0aW9uKSB7bS5jYWxsVG9BY3Rpb24gPSBDYWxsVG9BY3Rpb24uZnJvbVByb3RvKHByb3RvLmNhbGxUb0FjdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uZXJyb3IpIHttLmVycm9yID0gRXJyb3IuZnJvbVByb3RvKHByb3RvLmVycm9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU29jaWFsUG9zdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RJZCddID0gdGhpcy5zb2NpYWxQb3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ZWQgIT09IG51bGwpIHt0b1JldHVyblsncG9zdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3RlZCA/ICh0aGlzLnBvc3RlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNFcnJvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNFcnJvciddID0gdGhpcy5pc0Vycm9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0aW9uU3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWxldGlvblN0YXR1cyddID0gdGhpcy5kZWxldGlvblN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXJ2aWNlJ10gPSB0aGlzLnNlcnZpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGVybWFsaW5rICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwZXJtYWxpbmsnXSA9IHRoaXMucGVybWFsaW5rO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvZmlsZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJvZmlsZVVybCddID0gdGhpcy5wcm9maWxlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2ZpbGVJbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJvZmlsZUltYWdlVXJsJ10gPSB0aGlzLnByb2ZpbGVJbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zY2hlZHVsZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zY2hlZHVsZWQgPyAodGhpcy5zY2hlZHVsZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmwnXSA9IHRoaXMuaW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJuYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VybmFtZSddID0gdGhpcy51c2VybmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJlbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFyZW50SWQnXSA9IHRoaXMucGFyZW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWQnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmV2ZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V2ZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV2ZW50ID8gKHRoaXMuZXZlbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXZlbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsbFRvQWN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNhbGxUb0FjdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjYWxsVG9BY3Rpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsbFRvQWN0aW9uID8gKHRoaXMuY2FsbFRvQWN0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNhbGxUb0FjdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3IgIT09IG51bGwpIHt0b1JldHVyblsnZXJyb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXJyb3IgPyAodGhpcy5lcnJvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lcnJvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJscyddID0gdGhpcy5pbWFnZVVybHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGlua1ByZXZpZXdJbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGlua1ByZXZpZXdJbWFnZVVybCddID0gdGhpcy5saW5rUHJldmlld0ltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uUG9zdElkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdERhdGEgaW1wbGVtZW50cyBpLlNvY2lhbFBvc3REYXRhSW50ZXJmYWNlIHtcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgc2NoZWR1bGVGb3I6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTb2NpYWxQb3N0RGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNvY2lhbFBvc3REYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlRm9yKSB7bS5zY2hlZHVsZUZvciA9IG5ldyBEYXRlKHByb3RvLnNjaGVkdWxlRm9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU29jaWFsUG9zdERhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlRm9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNjaGVkdWxlRm9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlRm9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlRm9yID8gKHRoaXMuc2NoZWR1bGVGb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVGb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZhY2Vib29rUG9zdFN0YXRzIGltcGxlbWVudHMgaS5GYWNlYm9va1Bvc3RTdGF0c0ludGVyZmFjZSB7XG4gICAgY29tbWVudENvdW50OiBudW1iZXI7XG4gICAgc2hhcmVDb3VudDogbnVtYmVyO1xuICAgIGxpa2VDb3VudDogbnVtYmVyO1xuICAgIGhhc0xpa2U6IGJvb2xlYW47XG4gICAgY2FuTGlrZTogYm9vbGVhbjtcbiAgICByZWFjdGlvbnM6IG51bWJlcjtcbiAgICBwZW9wbGVSZWFjaGVkOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBGYWNlYm9va1Bvc3RTdGF0cyB7XG4gICAgICAgIGxldCBtID0gbmV3IEZhY2Vib29rUG9zdFN0YXRzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbW1lbnRDb3VudCkge20uY29tbWVudENvdW50ID0gcGFyc2VJbnQocHJvdG8uY29tbWVudENvdW50LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uc2hhcmVDb3VudCkge20uc2hhcmVDb3VudCA9IHBhcnNlSW50KHByb3RvLnNoYXJlQ291bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5saWtlQ291bnQpIHttLmxpa2VDb3VudCA9IHBhcnNlSW50KHByb3RvLmxpa2VDb3VudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnJlYWN0aW9ucykge20ucmVhY3Rpb25zID0gcGFyc2VJbnQocHJvdG8ucmVhY3Rpb25zLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucGVvcGxlUmVhY2hlZCkge20ucGVvcGxlUmVhY2hlZCA9IHBhcnNlSW50KHByb3RvLnBlb3BsZVJlYWNoZWQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRmFjZWJvb2tQb3N0U3RhdHNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21tZW50Q291bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbW1lbnRDb3VudCddID0gdGhpcy5jb21tZW50Q291bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhcmVDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2hhcmVDb3VudCddID0gdGhpcy5zaGFyZUNvdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpa2VDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGlrZUNvdW50J10gPSB0aGlzLmxpa2VDb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNMaWtlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNMaWtlJ10gPSB0aGlzLmhhc0xpa2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FuTGlrZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FuTGlrZSddID0gdGhpcy5jYW5MaWtlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlYWN0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVhY3Rpb25zJ10gPSB0aGlzLnJlYWN0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wZW9wbGVSZWFjaGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwZW9wbGVSZWFjaGVkJ10gPSB0aGlzLnBlb3BsZVJlYWNoZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdFN0YXRzIGltcGxlbWVudHMgaS5Tb2NpYWxQb3N0U3RhdHNJbnRlcmZhY2Uge1xuICAgIGludGVybmFsUG9zdElkOiBzdHJpbmc7XG4gICAgZmFjZWJvb2tQb3N0U3RhdHM6IEZhY2Vib29rUG9zdFN0YXRzO1xuICAgIHR3aXR0ZXJQb3N0U3RhdHM6IFR3aXR0ZXJQb3N0U3RhdHM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTb2NpYWxQb3N0U3RhdHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBTb2NpYWxQb3N0U3RhdHMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmFjZWJvb2tQb3N0U3RhdHMpIHttLmZhY2Vib29rUG9zdFN0YXRzID0gRmFjZWJvb2tQb3N0U3RhdHMuZnJvbVByb3RvKHByb3RvLmZhY2Vib29rUG9zdFN0YXRzKTt9XG4gICAgICAgIGlmIChwcm90by50d2l0dGVyUG9zdFN0YXRzKSB7bS50d2l0dGVyUG9zdFN0YXRzID0gVHdpdHRlclBvc3RTdGF0cy5mcm9tUHJvdG8ocHJvdG8udHdpdHRlclBvc3RTdGF0cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNvY2lhbFBvc3RTdGF0c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludGVybmFsUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZCddID0gdGhpcy5pbnRlcm5hbFBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydmYWNlYm9va1Bvc3RTdGF0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyA/ICh0aGlzLmZhY2Vib29rUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZhY2Vib29rUG9zdFN0YXRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudHdpdHRlclBvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0d2l0dGVyUG9zdFN0YXRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHMgPyAodGhpcy50d2l0dGVyUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHdpdHRlclBvc3RTdGF0cyBpbXBsZW1lbnRzIGkuVHdpdHRlclBvc3RTdGF0c0ludGVyZmFjZSB7XG4gICAgZmF2b3VyaXRlczogbnVtYmVyO1xuICAgIGhhc0Zhdm91cml0ZWQ6IGJvb2xlYW47XG4gICAgcmV0d2VldHM6IG51bWJlcjtcbiAgICBoYXNSZXR3ZWV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBUd2l0dGVyUG9zdFN0YXRzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVHdpdHRlclBvc3RTdGF0cygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mYXZvdXJpdGVzKSB7bS5mYXZvdXJpdGVzID0gcGFyc2VJbnQocHJvdG8uZmF2b3VyaXRlcywgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnJldHdlZXRzKSB7bS5yZXR3ZWV0cyA9IHBhcnNlSW50KHByb3RvLnJldHdlZXRzLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlR3aXR0ZXJQb3N0U3RhdHNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYXZvdXJpdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmYXZvdXJpdGVzJ10gPSB0aGlzLmZhdm91cml0ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzRmF2b3VyaXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzRmF2b3VyaXRlZCddID0gdGhpcy5oYXNGYXZvdXJpdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHdlZXRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXR3ZWV0cyddID0gdGhpcy5yZXR3ZWV0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNSZXR3ZWV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc1JldHdlZXRlZCddID0gdGhpcy5oYXNSZXR3ZWV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvc3RUZW1wbGF0ZSBpbXBsZW1lbnRzIGkuUG9zdFRlbXBsYXRlSW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUG9zdFRlbXBsYXRlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUG9zdFRlbXBsYXRlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWQpIHttLmNyZWF0ZWQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by51cGRhdGVkKSB7bS51cGRhdGVkID0gbmV3IERhdGUocHJvdG8udXBkYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Qb3N0VGVtcGxhdGVJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudXBkYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWyd1cGRhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnVwZGF0ZWQgPyAodGhpcy51cGRhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnVwZGF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dtYlBvc3RDdXN0b21pemF0aW9uJ10gPSB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVVybCddID0gdGhpcy5pbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlUGF0aCddID0gdGhpcy5pbWFnZVBhdGg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVNpemUnXSA9IHRoaXMuaW1hZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZpZXdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2aWV3cyddID0gdGhpcy5wcmV2aWV3czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25zJ10gPSB0aGlzLm9wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvVXJsJ10gPSB0aGlzLnZpZGVvVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhdGlvbiBpbXBsZW1lbnRzIGkuTG9jYXRpb25JbnRlcmZhY2Uge1xuICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdO1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMb2NhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IExvY2F0aW9uKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Mb2NhdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZHMnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlsb2NhdGlvblBvc3QgaW1wbGVtZW50cyBpLk11bHRpbG9jYXRpb25Qb3N0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgb3JpZ2luYWxUZXh0OiBzdHJpbmc7XG4gICAgb3JpZ2luYWxTY2hlZHVsZWREYXRlOiBEYXRlO1xuICAgIG9yaWdpbmFsTWVkaWE6IHN0cmluZ1tdO1xuICAgIG9yaWdpbmFsTG9jYXRpb25zOiBMb2NhdGlvbltdO1xuICAgIGVkaXRlZExvY2F0aW9uczogTG9jYXRpb25bXTtcbiAgICBkZWxldGVkTG9jYXRpb25zOiBMb2NhdGlvbltdO1xuICAgIG9yaWdpbmFsR2lmczogc3RyaW5nW107XG4gICAgb3JpZ2luYWxWaWRlb3M6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTXVsdGlsb2NhdGlvblBvc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNdWx0aWxvY2F0aW9uUG9zdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcmlnaW5hbFNjaGVkdWxlZERhdGUpIHttLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ub3JpZ2luYWxMb2NhdGlvbnMpIHttLm9yaWdpbmFsTG9jYXRpb25zID0gcHJvdG8ub3JpZ2luYWxMb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZWRpdGVkTG9jYXRpb25zKSB7bS5lZGl0ZWRMb2NhdGlvbnMgPSBwcm90by5lZGl0ZWRMb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZGVsZXRlZExvY2F0aW9ucykge20uZGVsZXRlZExvY2F0aW9ucyA9IHByb3RvLmRlbGV0ZWRMb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk11bHRpbG9jYXRpb25Qb3N0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbmFsVGV4dCddID0gdGhpcy5vcmlnaW5hbFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxTY2hlZHVsZWREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmlnaW5hbFNjaGVkdWxlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JpZ2luYWxTY2hlZHVsZWREYXRlID8gKHRoaXMub3JpZ2luYWxTY2hlZHVsZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbE1lZGlhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5hbE1lZGlhJ10gPSB0aGlzLm9yaWdpbmFsTWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxMb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxMb2NhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnb3JpZ2luYWxMb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JpZ2luYWxMb2NhdGlvbnMgPyAodGhpcy5vcmlnaW5hbExvY2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcmlnaW5hbExvY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0ZWRMb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWRpdGVkTG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VkaXRlZExvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lZGl0ZWRMb2NhdGlvbnMgPyAodGhpcy5lZGl0ZWRMb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZWRpdGVkTG9jYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0ZWRMb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGVsZXRlZExvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydkZWxldGVkTG9jYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRlbGV0ZWRMb2NhdGlvbnMgPyAodGhpcy5kZWxldGVkTG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRlbGV0ZWRMb2NhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxHaWZzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5hbEdpZnMnXSA9IHRoaXMub3JpZ2luYWxHaWZzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsVmlkZW9zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5hbFZpZGVvcyddID0gdGhpcy5vcmlnaW5hbFZpZGVvczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aWxvY2F0aW9uUG9zdEVycm9yIGltcGxlbWVudHMgaS5NdWx0aWxvY2F0aW9uUG9zdEVycm9ySW50ZXJmYWNlIHtcbiAgICBzb2NpYWxTZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGVycm9yUmVhc29uOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNdWx0aWxvY2F0aW9uUG9zdEVycm9yIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTXVsdGlsb2NhdGlvblBvc3RFcnJvcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTXVsdGlsb2NhdGlvblBvc3RFcnJvckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3JSZWFzb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Vycm9yUmVhc29uJ10gPSB0aGlzLmVycm9yUmVhc29uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZE1hc2sgaW1wbGVtZW50cyBpLkZpZWxkTWFza0ludGVyZmFjZSB7XG4gICAgcGF0aHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRmllbGRNYXNrIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRmllbGRNYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5GaWVsZE1hc2tJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXRocyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF0aHMnXSA9IHRoaXMucGF0aHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaWVsZE1hc2sgfSBmcm9tICcuL2ZpZWxkLW1hc2snO1xuaW1wb3J0IHsgTG9jYXRpb24sIE11bHRpbG9jYXRpb25Qb3N0LCBNdWx0aWxvY2F0aW9uUG9zdEVycm9yIH0gZnJvbSAnLi9tdWx0aWxvY2F0aW9uLXBvc3QnO1xuaW1wb3J0IHsgUG9zdFRlbXBsYXRlIH0gZnJvbSAnLi9wb3N0LXRlbXBsYXRlcyc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0LCBTb2NpYWxQb3N0RGF0YSwgU2NoZWR1bGVQb3N0U3RhdHVzIH0gZnJvbSAnLi9zb2NpYWwtcG9zdHMnO1xuaW1wb3J0IHsgU29jaWFsUG9zdFN0YXRzIH0gZnJvbSAnLi9zb2NpYWwtcG9zdC1zdGF0cyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBtZWRpYTogc3RyaW5nW107XG4gICAgc2NoZWR1bGVkRGF0ZTogRGF0ZTtcbiAgICBsb2NhdGlvbnM6IExvY2F0aW9uW107XG4gICAgZ2lmczogc3RyaW5nW107XG4gICAgdmlkZW9zOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zY2hlZHVsZWREYXRlKSB7bS5zY2hlZHVsZWREYXRlID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0J10gPSB0aGlzLnRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzY2hlZHVsZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlZERhdGUgPyAodGhpcy5zY2hlZHVsZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNjaGVkdWxlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5naWZzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnaWZzJ10gPSB0aGlzLmdpZnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb3MnXSA9IHRoaXMudmlkZW9zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuICAgIGVycm9yczogTXVsdGlsb2NhdGlvblBvc3RFcnJvcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdCkge20ucG9zdCA9IE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byhwcm90by5wb3N0KTt9XG4gICAgICAgIGlmIChwcm90by5lcnJvcnMpIHttLmVycm9ycyA9IHByb3RvLmVycm9ycy5tYXAoTXVsdGlsb2NhdGlvblBvc3RFcnJvci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdCA/ICh0aGlzLnBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3JzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lcnJvcnMgPyAodGhpcy5lcnJvcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdERhdGVUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3REYXRlVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0RGF0ZVRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdERhdGVUaW1lID8gKHRoaXMucG9zdERhdGVUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3REYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlUGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VQYXRoJ10gPSB0aGlzLmltYWdlUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlU2l6ZSddID0gdGhpcy5pbWFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VGaWx0ZXIgaW1wbGVtZW50cyBpLkRhdGVSYW5nZUZpbHRlckludGVyZmFjZSB7XG4gICAgYmVnaW5SYW5nZTogRGF0ZTtcbiAgICBlbmRSYW5nZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERhdGVSYW5nZUZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IERhdGVSYW5nZUZpbHRlcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5iZWdpblJhbmdlKSB7bS5iZWdpblJhbmdlID0gbmV3IERhdGUocHJvdG8uYmVnaW5SYW5nZSk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kUmFuZ2UpIHttLmVuZFJhbmdlID0gbmV3IERhdGUocHJvdG8uZW5kUmFuZ2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EYXRlUmFuZ2VGaWx0ZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iZWdpblJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJlZ2luUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnYmVnaW5SYW5nZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5iZWdpblJhbmdlID8gKHRoaXMuYmVnaW5SYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5iZWdpblJhbmdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZFJhbmdlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZFJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZFJhbmdlID8gKHRoaXMuZW5kUmFuZ2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kUmFuZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBzb2NpYWxQb3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsUG9zdElkJ10gPSB0aGlzLnNvY2lhbFBvc3RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgICBzY2hlZHVsZWREYXRlOiBEYXRlO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIGdpZnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvczogc3RyaW5nW107XG4gICAgbG9jYXRpb25zOiBMb2NhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc2NoZWR1bGVkRGF0ZSkge20uc2NoZWR1bGVkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLnNjaGVkdWxlZERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9ucykge20ubG9jYXRpb25zID0gcHJvdG8ubG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0J10gPSB0aGlzLnRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzY2hlZHVsZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlZERhdGUgPyAodGhpcy5zY2hlZHVsZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNjaGVkdWxlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5naWZzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnaWZzJ10gPSB0aGlzLmdpZnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb3MnXSA9IHRoaXMudmlkZW9zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5sb2NhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnbG9jYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxvY2F0aW9ucyA/ICh0aGlzLmxvY2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5sb2NhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwb3N0OiBNdWx0aWxvY2F0aW9uUG9zdDtcbiAgICBlcnJvcnM6IE11bHRpbG9jYXRpb25Qb3N0RXJyb3JbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdCkge20ucG9zdCA9IE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byhwcm90by5wb3N0KTt9XG4gICAgICAgIGlmIChwcm90by5lcnJvcnMpIHttLmVycm9ycyA9IHByb3RvLmVycm9ycy5tYXAoTXVsdGlsb2NhdGlvblBvc3RFcnJvci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3QgPyAodGhpcy5wb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3JzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVycm9ycyAhPT0gbnVsbCkge3RvUmV0dXJuWydlcnJvcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXJyb3JzID8gKHRoaXMuZXJyb3JzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVycm9yczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSB7XG4gICAgZGF0ZVJhbmdlOiBEYXRlUmFuZ2VGaWx0ZXI7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGF0ZVJhbmdlKSB7bS5kYXRlUmFuZ2UgPSBEYXRlUmFuZ2VGaWx0ZXIuZnJvbVByb3RvKHByb3RvLmRhdGVSYW5nZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVSYW5nZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRlUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZVJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRhdGVSYW5nZSA/ICh0aGlzLmRhdGVSYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlUmFuZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpbnRlcm5hbFBvc3RJZHM6IHN0cmluZ1tdO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQb3N0SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZHMnXSA9IHRoaXMuaW50ZXJuYWxQb3N0SWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdFN0YXRzOiBTb2NpYWxQb3N0U3RhdHNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3RTdGF0cykge20uc29jaWFsUG9zdFN0YXRzID0gcHJvdG8uc29jaWFsUG9zdFN0YXRzLm1hcChTb2NpYWxQb3N0U3RhdHMuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RTdGF0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0U3RhdHMgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdFN0YXRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RTdGF0cyA/ICh0aGlzLnNvY2lhbFBvc3RTdGF0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0U3RhdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gICAgaW50ZXJuYWxQb3N0SWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludGVybmFsUG9zdElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW50ZXJuYWxQb3N0SWRzJ10gPSB0aGlzLmludGVybmFsUG9zdElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25JZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbXVsdGlsb2NhdGlvblBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubXVsdGlsb2NhdGlvblBvc3QpIHttLm11bHRpbG9jYXRpb25Qb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLm11bHRpbG9jYXRpb25Qb3N0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ID8gKHRoaXMubXVsdGlsb2NhdGlvblBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubXVsdGlsb2NhdGlvblBvc3Q7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZW1wbGF0ZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZW1wbGF0ZUlkJ10gPSB0aGlzLnRlbXBsYXRlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwb3N0VGVtcGxhdGU6IFBvc3RUZW1wbGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdFRlbXBsYXRlKSB7bS5wb3N0VGVtcGxhdGUgPSBQb3N0VGVtcGxhdGUuZnJvbVByb3RvKHByb3RvLnBvc3RUZW1wbGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3RUZW1wbGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0VGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdFRlbXBsYXRlID8gKHRoaXMucG9zdFRlbXBsYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3RUZW1wbGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUlkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkcyddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY291bnQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY291bnQpIHttLmNvdW50ID0gcGFyc2VJbnQocHJvdG8uY291bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnQnXSA9IHRoaXMuY291bnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgICBlbmREYXRlOiBEYXRlO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGFydERhdGUpIHttLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0RGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kRGF0ZSkge20uZW5kRGF0ZSA9IG5ldyBEYXRlKHByb3RvLmVuZERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0RGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnREYXRlID8gKHRoaXMuc3RhcnREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0RGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnZW5kRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmREYXRlID8gKHRoaXMuZW5kRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtdWx0aWxvY2F0aW9uUG9zdHM6IE11bHRpbG9jYXRpb25Qb3N0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgZmFpbGVkU29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubXVsdGlsb2NhdGlvblBvc3RzKSB7bS5tdWx0aWxvY2F0aW9uUG9zdHMgPSBwcm90by5tdWx0aWxvY2F0aW9uUG9zdHMubWFwKE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZmFpbGVkU29jaWFsUG9zdHMpIHttLmZhaWxlZFNvY2lhbFBvc3RzID0gcHJvdG8uZmFpbGVkU29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubXVsdGlsb2NhdGlvblBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgPyAodGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubXVsdGlsb2NhdGlvblBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnZmFpbGVkU29jaWFsUG9zdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgPyAodGhpcy5mYWlsZWRTb2NpYWxQb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5mYWlsZWRTb2NpYWxQb3N0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3RUZW1wbGF0ZTogUG9zdFRlbXBsYXRlW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0VGVtcGxhdGUpIHttLnBvc3RUZW1wbGF0ZSA9IHByb3RvLnBvc3RUZW1wbGF0ZS5tYXAoUG9zdFRlbXBsYXRlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdFRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3RUZW1wbGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0VGVtcGxhdGUgPyAodGhpcy5wb3N0VGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdFRlbXBsYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhcnQpIHttLnN0YXJ0ID0gbmV3IERhdGUocHJvdG8uc3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZCkge20uZW5kID0gbmV3IERhdGUocHJvdG8uZW5kKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnQgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnQgPyAodGhpcy5zdGFydCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmQgPyAodGhpcy5lbmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZHMnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YWdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YWdzJ10gPSB0aGlzLnRhZ3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdHMpIHttLnNvY2lhbFBvc3RzID0gcHJvdG8uc29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHNvY2lhbFBvc3RzOiBTb2NpYWxQb3N0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdHMpIHttLnNvY2lhbFBvc3RzID0gcHJvdG8uc29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc29jaWFsUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdHMgPyAodGhpcy5zb2NpYWxQb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXh0Q3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduZXh0Q3Vyc29yJ10gPSB0aGlzLm5leHRDdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgZmlsdGVyczogUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHJlYXNvbjogZS5SZW1vdmVSZWFzb247XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25JZDogc3RyaW5nO1xuICAgIGxvY2F0aW9uczogTG9jYXRpb25bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJlYXNvbikge20ucmVhc29uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5SZW1vdmVSZWFzb24+KGUuUmVtb3ZlUmVhc29uLCBwcm90by5yZWFzb24pO31cbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9ucykge20ubG9jYXRpb25zID0gcHJvdG8ubG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVhc29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWFzb24nXSA9IHRoaXMucmVhc29uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25JZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5TY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0OiBTb2NpYWxQb3N0RGF0YTtcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTY2hlZHVsZVBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0KSB7bS5zb2NpYWxQb3N0ID0gU29jaWFsUG9zdERhdGEuZnJvbVByb3RvKHByb3RvLnNvY2lhbFBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdCA/ICh0aGlzLnNvY2lhbFBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWRzJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2NoZWR1bGVQb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN0YXR1c2VzOiBTY2hlZHVsZVBvc3RTdGF0dXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKFNjaGVkdWxlUG9zdFN0YXR1cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1c2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXR1c2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1c2VzID8gKHRoaXMuc3RhdHVzZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdDogU29jaWFsUG9zdERhdGE7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdCkge20uc29jaWFsUG9zdCA9IFNvY2lhbFBvc3REYXRhLmZyb21Qcm90byhwcm90by5zb2NpYWxQb3N0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc29jaWFsUG9zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3QgPyAodGhpcy5zb2NpYWxQb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN0YXR1c2VzOiBTY2hlZHVsZVBvc3RTdGF0dXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKFNjaGVkdWxlUG9zdFN0YXR1cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1c2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXR1c2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1c2VzID8gKHRoaXMuc3RhdHVzZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dtYlBvc3RDdXN0b21pemF0aW9uJ10gPSB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVVybCddID0gdGhpcy5pbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlUGF0aCddID0gdGhpcy5pbWFnZVBhdGg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVNpemUnXSA9IHRoaXMuaW1hZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZpZXdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2aWV3cyddID0gdGhpcy5wcmV2aWV3czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25zJ10gPSB0aGlzLm9wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvVXJsJ10gPSB0aGlzLnZpZGVvVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlLFxuICAgICAgICBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0LFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0LFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSxcbiAgICAgICAgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0LFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlLFxuICAgICAgICBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0LFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQb3N0VGVtcGxhdGVzQXBpU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgaG9zdFNlcnZpY2U6IEhvc3RTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcGlPcHRpb25zKCk6IHtoZWFkZXJzOiBIdHRwSGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFufSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdXBkYXRlUG9zdFRlbXBsYXRlKHI6IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgfCBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8VXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9VcGRhdGVQb3N0VGVtcGxhdGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIGNyZWF0ZVBvc3RUZW1wbGF0ZShyOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHwgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8Q3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8Q3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBvc3RUZW1wbGF0ZXMvQ3JlYXRlUG9zdFRlbXBsYXRlXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRQb3N0VGVtcGxhdGUocjogR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCB8IEdldFBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikgOiBuZXcgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Qb3N0VGVtcGxhdGVzL0dldFBvc3RUZW1wbGF0ZVwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgbGlzdFBvc3RUZW1wbGF0ZXMocjogTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0IHwgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8TGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0PnIpIDogbmV3IExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBvc3RUZW1wbGF0ZXMvTGlzdFBvc3RUZW1wbGF0ZXNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZGVsZXRlUG9zdFRlbXBsYXRlKHI6IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgfCBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9EZWxldGVQb3N0VGVtcGxhdGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIFxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3QsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3QsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0LFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXNwb25zZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVxdWVzdCxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVzcG9uc2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3QsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlLFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBTb2NpYWxQb3N0c0FwaVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGhvc3RTZXJ2aWNlOiBIb3N0U2VydmljZSkge1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBpT3B0aW9ucygpOiB7aGVhZGVyczogSHR0cEhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbn0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxpc3QocjogTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCB8IExpc3RTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxMaXN0U29jaWFsUG9zdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPExpc3RTb2NpYWxQb3N0c1JlcXVlc3Q+cikgOiBuZXcgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9MaXN0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBkZWxldGVTb2NpYWxQb3N0KHI6IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IHwgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8RGVsZXRlU29jaWFsUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RGVsZXRlU29jaWFsUG9zdFJlcXVlc3Q+cikgOiBuZXcgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9EZWxldGVTb2NpYWxQb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHsuLi50aGlzLmFwaU9wdGlvbnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICAgIH1cbiAgICBzY2hlZHVsZVRvQWxsUGFnZXMocjogU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCB8IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3Q+cikgOiBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9TY2hlZHVsZVRvQWxsUGFnZXNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHNjaGVkdWxlKHI6IFNjaGVkdWxlUG9zdFJlcXVlc3QgfCBTY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxTY2hlZHVsZVBvc3RSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8U2NoZWR1bGVQb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxTY2hlZHVsZVBvc3RSZXF1ZXN0PnIpIDogbmV3IFNjaGVkdWxlUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvU2NoZWR1bGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBTY2hlZHVsZVBvc3RSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldE11bHRpU29jaWFsUG9zdHMocjogR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QgfCBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdD5yKSA6IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvR2V0TXVsdGlTb2NpYWxQb3N0c1wiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldE11bHRpU29jaWFsUG9zdFN0YXRzKHI6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCB8IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdD5yKSA6IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1wiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRTY2hlZHVsZWRQb3N0Q291bnQocjogR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdCB8IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Q+cikgOiBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9HZXRTY2hlZHVsZWRQb3N0Q291bnRcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIFxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbiAgICAgICAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSxcbiAgICAgICAgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICAgICAgICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICAgICAgICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSxcbiAgICAgICAgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICAgICAgICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0LFxuICAgICAgICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSxcbiAgICAgICAgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbn0gZnJvbSAnLi9vYmplY3RzLyc7XG5pbXBvcnQge1xuICAgICAgICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuLi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE11bHRpbG9jYXRpb25Qb3N0QXBpU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgaG9zdFNlcnZpY2U6IEhvc3RTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcGlPcHRpb25zKCk6IHtoZWFkZXJzOiBIdHRwSGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFufSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY3JlYXRlTXVsdGlsb2NhdGlvblBvc3QocjogQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHwgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpIDogbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9DcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBlZGl0TXVsdGlsb2NhdGlvblBvc3QocjogRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB8IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikgOiBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvRWRpdE11bHRpbG9jYXRpb25Qb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICByZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3QocjogUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB8IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8UmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpIDogbmV3IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHsuLi50aGlzLmFwaU9wdGlvbnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICAgIH1cbiAgICBsaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmQocjogTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCB8IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Q+cikgOiBuZXcgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBkZWxldGVNdWx0aWxvY2F0aW9uUG9zdChyOiBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgfCBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8RGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKSA6IG5ldyBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIGdldE11bHRpbG9jYXRpb25Qb3N0KHI6IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB8IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKSA6IG5ldyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvR2V0TXVsdGlsb2NhdGlvblBvc3RcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEFQSSBTZXJ2aWNlLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICAgICAgUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlLFxuICAgICAgICBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCxcbn0gZnJvbSAnLi9vYmplY3RzLyc7XG5pbXBvcnQge1xuICAgICAgICBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQYXJ0bmVyU29jaWFsUG9zdHNBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsaXN0U2NoZWR1bGVkKHI6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IHwgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8UGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8UGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Q+cikgOiBuZXcgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBhcnRuZXJTb2NpYWxQb3N0cy9MaXN0U2NoZWR1bGVkXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgbGlzdFNjaGVkdWxlZEJ5Q3JlYXRlZChyOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCB8IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpIDogbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5QYXJ0bmVyU29jaWFsUG9zdHMvTGlzdFNjaGVkdWxlZEJ5Q3JlYXRlZFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCxcbiAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UsXG4gIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gIEdldFBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gIEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlLFxuICBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QsXG4gIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UsXG4gIFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG59IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvYXBpJztcbmltcG9ydCB7IFBvc3RUZW1wbGF0ZXNBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvcG9zdC10ZW1wbGF0ZXMuYXBpLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUG9zdFRlbXBsYXRlc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNvY2lhbFBvc3RzQXBpU2VydmljZTogUG9zdFRlbXBsYXRlc0FwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIHVwZGF0ZVBvc3RUZW1wbGF0ZShhY2NvdW50R3JvdXBJZDogc3RyaW5nLCB0ZW1wbGF0ZUlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHBvc3RUZXh0OiBzdHJpbmcsIHBvc3REYXRlVGltZTogRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmcsIGltYWdlVXJsOiBzdHJpbmcsIGltYWdlUGF0aDogc3RyaW5nLCBpbWFnZVNpemU6IHN0cmluZywgcHJldmlld3M6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHN0cmluZ1tdLCB2aWRlb1VybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCh7XG4gICAgICBhY2NvdW50R3JvdXBJZDogYWNjb3VudEdyb3VwSWQsXG4gICAgICB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgcG9zdFRleHQ6IHBvc3RUZXh0LFxuICAgICAgcG9zdERhdGVUaW1lOiBwb3N0RGF0ZVRpbWUsXG4gICAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogZ21iUG9zdEN1c3RvbWl6YXRpb24sXG4gICAgICBpbWFnZVVybDogaW1hZ2VVcmwsXG4gICAgICBpbWFnZVBhdGg6IGltYWdlUGF0aCxcbiAgICAgIGltYWdlU2l6ZTogaW1hZ2VTaXplLFxuICAgICAgcHJldmlld3M6IHByZXZpZXdzLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIHZpZGVvVXJsOiB2aWRlb1VybFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS51cGRhdGVQb3N0VGVtcGxhdGUocmVxKVxuICB9XG5cbiAgY3JlYXRlUG9zdFRlbXBsYXRlKGFjY291bnRHcm91cElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHBvc3RUZXh0OiBzdHJpbmcsIHBvc3REYXRlVGltZTogRGF0ZSwgZ21iUG9zdEN1c3RvbWl6YXRpb246IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsOiBzdHJpbmcsIGltYWdlUGF0aDogc3RyaW5nLCBpbWFnZVNpemU6IHN0cmluZywgcHJldmlld3M6IHN0cmluZywgb3B0aW9uczogc3RyaW5nW10sIHZpZGVvVXJsOiBzdHJpbmcpOlxuICAgIE9ic2VydmFibGU8Q3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCh7XG4gICAgICBhY2NvdW50R3JvdXBJZDogYWNjb3VudEdyb3VwSWQsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBwb3N0VGV4dDogcG9zdFRleHQsXG4gICAgICBwb3N0RGF0ZVRpbWU6IHBvc3REYXRlVGltZSxcbiAgICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBnbWJQb3N0Q3VzdG9taXphdGlvbixcbiAgICAgIGltYWdlVXJsOiBpbWFnZVVybCxcbiAgICAgIGltYWdlUGF0aDogaW1hZ2VQYXRoLFxuICAgICAgaW1hZ2VTaXplOiBpbWFnZVNpemUsXG4gICAgICBwcmV2aWV3czogcHJldmlld3MsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgdmlkZW9Vcmw6IHZpZGVvVXJsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmNyZWF0ZVBvc3RUZW1wbGF0ZShyZXEpO1xuICB9XG5cbiAgZ2V0UG9zdFRlbXBsYXRlKGFjY291bnRHcm91cElkOiBzdHJpbmcsIHRlbXBsYXRlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0UG9zdFRlbXBsYXRlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCh7XG4gICAgICBhY2NvdW50R3JvdXBJZDogYWNjb3VudEdyb3VwSWQsXG4gICAgICB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmdldFBvc3RUZW1wbGF0ZShyZXEpXG4gIH1cblxuICBsaXN0UG9zdFRlbXBsYXRlcyhhY2NvdW50R3JvdXBJZDogc3RyaW5nLCBjdXJzb3I6IHN0cmluZywgcGFnZVNpemU6IG51bWJlcik6IE9ic2VydmFibGU8TGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Qoe1xuICAgICAgYWNjb3VudEdyb3VwSWQ6IGFjY291bnRHcm91cElkLFxuICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICBwYWdlU2l6ZTogcGFnZVNpemVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UubGlzdFBvc3RUZW1wbGF0ZXMocmVxKTtcbiAgfVxuXG4gIGRlbGV0ZVBvc3RUZW1wbGF0ZShhY2NvdW50R3JvdXBJZDogc3RyaW5nLCB0ZW1wbGF0ZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHtcbiAgICAgIGFjY291bnRHcm91cElkOiBhY2NvdW50R3JvdXBJZCxcbiAgICAgIHRlbXBsYXRlSWQ6IHRlbXBsYXRlSWRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UuZGVsZXRlUG9zdFRlbXBsYXRlKHJlcSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIExpc3RTb2NpYWxQb3N0c1JlcXVlc3QsXG4gIExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlLFxuICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCxcbiAgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlLFxuICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0LFxuICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZSxcbn0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9hcGknO1xuaW1wb3J0IHsgU29jaWFsUG9zdHNBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvc29jaWFsLXBvc3RzLmFwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNvY2lhbFBvc3RzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc29jaWFsUG9zdHNBcGlTZXJ2aWNlOiBTb2NpYWxQb3N0c0FwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIGxpc3QoXG4gICAgIHN0YXJ0OiBEYXRlLFxuICAgICBlbmQ6IERhdGUsXG4gICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdLFxuICAgICBidXNpbmVzc0lkOiBzdHJpbmcsXG4gICAgIHBhcnRuZXJJZDogc3RyaW5nLFxuICAgICBjdXJzb3I6IHN0cmluZyxcbiAgICAgdGFnczogc3RyaW5nW10sXG4gICAgIHBhZ2VTaXplOiBudW1iZXJcbiAgKTpcbiAgICBPYnNlcnZhYmxlPExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IExpc3RTb2NpYWxQb3N0c1JlcXVlc3Qoe1xuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBlbmQsXG4gICAgICBidXNpbmVzc0lkOiBidXNpbmVzc0lkLFxuICAgICAgcGFydG5lcklkOiBwYXJ0bmVySWQsXG4gICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgIHNvY2lhbFNlcnZpY2VJZHM6IHNvY2lhbFNlcnZpY2VJZHMsXG4gICAgICB0YWdzOiB0YWdzLFxuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5saXN0KHJlcSk7XG4gIH1cblxuICBnZXRNdWx0aVNvY2lhbFBvc3RzKGJ1c2luZXNzSWQ6IHN0cmluZywgaW50ZXJuYWxQb3N0SWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgaWYgKCFpbnRlcm5hbFBvc3RJZHMgfHwgaW50ZXJuYWxQb3N0SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgcmVzID0gbmV3IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgfVxuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCh7YnVzaW5lc3NJZDogYnVzaW5lc3NJZCwgaW50ZXJuYWxQb3N0SWRzOiBpbnRlcm5hbFBvc3RJZHN9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UuZ2V0TXVsdGlTb2NpYWxQb3N0cyhyZXEpO1xuICB9XG5cbiAgZ2V0U2NoZWR1bGVkUG9zdENvdW50KHBhcnRuZXJJZDogc3RyaW5nLCBidXNpbmVzc0lkOiBzdHJpbmcsIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0KHtwYXJ0bmVySWQ6IHBhcnRuZXJJZCwgYnVzaW5lc3NJZDogYnVzaW5lc3NJZCwgc29jaWFsU2VydmljZUlkczogc29jaWFsU2VydmljZUlkc30pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5nZXRTY2hlZHVsZWRQb3N0Q291bnQocmVxKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UsXG4gIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3QsXG4gIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlLFxuICBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxufSBmcm9tICcuL19pbnRlcm5hbC9vYmplY3RzL2FwaSc7XG5pbXBvcnQgeyBNdWx0aWxvY2F0aW9uUG9zdEFwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9tdWx0aWxvY2F0aW9uLXBvc3QuYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9maWVsZC1tYXNrJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9tdWx0aWxvY2F0aW9uLXBvc3QnO1xuaW1wb3J0IHsgUmVtb3ZlUmVhc29uIH0gZnJvbSAnLi9faW50ZXJuYWwvZW51bXMvbXVsdGlsb2NhdGlvbi1wb3N0LmVudW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXVsdGlsb2NhdGlvblBvc3RzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbXVsdGlsb2NhdGlvbkFwaVNlcnZpY2U6IE11bHRpbG9jYXRpb25Qb3N0QXBpU2VydmljZSkge1xuICB9XG5cbiAgY3JlYXRlTXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIG1lZGlhOiBzdHJpbmdbXSwgZ2lmczogc3RyaW5nW10sIHZpZGVvczogc3RyaW5nW10sIHNjaGVkdWxlZERhdGU6IERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uczogTG9jYXRpb25bXSk6IE9ic2VydmFibGU8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBnaWZzOiBnaWZzLFxuICAgICAgdmlkZW9zOiB2aWRlb3MsXG4gICAgICBzY2hlZHVsZWREYXRlOiBzY2hlZHVsZWREYXRlLFxuICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5jcmVhdGVNdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG5cbiAgZWRpdE11bHRpbG9jYXRpb25Qb3N0KGJyYW5kSWQ6IHN0cmluZywgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgbWVkaWE6IHN0cmluZ1tdLCBnaWZzOiBzdHJpbmdbXSwgdmlkZW9zOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZERhdGU6IERhdGUsIGxvY2F0aW9uczogTG9jYXRpb25bXSwgZmllbGRNYXNrOiBGaWVsZE1hc2spOiBPYnNlcnZhYmxlPEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkLFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIGdpZnM6IGdpZnMsXG4gICAgICB2aWRlb3M6IHZpZGVvcyxcbiAgICAgIHNjaGVkdWxlZERhdGU6IHNjaGVkdWxlZERhdGUsXG4gICAgICBsb2NhdGlvbnM6IGxvY2F0aW9ucyxcbiAgICAgIGZpZWxkTWFzazogZmllbGRNYXNrXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlsb2NhdGlvbkFwaVNlcnZpY2UuZWRpdE11bHRpbG9jYXRpb25Qb3N0KHJlcSk7XG4gIH1cblxuICByZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3QocmVhc29uOiBSZW1vdmVSZWFzb24sIGJyYW5kSWQ6IHN0cmluZywgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnM6IExvY2F0aW9uW10pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHtcbiAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkLFxuICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5yZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3QocmVxKTtcbiAgfVxuXG4gIGxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZChicmFuZElkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgY3Vyc29yOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0KHtcbiAgICAgIGJyYW5kSWQ6IGJyYW5kSWQsXG4gICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGU6IGVuZERhdGUsXG4gICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm11bHRpbG9jYXRpb25BcGlTZXJ2aWNlLmxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZChyZXEpO1xuICB9XG5cbiAgZGVsZXRlTXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCh7XG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgbXVsdGlsb2NhdGlvbklkOiBtdWx0aWxvY2F0aW9uSWRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5kZWxldGVNdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG5cbiAgZ2V0TXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlsb2NhdGlvbkFwaVNlcnZpY2UuZ2V0TXVsdGlsb2NhdGlvblBvc3QocmVxKTtcbiAgfVxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW4gLSBlZGl0ZWQgYnkgeW91IVxuLy9cbi8vIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGFueSBoYW5kLXdyaXR0ZW4gc2VydmljZXMgb3Igb3RoZXIgdGhpbmdzIHlvdXIgbW9kdWxlXG4vLyBuZWVkcyB0byBzaGFyZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBpdC5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlTW9kdWxlLCBFbnZpcm9ubWVudFNlcnZpY2VNb2R1bGUgfSBmcm9tICdAdmVuZGFzdGEvY29yZSc7XG5pbXBvcnQgeyBIb3N0U2VydmljZSB9IGZyb20gJy4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9zdFRlbXBsYXRlc0FwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9wb3N0LXRlbXBsYXRlcy5hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0c0FwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9zb2NpYWwtcG9zdHMuYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlsb2NhdGlvblBvc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvbXVsdGlsb2NhdGlvbi1wb3N0LmFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhcnRuZXJTb2NpYWxQb3N0c0FwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9wYXJ0bmVyLXNvY2lhbC1wb3N0cy5hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBQb3N0VGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4vcG9zdC10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0c1NlcnZpY2UgfSBmcm9tICcuL3NvY2lhbC1wb3N0cy5zZXJ2aWNlJztcbmltcG9ydCB7IE11bHRpbG9jYXRpb25Qb3N0c1NlcnZpY2UgfSBmcm9tICcuL211bHRpbG9jYXRpb24tcG9zdHMuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtTZXNzaW9uU2VydmljZU1vZHVsZSwgRW52aXJvbm1lbnRTZXJ2aWNlTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTXVsdGlsb2NhdGlvblBvc3RBcGlTZXJ2aWNlLFxuICAgIFBhcnRuZXJTb2NpYWxQb3N0c0FwaVNlcnZpY2UsXG4gICAgUG9zdFRlbXBsYXRlc0FwaVNlcnZpY2UsXG4gICAgU29jaWFsUG9zdHNBcGlTZXJ2aWNlLFxuICAgIEhvc3RTZXJ2aWNlLFxuICAgIFBvc3RUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIFNvY2lhbFBvc3RzU2VydmljZSxcbiAgICBNdWx0aWxvY2F0aW9uUG9zdHNTZXJ2aWNlXG4gIF0sXG4gIGV4cG9ydHM6IFtdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNvY2lhbFBvc3RzTW9kdWxlIHt9XG4iXSwibmFtZXMiOlsiRW52aXJvbm1lbnQiLCJJbmplY3RhYmxlIiwiRW52aXJvbm1lbnRTZXJ2aWNlIiwiZS5DYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlIiwiZS5Tb2NpYWxQb3N0RGVsZXRpb25TdGF0dXMiLCJlLlNvY2lhbFBvc3RTZXJ2aWNlIiwiZS5Qb3N0aW5nU3RhdHVzIiwiZW51bVN0cmluZ1RvVmFsdWUiLCJlLlJlbW92ZVJlYXNvbiIsIkh0dHBIZWFkZXJzIiwibWFwIiwic2hhcmUiLCJIdHRwQ2xpZW50Iiwib2YiLCJOZ01vZHVsZSIsIlNlc3Npb25TZXJ2aWNlTW9kdWxlIiwiRW52aXJvbm1lbnRTZXJ2aWNlTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7UUFRSSxxQkFBb0Isa0JBQXNDO1lBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7U0FDekQ7Ozs7UUFFRCwwQkFBSTs7O1lBQUo7Z0JBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDckI7Z0JBRUQsUUFBUSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFO29CQUM1QyxLQUFLQSxjQUFXLENBQUMsS0FBSzt3QkFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxnQ0FBZ0MsQ0FBQzt3QkFDOUMsTUFBTTtvQkFDVixLQUFLQSxjQUFXLENBQUMsSUFBSTt3QkFDakIsSUFBSSxDQUFDLEtBQUssR0FB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