@bryntum/gantt-angular-thin 7.1.1

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 (28) hide show
  1. package/README.md +44 -0
  2. package/bryntum-gantt-angular-thin.d.ts +5 -0
  3. package/bundles/bryntum-gantt-angular-thin.umd.js +14832 -0
  4. package/bundles/bryntum-gantt-angular-thin.umd.js.map +1 -0
  5. package/esm2015/bryntum-gantt-angular-thin.js +5 -0
  6. package/esm2015/lib/bryntum-assignment-field.component.js +941 -0
  7. package/esm2015/lib/bryntum-assignment-grid.component.js +2111 -0
  8. package/esm2015/lib/bryntum-calendar-picker.component.js +933 -0
  9. package/esm2015/lib/bryntum-dependency-field.component.js +961 -0
  10. package/esm2015/lib/bryntum-gantt-base.component.js +4219 -0
  11. package/esm2015/lib/bryntum-gantt-project-model.component.js +923 -0
  12. package/esm2015/lib/bryntum-gantt.component.js +4223 -0
  13. package/esm2015/lib/gantt.module.js +54 -0
  14. package/esm2015/lib/wrapper.helper.js +74 -0
  15. package/esm2015/public-api.js +12 -0
  16. package/fesm2015/bryntum-gantt-angular-thin.js +14387 -0
  17. package/fesm2015/bryntum-gantt-angular-thin.js.map +1 -0
  18. package/lib/bryntum-assignment-field.component.d.ts +1225 -0
  19. package/lib/bryntum-assignment-grid.component.d.ts +2292 -0
  20. package/lib/bryntum-calendar-picker.component.d.ts +1200 -0
  21. package/lib/bryntum-dependency-field.component.d.ts +1241 -0
  22. package/lib/bryntum-gantt-base.component.d.ts +4468 -0
  23. package/lib/bryntum-gantt-project-model.component.d.ts +1106 -0
  24. package/lib/bryntum-gantt.component.d.ts +4470 -0
  25. package/lib/gantt.module.d.ts +13 -0
  26. package/lib/wrapper.helper.d.ts +26 -0
  27. package/package.json +33 -0
  28. package/public-api.d.ts +8 -0
@@ -0,0 +1,923 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum ProjectModel
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { ProjectModel } from '@bryntum/gantt-thin';
8
+ import * as i0 from "@angular/core";
9
+ export class BryntumGanttProjectModelComponent {
10
+ constructor(element) {
11
+ this.bryntumConfig = {
12
+ adopt: undefined,
13
+ appendTo: undefined,
14
+ href: undefined,
15
+ angularComponent: this,
16
+ features: {},
17
+ listeners: {}
18
+ };
19
+ // Events emitters
20
+ /**
21
+ * Fires before an object is destroyed.
22
+ * @param {object} event Event object
23
+ * @param {Core.Base} event.source The Object that is being destroyed.
24
+ */
25
+ this.onBeforeDestroy = new EventEmitter();
26
+ /**
27
+ * Fires before [load request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) is sent. Return `false` to cancel load request.
28
+ * @param {object} event Event object
29
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
30
+ * @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
31
+ */
32
+ this.onBeforeLoad = new EventEmitter();
33
+ /**
34
+ * Fires before loaded data get applied to the stores. Return `false` to prevent data applying.
35
+ * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
36
+ * @param {object} event Event object
37
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
38
+ * @param {object} event.response The decoded server response object.
39
+ * @param {object} event.options Options provided to the [load](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) method.
40
+ */
41
+ this.onBeforeLoadApply = new EventEmitter();
42
+ /**
43
+ * Fires before server response gets applied to the stores. Return `false` to prevent data applying.
44
+ * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
45
+ * @param {object} event Event object
46
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
47
+ * @param {'sync','load'} event.requestType The request type (`sync` or `load`).
48
+ * @param {object} event.response The decoded server response object.
49
+ */
50
+ this.onBeforeResponseApply = new EventEmitter();
51
+ /**
52
+ * Fires before a request is sent to the server.
53
+ * ...
54
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-beforeSend)
55
+ * @param {object} event Event object
56
+ * @param {Scheduler.crud.AbstractCrudManager} event.crudManager The CRUD manager.
57
+ * @param {object} event.params HTTP request params to be passed in the request URL.
58
+ * @param {'sync','load'} event.requestType CrudManager request type (`load`/`sync`)
59
+ * @param {object} event.requestConfig Configuration object for Ajax request call
60
+ */
61
+ this.onBeforeSend = new EventEmitter();
62
+ /**
63
+ * Fires before [sync request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) is sent. Return `false` to cancel sync request.
64
+ * ...
65
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-beforeSync)
66
+ * @param {object} event Event object
67
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
68
+ * @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
69
+ */
70
+ this.onBeforeSync = new EventEmitter();
71
+ /**
72
+ * Fires before sync response data get applied to the stores. Return `false` to prevent data applying.
73
+ * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
74
+ * @param {object} event Event object
75
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
76
+ * @param {object} event.response The decoded server response object.
77
+ */
78
+ this.onBeforeSyncApply = new EventEmitter();
79
+ /**
80
+ * Fires when any other event is fired from the object.
81
+ * ...
82
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-catchAll)
83
+ * @param {object} event Event object
84
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
85
+ * @param {string} event.event.type The type of the event which is caught by the listener
86
+ */
87
+ this.onCatchAll = new EventEmitter();
88
+ /**
89
+ * Fired when data in any of the projects stores changes.
90
+ * ...
91
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-change)
92
+ * @param {object} event Event object
93
+ * @param {Gantt.model.ProjectModel} event.source This project
94
+ * @param {Core.data.Store} event.store Affected store
95
+ * @param {'remove','removeAll','add','clearchanges','filter','update','dataset','replace'} event.action Name of action which triggered the change. May be one of the options listed above.
96
+ * @param {Core.data.Model} event.record Changed record, for actions that affects exactly one record (`'update'`)
97
+ * @param {Core.data.Model[]} event.records Changed records, passed for all actions except `'removeAll'`
98
+ * @param {object} event.changes Passed for the `'update'` action, info on which record fields changed
99
+ */
100
+ this.onChange = new EventEmitter();
101
+ /**
102
+ * Fired when the Engine detects a computation cycle.
103
+ * @param {object} event Event object
104
+ * @param {object} event.schedulingIssue Scheduling error describing the case:
105
+ * @param {Function} event.schedulingIssue.getDescription Returns the cycle description
106
+ * @param {object} event.schedulingIssue.cycle Object providing the cycle info
107
+ * @param {Function} event.schedulingIssue.getResolutions Returns possible resolutions
108
+ * @param {Function} event.continueWithResolutionResult Function to call after a resolution is chosen to proceed with the Engine calculations: ```javascript project.on('cycle', ({ continueWithResolutionResult }) => { // cancel changes in case of a cycle continueWithResolutionResult(EffectResolutionResult.Cancel); }) ``` Where `EffectResolutionResult.Cancel` results in cancelling the changes.
109
+ */
110
+ this.onCycle = new EventEmitter();
111
+ /**
112
+ * Fired when the engine has finished its calculations and the results has been written back to the records.
113
+ * ...
114
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-dataReady)
115
+ * @param {object} event Event object
116
+ * @param {Gantt.model.ProjectModel} event.source The project
117
+ * @param {boolean} event.isInitialCommit Flag that shows if this commit is initial
118
+ * @param {Set<any>} event.records Set of all [Model](https://bryntum.com/products/gantt/docs/api/Core/data/Model)s that were modified in the completed transaction. Use the [modifications](https://bryntum.com/products/gantt/docs/api/Core/data/Model#property-modifications) property of each Model to identify modified fields.
119
+ */
120
+ this.onDataReady = new EventEmitter();
121
+ /**
122
+ * Fires when an object is destroyed.
123
+ * @param {object} event Event object
124
+ * @param {Core.Base} event.source The Object that is being destroyed.
125
+ */
126
+ this.onDestroy = new EventEmitter();
127
+ /**
128
+ * Fired when the Engine detects a calendar misconfiguration when the calendar does
129
+ * not provide any working periods of time which makes usage impossible.
130
+ * @param {object} event Event object
131
+ * @param {object} event.schedulingIssue Scheduling error describing the case:
132
+ * @param {Function} event.schedulingIssue.getDescription Returns the error description
133
+ * @param {Function} event.schedulingIssue.getCalendar Returns the calendar that must be fixed
134
+ * @param {Function} event.schedulingIssue.getResolutions Returns possible resolutions
135
+ * @param {Function} event.continueWithResolutionResult Function to call after a resolution is chosen to proceed with the Engine calculations: ```javascript project.on('emptyCalendar', ({ schedulingIssue, continueWithResolutionResult }) => { // apply the first resolution and continue schedulingIssue.getResolutions()[0].resolve(); continueWithResolutionResult(EffectResolutionResult.Resume); }) ```
136
+ */
137
+ this.onEmptyCalendar = new EventEmitter();
138
+ /**
139
+ * Fires when data in any of the registered data stores is changed.
140
+ * ...
141
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-hasChanges)
142
+ * @param {object} event Event object
143
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
144
+ */
145
+ this.onHasChanges = new EventEmitter();
146
+ /**
147
+ * Fires on successful [load request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) completion after data gets loaded to the stores.
148
+ * @param {object} event Event object
149
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
150
+ * @param {object} event.response The decoded server response object.
151
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
152
+ * @param {object} event.requestOptions The request options passed to the request.
153
+ * @param {Response} event.rawResponse The native Response object
154
+ */
155
+ this.onLoad = new EventEmitter();
156
+ /**
157
+ * Fired after [load request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) was canceled by some [beforeLoad](#Scheduler/crud/AbstractCrudManagerMixin#event-beforeLoad)
158
+ * listener or due to incomplete prior load request.
159
+ * @param {object} event Event object
160
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
161
+ * @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
162
+ */
163
+ this.onLoadCanceled = new EventEmitter();
164
+ /**
165
+ * Fires when a [load request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) fails.
166
+ * @param {object} event Event object
167
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
168
+ * @param {object} event.response The decoded server response object.
169
+ * @param {string} event.responseText The raw server response text
170
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
171
+ * @param {object} event.requestOptions The request options passed to the request.
172
+ * @param {Response} event.rawResponse The native Response object
173
+ */
174
+ this.onLoadFail = new EventEmitter();
175
+ /**
176
+ * Fires when registered stores get into state when they don't have any
177
+ * not persisted change. This happens after [load](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-load) or [sync](#Scheduler/crud/AbstractCrudManagerMixin#function-sync) request
178
+ * completion. Or this may happen after a record update which turns its fields back to their original state.
179
+ * ...
180
+ * [View online docs...](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#event-noChanges)
181
+ * @param {object} event Event object
182
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
183
+ */
184
+ this.onNoChanges = new EventEmitter();
185
+ /**
186
+ * Fired during the Engine calculation if [enableProgressNotifications](https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#config-enableProgressNotifications) config is `true`
187
+ * @param {object} event Event object
188
+ * @param {Gantt.model.ProjectModel} event.source The owning project
189
+ * @param {number} event.total The total number of operations
190
+ * @param {number} event.remaining The number of remaining operations
191
+ * @param {'storePopulation','propagating'} event.phase The phase of the calculation, either 'storePopulation' when data is getting loaded, or 'propagating' when data is getting calculated
192
+ */
193
+ this.onProgress = new EventEmitter();
194
+ /**
195
+ * Fires on successful request completion after data gets applied to the stores.
196
+ * @param {object} event Event object
197
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
198
+ * @param {'sync','load'} event.requestType The request type (`sync` or `load`).
199
+ * @param {object} event.response The decoded server response object.
200
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
201
+ * @param {object} event.requestOptions The request options passed to the request.
202
+ * @param {Response} event.rawResponse The native Response object
203
+ */
204
+ this.onRequestDone = new EventEmitter();
205
+ /**
206
+ * Fires when a request fails.
207
+ * @param {object} event Event object
208
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
209
+ * @param {'sync','load'} event.requestType The request type (`sync` or `load`).
210
+ * @param {object} event.response The decoded server response object.
211
+ * @param {string} event.responseText The raw server response text
212
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
213
+ * @param {object} event.requestOptions The request options passed to the request.
214
+ * @param {Response} event.rawResponse The native Response object
215
+ */
216
+ this.onRequestFail = new EventEmitter();
217
+ /**
218
+ * This event triggers when a new revision is added to the project. It is used to notify the backend about the
219
+ * new revision.
220
+ * @param {object} event Event object
221
+ * @param {string} event.localRevisionId ID of the local revision. Backend should send it in the broadcast channel
222
+ * @param {string} event.conflictResolutionFor ID of the revision with a conflict which was resolved by this revision
223
+ * @param {string} event.clientId ID of the client instance. Used to distinguish own revisions from the broadcast channel
224
+ * @param {object} event.changes Object with changes constituting revision
225
+ */
226
+ this.onRevisionNotification = new EventEmitter();
227
+ /**
228
+ * Fired when the Engine detects a scheduling conflict.
229
+ * @param {object} event Event object
230
+ * @param {object} event.schedulingIssue The conflict details:
231
+ * @param {Function} event.schedulingIssue.getDescription Returns the conflict description
232
+ * @param {object[]} event.schedulingIssue.intervals Array of conflicting intervals
233
+ * @param {Function} event.schedulingIssue.getResolutions Function to get possible resolutions
234
+ * @param {Function} event.continueWithResolutionResult Function to call after a resolution is chosen to proceed with the Engine calculations: ```javascript project.on('schedulingConflict', ({ schedulingIssue, continueWithResolutionResult }) => { // apply the first resolution and continue schedulingIssue.getResolutions()[0].resolve(); continueWithResolutionResult(EffectResolutionResult.Resume); }) ``` Where `EffectResolutionResult.Resume` results in a resolution being applied and current transaction should be continued.
235
+ */
236
+ this.onSchedulingConflict = new EventEmitter();
237
+ /**
238
+ * Fires on successful [sync request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) completion.
239
+ * @param {object} event Event object
240
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
241
+ * @param {object} event.response The decoded server response object.
242
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
243
+ * @param {object} event.requestOptions The request options passed to the request.
244
+ * @param {Response} event.rawResponse The native Response object
245
+ */
246
+ this.onSync = new EventEmitter();
247
+ /**
248
+ * Fires after [sync request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) was canceled by some [beforeSync](#Scheduler/crud/AbstractCrudManagerMixin#event-beforeSync) listener.
249
+ * @param {object} event Event object
250
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
251
+ * @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
252
+ */
253
+ this.onSyncCanceled = new EventEmitter();
254
+ /**
255
+ * Fires after [sync request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) was delayed due to incomplete previous one.
256
+ * @param {object} event Event object
257
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
258
+ * @param {object} event.arguments The arguments of [sync](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) call.
259
+ */
260
+ this.onSyncDelayed = new EventEmitter();
261
+ /**
262
+ * Fires when a [sync request](https://bryntum.com/products/gantt/docs/api/Scheduler/crud/AbstractCrudManagerMixin#function-sync) fails.
263
+ * @param {object} event Event object
264
+ * @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
265
+ * @param {object} event.response The decoded server response object.
266
+ * @param {string} event.responseText The raw server response text
267
+ * @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
268
+ * @param {object} event.requestOptions The request options passed to the request.
269
+ * @param {Response} event.rawResponse The native Response object
270
+ */
271
+ this.onSyncFail = new EventEmitter();
272
+ this.elementRef = element;
273
+ }
274
+ /**
275
+ * Create and append the underlying widget
276
+ */
277
+ ngOnInit() {
278
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumGanttProjectModelComponent;
279
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
280
+ // @ts-ignore
281
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
282
+ if (['features', 'config'].includes(prop)) {
283
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
284
+ }
285
+ });
286
+ // @ts-ignore
287
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
288
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
289
+ // @ts-ignore
290
+ bryntumConfig.listeners[eventName(event)] = e => {
291
+ // @ts-ignore
292
+ me[event].emit(e);
293
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
294
+ // in Angular listeners
295
+ return e.returnValue;
296
+ };
297
+ });
298
+ // If component has no container specified in config then use adopt to Wrapper's element
299
+ const containerParam = [
300
+ 'adopt',
301
+ 'appendTo',
302
+ 'insertAfter',
303
+ 'insertBefore'
304
+ // @ts-ignore
305
+ ].find(prop => bryntumConfig[prop]);
306
+ if (!containerParam) {
307
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
308
+ // Button should always be <a> or <button> inside owner element
309
+ bryntumConfig.appendTo = elementRef.nativeElement;
310
+ }
311
+ else {
312
+ bryntumConfig.adopt = elementRef.nativeElement;
313
+ }
314
+ }
315
+ else {
316
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
317
+ }
318
+ // @ts-ignore
319
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
320
+ }
321
+ /**
322
+ * Watch for changes
323
+ * @param changes
324
+ */
325
+ ngOnChanges(changes) {
326
+ const { instance } = this, { instanceName } = BryntumGanttProjectModelComponent;
327
+ if (!instance) {
328
+ return;
329
+ }
330
+ // Iterate over all changes
331
+ Object.entries(changes).forEach(([prop, change]) => {
332
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumGanttProjectModelComponent;
333
+ if (bryntumProps.includes(prop)) {
334
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
335
+ if (bryntumConfigsOnly.includes(prop)) {
336
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
337
+ }
338
+ }
339
+ });
340
+ }
341
+ /**
342
+ * Destroy the component
343
+ */
344
+ ngOnDestroy() {
345
+ // @ts-ignore
346
+ if (this.instance && this.instance.destroy) {
347
+ this.instance.destroy();
348
+ }
349
+ }
350
+ }
351
+ BryntumGanttProjectModelComponent.instanceClass = ProjectModel;
352
+ BryntumGanttProjectModelComponent.instanceName = 'ProjectModel';
353
+ BryntumGanttProjectModelComponent.bryntumEvents = [
354
+ 'onBeforeDestroy',
355
+ 'onBeforeLoad',
356
+ 'onBeforeLoadApply',
357
+ 'onBeforeResponseApply',
358
+ 'onBeforeSend',
359
+ 'onBeforeSync',
360
+ 'onBeforeSyncApply',
361
+ 'onCatchAll',
362
+ 'onChange',
363
+ 'onCycle',
364
+ 'onDataReady',
365
+ 'onDestroy',
366
+ 'onEmptyCalendar',
367
+ 'onHasChanges',
368
+ 'onLoad',
369
+ 'onLoadCanceled',
370
+ 'onLoadFail',
371
+ 'onNoChanges',
372
+ 'onProgress',
373
+ 'onRequestDone',
374
+ 'onRequestFail',
375
+ 'onRevisionNotification',
376
+ 'onSchedulingConflict',
377
+ 'onSync',
378
+ 'onSyncCanceled',
379
+ 'onSyncDelayed',
380
+ 'onSyncFail'
381
+ ];
382
+ BryntumGanttProjectModelComponent.bryntumFeatureNames = [];
383
+ BryntumGanttProjectModelComponent.bryntumConfigs = BryntumGanttProjectModelComponent.bryntumFeatureNames.concat([
384
+ 'addConstraintOnDateSet',
385
+ 'adjustDurationToDST',
386
+ 'allowPostponedConflicts',
387
+ 'assignmentModelClass',
388
+ 'assignments',
389
+ 'assignmentsData',
390
+ 'assignmentStore',
391
+ 'assignmentStoreClass',
392
+ 'autoCalculatePercentDoneForParentTasks',
393
+ 'autoLoad',
394
+ 'autoMergeAdjacentSegments',
395
+ 'autoPostponeConflicts',
396
+ 'autoPostponedConflicts',
397
+ 'autoScheduleManualTasksOnSecondPass',
398
+ 'autoSetConstraints',
399
+ 'autoSync',
400
+ 'autoSyncTimeout',
401
+ 'bubbleEvents',
402
+ 'bwcConflictPostpone',
403
+ 'calendar',
404
+ 'calendarManagerStore',
405
+ 'calendarManagerStoreClass',
406
+ 'calendarModelClass',
407
+ 'calendars',
408
+ 'calendarsData',
409
+ 'callOnFunctions',
410
+ 'catchEventHandlerExceptions',
411
+ 'children',
412
+ 'crudStores',
413
+ 'daysPerMonth',
414
+ 'daysPerWeek',
415
+ 'delayCalculation',
416
+ 'dependencies',
417
+ 'dependenciesCalendar',
418
+ 'dependenciesData',
419
+ 'dependencyModelClass',
420
+ 'dependencyStore',
421
+ 'dependencyStoreClass',
422
+ 'description',
423
+ 'direction',
424
+ 'enableProgressNotifications',
425
+ 'encoder',
426
+ 'endDate',
427
+ 'eventsData',
428
+ 'eventStore',
429
+ 'expanded',
430
+ 'forceSync',
431
+ 'hoursPerDay',
432
+ 'id',
433
+ 'ignoreConstraintsOnConflictDuringSecondPass',
434
+ 'ignoreRemoteChangesInSTM',
435
+ 'includeAsapAlapAsConstraints',
436
+ 'includeChildrenInRemoveRequest',
437
+ 'includeLegacyDataProperties',
438
+ 'isFullyLoaded',
439
+ 'json',
440
+ 'lazyLoad',
441
+ 'listeners',
442
+ 'loadUrl',
443
+ 'maxCalendarRange',
444
+ 'maxCriticalPathsCount',
445
+ 'name',
446
+ 'orderedParentIndex',
447
+ 'pageSize',
448
+ 'parentId',
449
+ 'parentIndex',
450
+ 'phantomIdField',
451
+ 'phantomParentIdField',
452
+ 'readOnly',
453
+ 'remoteChildCount',
454
+ 'remotePaging',
455
+ 'requestData',
456
+ 'resetIdsBeforeSync',
457
+ 'resetUndoRedoQueuesAfterLoad',
458
+ 'resourceModelClass',
459
+ 'resources',
460
+ 'resourcesData',
461
+ 'resourceStore',
462
+ 'resourceStoreClass',
463
+ 'shouldSyncDataOnLoad',
464
+ 'silenceInitialCommit',
465
+ 'skipNonWorkingTimeInDurationWhenSchedulingManually',
466
+ 'skipNonWorkingTimeWhenSchedulingManually',
467
+ 'skipSuccessProperty',
468
+ 'startDate',
469
+ 'startedTaskScheduling',
470
+ 'statusDate',
471
+ 'stm',
472
+ 'storeIdProperty',
473
+ 'supportShortSyncResponse',
474
+ 'syncApplySequence',
475
+ 'syncUrl',
476
+ 'taskModelClass',
477
+ 'tasks',
478
+ 'tasksData',
479
+ 'taskStore',
480
+ 'taskStoreClass',
481
+ 'timeRanges',
482
+ 'timeRangesData',
483
+ 'timeRangeStore',
484
+ 'timeZone',
485
+ 'toJSONResultFormat',
486
+ 'trackProjectModelChanges',
487
+ 'trackResponseType',
488
+ 'transport',
489
+ 'useRawData',
490
+ 'validateResponse',
491
+ 'writeAllFields'
492
+ ]);
493
+ BryntumGanttProjectModelComponent.bryntumConfigsOnly = [
494
+ 'adjustDurationToDST',
495
+ 'assignmentModelClass',
496
+ 'assignmentsData',
497
+ 'assignmentStoreClass',
498
+ 'autoLoad',
499
+ 'autoSetConstraints',
500
+ 'autoSync',
501
+ 'autoSyncTimeout',
502
+ 'bubbleEvents',
503
+ 'bwcConflictPostpone',
504
+ 'calendarManagerStoreClass',
505
+ 'calendarModelClass',
506
+ 'calendarsData',
507
+ 'children',
508
+ 'delayCalculation',
509
+ 'dependenciesData',
510
+ 'dependencyModelClass',
511
+ 'dependencyStoreClass',
512
+ 'encoder',
513
+ 'eventsData',
514
+ 'expanded',
515
+ 'includeAsapAlapAsConstraints',
516
+ 'includeChildrenInRemoveRequest',
517
+ 'listeners',
518
+ 'maxCalendarRange',
519
+ 'orderedParentIndex',
520
+ 'pageSize',
521
+ 'parentIndex',
522
+ 'phantomIdField',
523
+ 'phantomParentIdField',
524
+ 'remotePaging',
525
+ 'requestData',
526
+ 'resetIdsBeforeSync',
527
+ 'resetUndoRedoQueuesAfterLoad',
528
+ 'resourceModelClass',
529
+ 'resourcesData',
530
+ 'resourceStoreClass',
531
+ 'silenceInitialCommit',
532
+ 'skipSuccessProperty',
533
+ 'storeIdProperty',
534
+ 'supportShortSyncResponse',
535
+ 'taskModelClass',
536
+ 'tasksData',
537
+ 'taskStoreClass',
538
+ 'timeRangesData',
539
+ 'toJSONResultFormat',
540
+ 'trackResponseType',
541
+ 'transport',
542
+ 'useRawData',
543
+ 'validateResponse',
544
+ 'writeAllFields'
545
+ ];
546
+ BryntumGanttProjectModelComponent.bryntumProps = BryntumGanttProjectModelComponent.bryntumFeatureNames.concat([
547
+ 'addConstraintOnDateSet',
548
+ 'allChildren',
549
+ 'allowPostponedConflicts',
550
+ 'allUnfilteredChildren',
551
+ 'assignments',
552
+ 'assignmentStore',
553
+ 'autoCalculatePercentDoneForParentTasks',
554
+ 'autoMergeAdjacentSegments',
555
+ 'autoPostponeConflicts',
556
+ 'autoPostponedConflicts',
557
+ 'autoScheduleManualTasksOnSecondPass',
558
+ 'calendar',
559
+ 'calendarManagerStore',
560
+ 'calendars',
561
+ 'callOnFunctions',
562
+ 'catchEventHandlerExceptions',
563
+ 'criticalPaths',
564
+ 'crudStores',
565
+ 'daysPerMonth',
566
+ 'daysPerWeek',
567
+ 'dependencies',
568
+ 'dependenciesCalendar',
569
+ 'dependencyStore',
570
+ 'descendantCount',
571
+ 'description',
572
+ 'direction',
573
+ 'enableProgressNotifications',
574
+ 'endDate',
575
+ 'eventStore',
576
+ 'forceSync',
577
+ 'hasGeneratedId',
578
+ 'hoursPerDay',
579
+ 'id',
580
+ 'ignoreConstraintsOnConflictDuringSecondPass',
581
+ 'ignoreRemoteChangesInSTM',
582
+ 'includeLegacyDataProperties',
583
+ 'inlineData',
584
+ 'internalId',
585
+ 'isCommitting',
586
+ 'isCreating',
587
+ 'isFullyLoaded',
588
+ 'isValid',
589
+ 'json',
590
+ 'lazyLoad',
591
+ 'loadUrl',
592
+ 'maxCriticalPathsCount',
593
+ 'name',
594
+ 'parentId',
595
+ 'previousSiblingsTotalCount',
596
+ 'readOnly',
597
+ 'remoteChildCount',
598
+ 'resources',
599
+ 'resourceStore',
600
+ 'segmentModelClass',
601
+ 'shouldSyncDataOnLoad',
602
+ 'skipNonWorkingTimeInDurationWhenSchedulingManually',
603
+ 'skipNonWorkingTimeWhenSchedulingManually',
604
+ 'startDate',
605
+ 'startedTaskScheduling',
606
+ 'statusDate',
607
+ 'stm',
608
+ 'syncApplySequence',
609
+ 'syncUrl',
610
+ 'tasks',
611
+ 'taskStore',
612
+ 'timeRanges',
613
+ 'timeRangeStore',
614
+ 'timeZone',
615
+ 'trackProjectModelChanges',
616
+ 'visibleDescendantCount'
617
+ ]);
618
+ BryntumGanttProjectModelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGanttProjectModelComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
619
+ BryntumGanttProjectModelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGanttProjectModelComponent, selector: "bryntum-gantt-project-model", inputs: { adjustDurationToDST: "adjustDurationToDST", assignmentModelClass: "assignmentModelClass", assignmentsData: "assignmentsData", assignmentStoreClass: "assignmentStoreClass", autoLoad: "autoLoad", autoSetConstraints: "autoSetConstraints", autoSync: "autoSync", autoSyncTimeout: "autoSyncTimeout", bubbleEvents: "bubbleEvents", bwcConflictPostpone: "bwcConflictPostpone", calendarManagerStoreClass: "calendarManagerStoreClass", calendarModelClass: "calendarModelClass", calendarsData: "calendarsData", children: "children", delayCalculation: "delayCalculation", dependenciesData: "dependenciesData", dependencyModelClass: "dependencyModelClass", dependencyStoreClass: "dependencyStoreClass", encoder: "encoder", eventsData: "eventsData", expanded: "expanded", includeAsapAlapAsConstraints: "includeAsapAlapAsConstraints", includeChildrenInRemoveRequest: "includeChildrenInRemoveRequest", listeners: "listeners", maxCalendarRange: "maxCalendarRange", orderedParentIndex: "orderedParentIndex", pageSize: "pageSize", parentIndex: "parentIndex", phantomIdField: "phantomIdField", phantomParentIdField: "phantomParentIdField", remotePaging: "remotePaging", requestData: "requestData", resetIdsBeforeSync: "resetIdsBeforeSync", resetUndoRedoQueuesAfterLoad: "resetUndoRedoQueuesAfterLoad", resourceModelClass: "resourceModelClass", resourcesData: "resourcesData", resourceStoreClass: "resourceStoreClass", silenceInitialCommit: "silenceInitialCommit", skipSuccessProperty: "skipSuccessProperty", storeIdProperty: "storeIdProperty", supportShortSyncResponse: "supportShortSyncResponse", taskModelClass: "taskModelClass", tasksData: "tasksData", taskStoreClass: "taskStoreClass", timeRangesData: "timeRangesData", toJSONResultFormat: "toJSONResultFormat", trackResponseType: "trackResponseType", transport: "transport", useRawData: "useRawData", validateResponse: "validateResponse", writeAllFields: "writeAllFields", addConstraintOnDateSet: "addConstraintOnDateSet", allowPostponedConflicts: "allowPostponedConflicts", assignments: "assignments", assignmentStore: "assignmentStore", autoCalculatePercentDoneForParentTasks: "autoCalculatePercentDoneForParentTasks", autoMergeAdjacentSegments: "autoMergeAdjacentSegments", autoPostponeConflicts: "autoPostponeConflicts", autoPostponedConflicts: "autoPostponedConflicts", autoScheduleManualTasksOnSecondPass: "autoScheduleManualTasksOnSecondPass", calendar: "calendar", calendarManagerStore: "calendarManagerStore", calendars: "calendars", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", crudStores: "crudStores", daysPerMonth: "daysPerMonth", daysPerWeek: "daysPerWeek", dependencies: "dependencies", dependenciesCalendar: "dependenciesCalendar", dependencyStore: "dependencyStore", description: "description", direction: "direction", enableProgressNotifications: "enableProgressNotifications", endDate: "endDate", eventStore: "eventStore", forceSync: "forceSync", hoursPerDay: "hoursPerDay", id: "id", ignoreConstraintsOnConflictDuringSecondPass: "ignoreConstraintsOnConflictDuringSecondPass", ignoreRemoteChangesInSTM: "ignoreRemoteChangesInSTM", includeLegacyDataProperties: "includeLegacyDataProperties", isFullyLoaded: "isFullyLoaded", json: "json", lazyLoad: "lazyLoad", loadUrl: "loadUrl", maxCriticalPathsCount: "maxCriticalPathsCount", name: "name", parentId: "parentId", readOnly: "readOnly", remoteChildCount: "remoteChildCount", resources: "resources", resourceStore: "resourceStore", shouldSyncDataOnLoad: "shouldSyncDataOnLoad", skipNonWorkingTimeInDurationWhenSchedulingManually: "skipNonWorkingTimeInDurationWhenSchedulingManually", skipNonWorkingTimeWhenSchedulingManually: "skipNonWorkingTimeWhenSchedulingManually", startDate: "startDate", startedTaskScheduling: "startedTaskScheduling", statusDate: "statusDate", stm: "stm", syncApplySequence: "syncApplySequence", syncUrl: "syncUrl", tasks: "tasks", taskStore: "taskStore", timeRanges: "timeRanges", timeRangeStore: "timeRangeStore", timeZone: "timeZone", trackProjectModelChanges: "trackProjectModelChanges", allChildren: "allChildren", allUnfilteredChildren: "allUnfilteredChildren", criticalPaths: "criticalPaths", descendantCount: "descendantCount", hasGeneratedId: "hasGeneratedId", inlineData: "inlineData", internalId: "internalId", isCommitting: "isCommitting", isCreating: "isCreating", isValid: "isValid", previousSiblingsTotalCount: "previousSiblingsTotalCount", segmentModelClass: "segmentModelClass", visibleDescendantCount: "visibleDescendantCount" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeLoad: "onBeforeLoad", onBeforeLoadApply: "onBeforeLoadApply", onBeforeResponseApply: "onBeforeResponseApply", onBeforeSend: "onBeforeSend", onBeforeSync: "onBeforeSync", onBeforeSyncApply: "onBeforeSyncApply", onCatchAll: "onCatchAll", onChange: "onChange", onCycle: "onCycle", onDataReady: "onDataReady", onDestroy: "onDestroy", onEmptyCalendar: "onEmptyCalendar", onHasChanges: "onHasChanges", onLoad: "onLoad", onLoadCanceled: "onLoadCanceled", onLoadFail: "onLoadFail", onNoChanges: "onNoChanges", onProgress: "onProgress", onRequestDone: "onRequestDone", onRequestFail: "onRequestFail", onRevisionNotification: "onRevisionNotification", onSchedulingConflict: "onSchedulingConflict", onSync: "onSync", onSyncCanceled: "onSyncCanceled", onSyncDelayed: "onSyncDelayed", onSyncFail: "onSyncFail" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
620
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGanttProjectModelComponent, decorators: [{
621
+ type: Component,
622
+ args: [{
623
+ selector: 'bryntum-gantt-project-model',
624
+ template: ''
625
+ }]
626
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adjustDurationToDST: [{
627
+ type: Input
628
+ }], assignmentModelClass: [{
629
+ type: Input
630
+ }], assignmentsData: [{
631
+ type: Input
632
+ }], assignmentStoreClass: [{
633
+ type: Input
634
+ }], autoLoad: [{
635
+ type: Input
636
+ }], autoSetConstraints: [{
637
+ type: Input
638
+ }], autoSync: [{
639
+ type: Input
640
+ }], autoSyncTimeout: [{
641
+ type: Input
642
+ }], bubbleEvents: [{
643
+ type: Input
644
+ }], bwcConflictPostpone: [{
645
+ type: Input
646
+ }], calendarManagerStoreClass: [{
647
+ type: Input
648
+ }], calendarModelClass: [{
649
+ type: Input
650
+ }], calendarsData: [{
651
+ type: Input
652
+ }], children: [{
653
+ type: Input
654
+ }], delayCalculation: [{
655
+ type: Input
656
+ }], dependenciesData: [{
657
+ type: Input
658
+ }], dependencyModelClass: [{
659
+ type: Input
660
+ }], dependencyStoreClass: [{
661
+ type: Input
662
+ }], encoder: [{
663
+ type: Input
664
+ }], eventsData: [{
665
+ type: Input
666
+ }], expanded: [{
667
+ type: Input
668
+ }], includeAsapAlapAsConstraints: [{
669
+ type: Input
670
+ }], includeChildrenInRemoveRequest: [{
671
+ type: Input
672
+ }], listeners: [{
673
+ type: Input
674
+ }], maxCalendarRange: [{
675
+ type: Input
676
+ }], orderedParentIndex: [{
677
+ type: Input
678
+ }], pageSize: [{
679
+ type: Input
680
+ }], parentIndex: [{
681
+ type: Input
682
+ }], phantomIdField: [{
683
+ type: Input
684
+ }], phantomParentIdField: [{
685
+ type: Input
686
+ }], remotePaging: [{
687
+ type: Input
688
+ }], requestData: [{
689
+ type: Input
690
+ }], resetIdsBeforeSync: [{
691
+ type: Input
692
+ }], resetUndoRedoQueuesAfterLoad: [{
693
+ type: Input
694
+ }], resourceModelClass: [{
695
+ type: Input
696
+ }], resourcesData: [{
697
+ type: Input
698
+ }], resourceStoreClass: [{
699
+ type: Input
700
+ }], silenceInitialCommit: [{
701
+ type: Input
702
+ }], skipSuccessProperty: [{
703
+ type: Input
704
+ }], storeIdProperty: [{
705
+ type: Input
706
+ }], supportShortSyncResponse: [{
707
+ type: Input
708
+ }], taskModelClass: [{
709
+ type: Input
710
+ }], tasksData: [{
711
+ type: Input
712
+ }], taskStoreClass: [{
713
+ type: Input
714
+ }], timeRangesData: [{
715
+ type: Input
716
+ }], toJSONResultFormat: [{
717
+ type: Input
718
+ }], trackResponseType: [{
719
+ type: Input
720
+ }], transport: [{
721
+ type: Input
722
+ }], useRawData: [{
723
+ type: Input
724
+ }], validateResponse: [{
725
+ type: Input
726
+ }], writeAllFields: [{
727
+ type: Input
728
+ }], addConstraintOnDateSet: [{
729
+ type: Input
730
+ }], allowPostponedConflicts: [{
731
+ type: Input
732
+ }], assignments: [{
733
+ type: Input
734
+ }], assignmentStore: [{
735
+ type: Input
736
+ }], autoCalculatePercentDoneForParentTasks: [{
737
+ type: Input
738
+ }], autoMergeAdjacentSegments: [{
739
+ type: Input
740
+ }], autoPostponeConflicts: [{
741
+ type: Input
742
+ }], autoPostponedConflicts: [{
743
+ type: Input
744
+ }], autoScheduleManualTasksOnSecondPass: [{
745
+ type: Input
746
+ }], calendar: [{
747
+ type: Input
748
+ }], calendarManagerStore: [{
749
+ type: Input
750
+ }], calendars: [{
751
+ type: Input
752
+ }], callOnFunctions: [{
753
+ type: Input
754
+ }], catchEventHandlerExceptions: [{
755
+ type: Input
756
+ }], crudStores: [{
757
+ type: Input
758
+ }], daysPerMonth: [{
759
+ type: Input
760
+ }], daysPerWeek: [{
761
+ type: Input
762
+ }], dependencies: [{
763
+ type: Input
764
+ }], dependenciesCalendar: [{
765
+ type: Input
766
+ }], dependencyStore: [{
767
+ type: Input
768
+ }], description: [{
769
+ type: Input
770
+ }], direction: [{
771
+ type: Input
772
+ }], enableProgressNotifications: [{
773
+ type: Input
774
+ }], endDate: [{
775
+ type: Input
776
+ }], eventStore: [{
777
+ type: Input
778
+ }], forceSync: [{
779
+ type: Input
780
+ }], hoursPerDay: [{
781
+ type: Input
782
+ }], id: [{
783
+ type: Input
784
+ }], ignoreConstraintsOnConflictDuringSecondPass: [{
785
+ type: Input
786
+ }], ignoreRemoteChangesInSTM: [{
787
+ type: Input
788
+ }], includeLegacyDataProperties: [{
789
+ type: Input
790
+ }], isFullyLoaded: [{
791
+ type: Input
792
+ }], json: [{
793
+ type: Input
794
+ }], lazyLoad: [{
795
+ type: Input
796
+ }], loadUrl: [{
797
+ type: Input
798
+ }], maxCriticalPathsCount: [{
799
+ type: Input
800
+ }], name: [{
801
+ type: Input
802
+ }], parentId: [{
803
+ type: Input
804
+ }], readOnly: [{
805
+ type: Input
806
+ }], remoteChildCount: [{
807
+ type: Input
808
+ }], resources: [{
809
+ type: Input
810
+ }], resourceStore: [{
811
+ type: Input
812
+ }], shouldSyncDataOnLoad: [{
813
+ type: Input
814
+ }], skipNonWorkingTimeInDurationWhenSchedulingManually: [{
815
+ type: Input
816
+ }], skipNonWorkingTimeWhenSchedulingManually: [{
817
+ type: Input
818
+ }], startDate: [{
819
+ type: Input
820
+ }], startedTaskScheduling: [{
821
+ type: Input
822
+ }], statusDate: [{
823
+ type: Input
824
+ }], stm: [{
825
+ type: Input
826
+ }], syncApplySequence: [{
827
+ type: Input
828
+ }], syncUrl: [{
829
+ type: Input
830
+ }], tasks: [{
831
+ type: Input
832
+ }], taskStore: [{
833
+ type: Input
834
+ }], timeRanges: [{
835
+ type: Input
836
+ }], timeRangeStore: [{
837
+ type: Input
838
+ }], timeZone: [{
839
+ type: Input
840
+ }], trackProjectModelChanges: [{
841
+ type: Input
842
+ }], allChildren: [{
843
+ type: Input
844
+ }], allUnfilteredChildren: [{
845
+ type: Input
846
+ }], criticalPaths: [{
847
+ type: Input
848
+ }], descendantCount: [{
849
+ type: Input
850
+ }], hasGeneratedId: [{
851
+ type: Input
852
+ }], inlineData: [{
853
+ type: Input
854
+ }], internalId: [{
855
+ type: Input
856
+ }], isCommitting: [{
857
+ type: Input
858
+ }], isCreating: [{
859
+ type: Input
860
+ }], isValid: [{
861
+ type: Input
862
+ }], previousSiblingsTotalCount: [{
863
+ type: Input
864
+ }], segmentModelClass: [{
865
+ type: Input
866
+ }], visibleDescendantCount: [{
867
+ type: Input
868
+ }], onBeforeDestroy: [{
869
+ type: Output
870
+ }], onBeforeLoad: [{
871
+ type: Output
872
+ }], onBeforeLoadApply: [{
873
+ type: Output
874
+ }], onBeforeResponseApply: [{
875
+ type: Output
876
+ }], onBeforeSend: [{
877
+ type: Output
878
+ }], onBeforeSync: [{
879
+ type: Output
880
+ }], onBeforeSyncApply: [{
881
+ type: Output
882
+ }], onCatchAll: [{
883
+ type: Output
884
+ }], onChange: [{
885
+ type: Output
886
+ }], onCycle: [{
887
+ type: Output
888
+ }], onDataReady: [{
889
+ type: Output
890
+ }], onDestroy: [{
891
+ type: Output
892
+ }], onEmptyCalendar: [{
893
+ type: Output
894
+ }], onHasChanges: [{
895
+ type: Output
896
+ }], onLoad: [{
897
+ type: Output
898
+ }], onLoadCanceled: [{
899
+ type: Output
900
+ }], onLoadFail: [{
901
+ type: Output
902
+ }], onNoChanges: [{
903
+ type: Output
904
+ }], onProgress: [{
905
+ type: Output
906
+ }], onRequestDone: [{
907
+ type: Output
908
+ }], onRequestFail: [{
909
+ type: Output
910
+ }], onRevisionNotification: [{
911
+ type: Output
912
+ }], onSchedulingConflict: [{
913
+ type: Output
914
+ }], onSync: [{
915
+ type: Output
916
+ }], onSyncCanceled: [{
917
+ type: Output
918
+ }], onSyncDelayed: [{
919
+ type: Output
920
+ }], onSyncFail: [{
921
+ type: Output
922
+ }] } });
923
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1nYW50dC1wcm9qZWN0LW1vZGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudC9zcmMvbGliL2JyeW50dW0tZ2FudHQtcHJvamVjdC1tb2RlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBQ3REOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0QsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFLN0MsT0FBTyxFQUF3UCxZQUFZLEVBQXlKLE1BQU0scUJBQXFCLENBQUM7O0FBMHFCaGMsTUFBTSxPQUFPLGlDQUFpQztJQWtTMUMsWUFBWSxPQUFtQjtRQVR2QixrQkFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBYyxTQUFTO1lBQzVCLFFBQVEsRUFBVyxTQUFTO1lBQzVCLElBQUksRUFBZSxTQUFTO1lBQzVCLGdCQUFnQixFQUFHLElBQUk7WUFDdkIsUUFBUSxFQUFXLEVBQUU7WUFDckIsU0FBUyxFQUFVLEVBQUU7U0FDeEIsQ0FBQztRQTBJRixrQkFBa0I7UUFDbEI7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7O1dBS0c7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUFvRyxDQUFDO1FBQ25KOzs7Ozs7O1dBT0c7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBeUgsQ0FBQztRQUM3Szs7Ozs7OztXQU9HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQW9JLENBQUM7UUFDNUw7Ozs7Ozs7OztXQVNHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBOEksQ0FBQztRQUM3TDs7Ozs7OztXQU9HO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBb0csQ0FBQztRQUNuSjs7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QkFBOUIsS0FBSztnQkFRSSxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBU0csaUJBQWlCO3NCQUExQixNQUFNO2dCQVNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFXRyxZQUFZO3NCQUFyQixNQUFNO2dCQVNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQVNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBYUcsUUFBUTtzQkFBakIsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQVVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFXRyxlQUFlO3NCQUF4QixNQUFNO2dCQVFHLFlBQVk7c0JBQXJCLE1BQU07Z0JBVUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBV0csVUFBVTtzQkFBbkIsTUFBTTtnQkFVRyxXQUFXO3NCQUFwQixNQUFNO2dCQVNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBV0csYUFBYTtzQkFBdEIsTUFBTTtnQkFZRyxhQUFhO3NCQUF0QixNQUFNO2dCQVVHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFVRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBVUcsTUFBTTtzQkFBZixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csYUFBYTtzQkFBdEIsTUFBTTtnQkFXRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBmb3IgQnJ5bnR1bSBQcm9qZWN0TW9kZWxcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQmFzZSwgRHVyYXRpb25Vbml0LCBNb2RlbCwgTW9kZWxDb25maWcsIFN0YXRlVHJhY2tpbmdNYW5hZ2VyIGFzIENvcmVTdGF0ZVRyYWNraW5nTWFuYWdlciwgU3RvcmUsIFN0b3JlQ29uZmlnIH0gZnJvbSAnQGJyeW50dW0vY29yZS10aGluJztcbmltcG9ydCB7IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIENydWRNYW5hZ2VyUmVxdWVzdFJlc3BvbnNlLCBDcnVkTWFuYWdlclN0b3JlRGVzY3JpcHRvciwgTGF6eUxvYWRDcnVkTWFuYWdlclJlcXVlc3RQYXJhbXMsIFRpbWVSYW5nZU1vZGVsLCBUaW1lUmFuZ2VNb2RlbENvbmZpZywgVGltZVJhbmdlU3RvcmUsIFRpbWVSYW5nZVN0b3JlQ29uZmlnLCBUaW1lU3BhbiwgVGltZVNwYW5Db25maWcgfSBmcm9tICdAYnJ5bnR1bS9zY2hlZHVsZXItdGhpbic7XG5pbXBvcnQgeyBFdmVudFNlZ21lbnRNb2RlbCwgU3RhdGVUcmFja2luZ01hbmFnZXJDb25maWcgfSBmcm9tICdAYnJ5bnR1bS9zY2hlZHVsZXJwcm8tdGhpbic7XG5pbXBvcnQgeyBBc3NpZ25tZW50TW9kZWwsIEFzc2lnbm1lbnRNb2RlbENvbmZpZywgQXNzaWdubWVudFN0b3JlLCBBc3NpZ25tZW50U3RvcmVDb25maWcsIENhbGVuZGFyTWFuYWdlclN0b3JlLCBDYWxlbmRhck1hbmFnZXJTdG9yZUNvbmZpZywgQ2FsZW5kYXJNb2RlbCwgQ2FsZW5kYXJNb2RlbENvbmZpZywgRGVwZW5kZW5jeU1vZGVsLCBEZXBlbmRlbmN5TW9kZWxDb25maWcsIERlcGVuZGVuY3lTdG9yZSwgRGVwZW5kZW5jeVN0b3JlQ29uZmlnLCBQcm9qZWN0TW9kZWwsIFByb2plY3RNb2RlbExpc3RlbmVycywgUmVzb3VyY2VNb2RlbCwgUmVzb3VyY2VNb2RlbENvbmZpZywgUmVzb3VyY2VTdG9yZSwgUmVzb3VyY2VTdG9yZUNvbmZpZywgVGFza01vZGVsLCBUYXNrTW9kZWxDb25maWcsIFRhc2tTdG9yZSwgVGFza1N0b3JlQ29uZmlnIH0gZnJvbSAnQGJyeW50dW0vZ2FudHQtdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1HYW50dFByb2plY3RNb2RlbFByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCkgd2hlbiBhIHN0YXJ0L2VuZCBkYXRlIGlzIHNldCBvbiB0aGUgZXZlbnQsIGEgY29ycmVzcG9uZGluZ1xuICAgICAqIGBzdGFydC1uby1lYXJsaWVyL2xhdGVyLXRoYW5gIGNvbnN0cmFpbnQgaXMgYWRkZWQsIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgZG9uZSBpbiBvcmRlciB0b1xuICAgICAqIGtlZXAgdGhlIGV2ZW50IFwiYXR0YWNoZWRcIiB0byB0aGlzIGRhdGUsIGFjY29yZGluZyB0byB0aGUgdXNlciBpbnRlbnRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1hZGRDb25zdHJhaW50T25EYXRlU2V0KVxuICAgICAqL1xuICAgIGFkZENvbnN0cmFpbnRPbkRhdGVTZXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBtYW5hZ2VzIERTVCBjb3JyZWN0aW9uIGluIHRoZSBzY2hlZHVsaW5nIGVuZ2luZS4gSXQgb25seSBoYXMgZWZmZWN0IHdoZW4gRFNUIHRyYW5zaXRpb24gaG91ciBpc1xuICAgICAqIHdvcmtpbmcgdGltZS4gVXN1YWxseSBEU1QgdHJhbnNpdGlvbiBvY2N1cnMgb24gU3VuZGF5LCBzbyB3aXRoIG5vbiB3b3JraW5nIHdlZWtlbmRzIHRoZSBEU1QgY29ycmVjdGlvbiBsb2dpY1xuICAgICAqIGlzIG5vdCBpbnZvbHZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWFkanVzdER1cmF0aW9uVG9EU1QpXG4gICAgICovXG4gICAgYWRqdXN0RHVyYXRpb25Ub0RTVCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgZmllbGQgaXMgc2V0IHRvIGB0cnVlYCBzY2hlZHVsaW5nIGNvbmZsaWN0c1xuICAgICAqIHdpbGwgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIHJlc29sdXRpb24gb3B0aW9uIHRvIFwicG9zdHBvbmVcIiB0aGUgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgKiBUaGUgY29uZmxpY3QgdGhlbiBpcyBzdG9yZWQgaW4gdGhlIHRhc2tcbiAgICAgKiBbcG9zdHBvbmVkQ29uZmxpY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvVGFza01vZGVsI2ZpZWxkLXBvc3Rwb25lZENvbmZsaWN0KSBmaWVsZFxuICAgICAqIGFuZCBjYW4gYmUgdmlzdWFsaXplZCB3aXRoIHRoZSBbVGFza0luZm9Db2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvY29sdW1uL1Rhc2tJbmZvQ29sdW1uKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWFsbG93UG9zdHBvbmVkQ29uZmxpY3RzKVxuICAgICAqL1xuICAgIGFsbG93UG9zdHBvbmVkQ29uZmxpY3RzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBhc3NpZ25tZW50IG1vZGVsIGNsYXNzLCB0byBiZSB1c2VkIGluIHRoZSBwcm9qZWN0LiBXaWxsIGJlIHNldCBhcyB0aGUgW21vZGVsQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL1N0b3JlI2NvbmZpZy1tb2RlbENsYXNzKVxuICAgICAqIHByb3BlcnR5IG9mIHRoZSBbYXNzaWdubWVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1hc3NpZ25tZW50U3RvcmUpXG4gICAgICovXG4gICAgYXNzaWdubWVudE1vZGVsQ2xhc3MgPyA6IHR5cGVvZiBBc3NpZ25tZW50TW9kZWxcbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbYXNzaWdubWVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1hc3NpZ25tZW50U3RvcmUpLiBTaG91bGQgYmUgYW4gYXJyYXkgb2ZcbiAgICAgKiBbQXNzaWdubWVudE1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Bc3NpZ25tZW50TW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgYXNzaWdubWVudHMgPyA6IEFzc2lnbm1lbnRNb2RlbFtdfEFzc2lnbm1lbnRNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW2Fzc2lnbm1lbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktYXNzaWdubWVudFN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbQXNzaWdubWVudE1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Bc3NpZ25tZW50TW9kZWwpIG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBVc2UgW2Fzc2lnbm1lbnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctYXNzaWdubWVudHMpIGluc3RlYWRcbiAgICAgKi9cbiAgICBhc3NpZ25tZW50c0RhdGEgPyA6IEFzc2lnbm1lbnRNb2RlbENvbmZpZ1tdfEFzc2lnbm1lbnRNb2RlbFtdXG4gICAgLyoqXG4gICAgICogQW4gW0Fzc2lnbm1lbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL0Fzc2lnbm1lbnRTdG9yZSkgaW5zdGFuY2Ugb3IgYSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIGFzc2lnbm1lbnRTdG9yZSA/IDogQXNzaWdubWVudFN0b3JlfEFzc2lnbm1lbnRTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IHN0b3JlIGluc3RhbmNlIHdpdGguIFNob3VsZCBiZSBhIGNsYXNzLCBzdWJjbGFzc2luZyB0aGUgW0Fzc2lnbm1lbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL0Fzc2lnbm1lbnRTdG9yZSlcbiAgICAgKi9cbiAgICBhc3NpZ25tZW50U3RvcmVDbGFzcyA/IDogdHlwZW9mIEFzc2lnbm1lbnRTdG9yZVxuICAgIC8qKlxuICAgICAqIGB0cnVlYCB0byBlbmFibGUgYXV0b21hdGljIFslIGRvbmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvVGFza01vZGVsI2ZpZWxkLXBlcmNlbnREb25lKSBjYWxjdWxhdGlvbiBmb3Igc3VtbWFyeVxuICAgICAqIHRhc2tzLCBgZmFsc2VgIHRvIGRpc2FibGUgaXQuXG4gICAgICovXG4gICAgYXV0b0NhbGN1bGF0ZVBlcmNlbnREb25lRm9yUGFyZW50VGFza3MgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IGNhbGwgW2xvYWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLWxvYWQpIG1ldGhvZCBvbiB0aGUgbmV4dCBmcmFtZSBhZnRlciBjcmVhdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWF1dG9Mb2FkKVxuICAgICAqL1xuICAgIGF1dG9Mb2FkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgKGRlZmF1bHQpIGFkamFjZW50IG9yIG92ZXJsYXBwaW5nIHRhc2sgc2VnbWVudHMgZ2V0IG1lcmdlZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqL1xuICAgIGF1dG9NZXJnZUFkamFjZW50U2VnbWVudHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGZpZWxkIGlzIHNldCB0byBgdHJ1ZWAgc2NoZWR1bGluZyBjb25mbGljdHNcbiAgICAgKiB3aWxsIG5vdCBzaG93IHRoZSBjb25mbGljdCByZXNvbHV0aW9uIHBvcHVwIGJ1dCBpbnN0ZWFkIHdpbGwgYmUgc2F2ZWQgaW50b1xuICAgICAqIHRhc2tzIFtwb3N0cG9uZWRDb25mbGljdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwjZmllbGQtcG9zdHBvbmVkQ29uZmxpY3QpIGZpZWxkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctYXV0b1Bvc3Rwb25lQ29uZmxpY3RzKVxuICAgICAqL1xuICAgIGF1dG9Qb3N0cG9uZUNvbmZsaWN0cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgZmllbGQgaXMgc2V0IHRvIGB0cnVlYCBzY2hlZHVsaW5nIGNvbmZsaWN0c1xuICAgICAqIHdpbGwgbm90IHNob3cgdGhlIGNvbmZsaWN0IHJlc29sdXRpb24gcG9wdXAgYnV0IGluc3RlYWQgd2lsbCBiZSBzYXZlZCBpbnRvXG4gICAgICogdGFza3MgW3Bvc3Rwb25lZENvbmZsaWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Rhc2tNb2RlbCNmaWVsZC1wb3N0cG9uZWRDb25mbGljdCkgZmllbGQuXG4gICAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBbYXV0b1Bvc3Rwb25lQ29uZmxpY3RzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNmaWVsZC1hdXRvUG9zdHBvbmVDb25mbGljdHMpIGZpZWxkIG5hbWUuXG4gICAgICovXG4gICAgYXV0b1Bvc3Rwb25lZENvbmZsaWN0cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQgKGRlZmF1bHQpLCBtYW51YWxseSBzY2hlZHVsZWQgdGFza3MgYXJlIHNjaGVkdWxlZCBhdXRvbWF0aWNhbGx5IG9uIHRoZSAybmQgc2NoZWR1bGluZyBwYXNzLlxuICAgICAqIFRoaXMgaXMgYSBiYWNrd2FyZCBwYXNzIChcImxhdGVcIiBzdGFydC9lbmQgZGF0ZXMpIGZvciBmb3J3YXJkLXNjaGVkdWxlZCBwcm9qZWN0IGFuZCBmb3J3YXJkIHBhc3NcbiAgICAgKiAoXCJlYXJseVwiIHN0YXJ0L2VuZCBkYXRlcykgZm9yIGJhY2t3YXJkLXNjaGVkdWxlZCBwcm9qZWN0LiBCZWNhdXNlIG9mIGl0LCBtYW51YWxseSBzY2hlZHVsZWQgdGFza3NcbiAgICAgKiBtYXkgaGF2ZSBub24temVybyBzbGFjay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWF1dG9TY2hlZHVsZU1hbnVhbFRhc2tzT25TZWNvbmRQYXNzKVxuICAgICAqL1xuICAgIGF1dG9TY2hlZHVsZU1hbnVhbFRhc2tzT25TZWNvbmRQYXNzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBwaW5zIGEgdGFzayBhdCBpdHMgc3RhcnRpbmcgZGF0ZS4gT3RoZXJ3aXNlLCBpdCBpcyByZXNjaGVkdWxlZCB0byB0aGVcbiAgICAgKiBwcm9qZWN0J3Mgc3RhcnRpbmcgZGF0ZSBpZiB0aGVyZSBpcyBubyBwcmVkZWNlc3NvciBvciBjb25zdHJhaW50IHN1cHBsaWVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctYXV0b1NldENvbnN0cmFpbnRzKVxuICAgICAqL1xuICAgIGF1dG9TZXRDb25zdHJhaW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IHBlcnNpc3Qgc3RvcmUgY2hhbmdlcyBhZnRlciBlZGl0cyBhcmUgbWFkZSBpbiBhbnkgb2YgdGhlIHN0b3JlcyBtb25pdG9yZWQuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBzeW5jIHJlcXVlc3Qgd2lsbCBub3QgYmUgaW52b2tlZCBpbW1lZGlhdGVseSBidXQgb25seSBhZnRlclxuICAgICAqIFthdXRvU3luY1RpbWVvdXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2NvbmZpZy1hdXRvU3luY1RpbWVvdXQpIGludGVydmFsLlxuICAgICAqL1xuICAgIGF1dG9TeW5jID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHBlcnNpc3RpbmcgY2hhbmdlcyB0byB0aGUgc2VydmVyLlxuICAgICAqIFVzZWQgd2hlbiBbYXV0b1N5bmNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2NvbmZpZy1hdXRvU3luYykgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICBhdXRvU3luY1RpbWVvdXQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGJhY2t3YXJkIGNvbXBhdGlibGUgY29uZmxpY3RzIHBvc3Rwb25pbmcgbG9naWNcbiAgICAgKiBjb3ZlcmluZyBvbmx5IGNvbmZsaWN0cyBiZXR3ZWVuIGEgdGFzayBjb25zdHJhaW50IGFuZCBpdHMgaW5jb21pbmcgZGVwZW5kZW5jaWVzLlxuICAgICAqIEBkZXByZWNhdGVkIFRoZSBmbGFnIGlzIGFkZGVkIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGFuZCBpcyBnb2luZyB0byBiZSByZW1vdmVkIGluIGEgbmV4dCByZWxlYXNlLiBQbGVhc2UgY29udGFjdCB1cyBpZiB5b3UgbmVlZCB0aGF0IG9sZCBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBid2NDb25mbGljdFBvc3Rwb25lID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2plY3QgY2FsZW5kYXIuXG4gICAgICovXG4gICAgY2FsZW5kYXIgPyA6IHN0cmluZ3xDYWxlbmRhck1vZGVsQ29uZmlnfENhbGVuZGFyTW9kZWxcbiAgICAvKipcbiAgICAgKiBBIFtDYWxlbmRhck1hbmFnZXJTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL0NhbGVuZGFyTWFuYWdlclN0b3JlKSBpbnN0YW5jZSBvciBhIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgY2FsZW5kYXJNYW5hZ2VyU3RvcmUgPyA6IENhbGVuZGFyTWFuYWdlclN0b3JlfENhbGVuZGFyTWFuYWdlclN0b3JlQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIGNhbGVuZGFyIHN0b3JlIGluc3RhbmNlIHdpdGguIFNob3VsZCBiZSBhIGNsYXNzLCBzdWJjbGFzc2luZyB0aGUgW0NhbGVuZGFyTWFuYWdlclN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2RhdGEvQ2FsZW5kYXJNYW5hZ2VyU3RvcmUpXG4gICAgICovXG4gICAgY2FsZW5kYXJNYW5hZ2VyU3RvcmVDbGFzcyA/IDogdHlwZW9mIENhbGVuZGFyTWFuYWdlclN0b3JlXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjYWxlbmRhciBtb2RlbCBjbGFzcywgdG8gYmUgdXNlZCBpbiB0aGUgcHJvamVjdC4gV2lsbCBiZSBzZXQgYXMgdGhlIFttb2RlbENsYXNzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbW9kZWxDbGFzcylcbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgW2NhbGVuZGFyTWFuYWdlclN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1jYWxlbmRhck1hbmFnZXJTdG9yZSlcbiAgICAgKi9cbiAgICBjYWxlbmRhck1vZGVsQ2xhc3MgPyA6IHR5cGVvZiBDYWxlbmRhck1vZGVsXG4gICAgLyoqXG4gICAgICogRGF0YSB1c2UgdG8gZmlsbCB0aGUgW2NhbGVuZGFyTWFuYWdlclN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1jYWxlbmRhck1hbmFnZXJTdG9yZSkuIFNob3VsZCBiZSBhXG4gICAgICogW0NhbGVuZGFyTW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvQ2FsZW5kYXJNb2RlbCkgYXJyYXkgb3IgaXRzIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBjYWxlbmRhcnMgPyA6IENhbGVuZGFyTW9kZWxbXXxDYWxlbmRhck1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCBkYXRhLCB0byBmaWxsIHRoZSBbY2FsZW5kYXJNYW5hZ2VyU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LWNhbGVuZGFyTWFuYWdlclN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbQ2FsZW5kYXJNb2RlbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvQ2FsZW5kYXJNb2RlbCkgb3IgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqIEBkZXByZWNhdGVkIDYuMy4wIFVzZSBbY2FsZW5kYXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctY2FsZW5kYXJzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgY2FsZW5kYXJzRGF0YSA/IDogQ2FsZW5kYXJNb2RlbENvbmZpZ1tdfENhbGVuZGFyTW9kZWxbXVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENoaWxkIG5vZGVzLiBUbyBhbGxvdyBsb2FkaW5nIGNoaWxkcmVuIG9uIGRlbWFuZCwgc3BlY2lmeSBgY2hpbGRyZW4gOiB0cnVlYCBpbiB5b3VyIGRhdGEuIE9taXQgdGhlIGZpZWxkIGZvciBsZWFmXG4gICAgICogdGFza3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1jaGlsZHJlbilcbiAgICAgKi9cbiAgICBjaGlsZHJlbiA/IDogYm9vbGVhbnxvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IG9mIHN0b3JlcyBjb250cm9sbGVkIGJ5IHRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1jcnVkU3RvcmVzKVxuICAgICAqL1xuICAgIGNydWRTdG9yZXMgPyA6IFN0b3JlW118c3RyaW5nW118Q3J1ZE1hbmFnZXJTdG9yZURlc2NyaXB0b3JbXXxTdG9yZUNvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBkYXlzIHBlciBtb250aC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWRheXNQZXJNb250aClcbiAgICAgKi9cbiAgICBkYXlzUGVyTW9udGggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZGF5cyBwZXIgd2Vlay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWRheXNQZXJXZWVrKVxuICAgICAqL1xuICAgIGRheXNQZXJXZWVrID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGVhcmx5IHJlbmRlcmluZyBpbiBHYW50dCwgYnkgcG9zdHBvbmluZyBjYWxjdWxhdGlvbnMgdG8gYWZ0ZXIgdGhlIGZpcnN0IHJlZnJlc2guXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1kZWxheUNhbGN1bGF0aW9uKVxuICAgICAqL1xuICAgIGRlbGF5Q2FsY3VsYXRpb24gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbZGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1kZXBlbmRlbmN5U3RvcmUpLiBTaG91bGQgYmUgYW4gYXJyYXkgb2ZcbiAgICAgKiBbRGVwZW5kZW5jeU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9EZXBlbmRlbmN5TW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgZGVwZW5kZW5jaWVzID8gOiBEZXBlbmRlbmN5TW9kZWxbXXxEZXBlbmRlbmN5TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGNhbGVuZGFyIGZvciBkZXBlbmRlbmNpZXMgKHRoZSBjYWxlbmRhciB1c2VkIGZvciB0YWtpbmcgZGVwZW5kZW5jaWVzIGxhZyBpbnRvIGFjY291bnQpLlxuICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1kZXBlbmRlbmNpZXNDYWxlbmRhcilcbiAgICAgKi9cbiAgICBkZXBlbmRlbmNpZXNDYWxlbmRhciA/IDogJ1RvRXZlbnQnfCdGcm9tRXZlbnQnfCdQcm9qZWN0J3wnQWxsV29ya2luZydcbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCBkYXRhLCB0byBmaWxsIHRoZSBbZGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1kZXBlbmRlbmN5U3RvcmUpIHdpdGguXG4gICAgICogU2hvdWxkIGJlIGFuIGFycmF5IG9mIFtEZXBlbmRlbmN5TW9kZWxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL0RlcGVuZGVuY3lNb2RlbCkgb3IgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqIEBkZXByZWNhdGVkIDYuMy4wIFVzZSBbZGVwZW5kZW5jaWVzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctZGVwZW5kZW5jaWVzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgZGVwZW5kZW5jaWVzRGF0YSA/IDogRGVwZW5kZW5jeU1vZGVsQ29uZmlnW118RGVwZW5kZW5jeU1vZGVsW11cbiAgICAvKipcbiAgICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIGRlcGVuZGVuY3kgbW9kZWwgY2xhc3MsIHRvIGJlIHVzZWQgaW4gdGhlIHByb2plY3QuIFdpbGwgYmUgc2V0IGFzIHRoZSBbbW9kZWxDbGFzc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLW1vZGVsQ2xhc3MpXG4gICAgICogcHJvcGVydHkgb2YgdGhlIFtkZXBlbmRlbmN5U3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LWRlcGVuZGVuY3lTdG9yZSlcbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5TW9kZWxDbGFzcyA/IDogdHlwZW9mIERlcGVuZGVuY3lNb2RlbFxuICAgIC8qKlxuICAgICAqIEEgW0RlcGVuZGVuY3lTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL0RlcGVuZGVuY3lTdG9yZSkgaW5zdGFuY2Ugb3IgYSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lTdG9yZSA/IDogRGVwZW5kZW5jeVN0b3JlfERlcGVuZGVuY3lTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IHN0b3JlIGluc3RhbmNlIHdpdGguIFNob3VsZCBiZSBhIGNsYXNzLCBzdWJjbGFzc2luZyB0aGUgW0RlcGVuZGVuY3lTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL0RlcGVuZGVuY3lTdG9yZSlcbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5U3RvcmVDbGFzcyA/IDogdHlwZW9mIERlcGVuZGVuY3lTdG9yZVxuICAgIC8qKlxuICAgICAqIERlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgZGVzY3JpcHRpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2hlZHVsaW5nIGRpcmVjdGlvbiBvZiB0aGUgcHJvamVjdCB0YXNrcy5cbiAgICAgKiBUaGUgYEZvcndhcmRgIGRpcmVjdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgQXMtU29vbi1Bcy1Qb3NzaWJsZSAoQVNBUCkgc2NoZWR1bGluZyxcbiAgICAgKiBgQmFja3dhcmRgIC0gdG8gQXMtTGF0ZS1Bcy1Qb3NzaWJsZSAoQUxBUCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1kaXJlY3Rpb24pXG4gICAgICovXG4gICAgZGlyZWN0aW9uID8gOiAnRm9yd2FyZCd8J0JhY2t3YXJkJ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIGNhbGN1bGF0aW9uIHByb2dyZXNzIG5vdGlmaWNhdGlvbnMuXG4gICAgICogV2hlbiBlbmFibGVkLCB0aGUgcHJvamVjdCBmaXJlcyBbcHJvZ3Jlc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2V2ZW50LXByb2dyZXNzKSBldmVudHMgYW5kIHRoZSBHYW50dCBjaGFydCBsb2FkIG1hc2sgcmVhY3RzIGJ5IHNob3dpbmcgYSBwcm9ncmVzcyBiYXIgZm9yIHRoZSBFbmdpbmUgY2FsY3VsYXRpb25zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctZW5hYmxlUHJvZ3Jlc3NOb3RpZmljYXRpb25zKVxuICAgICAqL1xuICAgIGVuYWJsZVByb2dyZXNzTm90aWZpY2F0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIEpTT04gZW5jb2RlciB1c2VkIGJ5IHRoZSAqQ3J1ZCBNYW5hZ2VyKi5cbiAgICAgKi9cbiAgICBlbmNvZGVyID8gOiB7XG4gICAgICAgIHJlcXVlc3REYXRhPzogb2JqZWN0XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuZCBkYXRlIG9mIHRoZSBwcm9qZWN0IGluIHRoZSBJU08gODYwMSBmb3JtYXQuXG4gICAgICogVGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGxhdGVzdCBkYXRlIGFtb25nIGFsbCB0YXNrcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWVuZERhdGUpXG4gICAgICovXG4gICAgZW5kRGF0ZSA/IDogc3RyaW5nfERhdGVcbiAgICAvKipcbiAgICAgKiBBbGlhcyB0byBbdGFza3NEYXRhXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdGFza3NEYXRhKS5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBVc2UgW3Rhc2tzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdGFza3MpIGluc3RlYWRcbiAgICAgKi9cbiAgICBldmVudHNEYXRhID8gOiBUYXNrTW9kZWxDb25maWdbXXxUYXNrTW9kZWxbXVxuICAgIC8qKlxuICAgICAqIEEgW1Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL1Rhc2tTdG9yZSkgaW5zdGFuY2Ugb3IgYSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIGV2ZW50U3RvcmUgPyA6IFRhc2tTdG9yZXxUYXNrU3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBTdGFydCBleHBhbmRlZCBvciBub3QgKG9ubHkgdmFsaWQgZm9yIHRyZWUgZGF0YSlcbiAgICAgKi9cbiAgICBleHBhbmRlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYXMgYHRydWVgIHRvIGZvcmNlIHN5bmMgcmVxdWVzdHMgdG8gYmUgc2VudCB3aGVuIGNhbGxpbmcgYHN5bmMoKWAsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGxvY2FsXG4gICAgICogY2hhbmdlcy4gVXNlZnVsIGluIGEgcG9sbGluZyBzY2VuYXJpbywgdG8ga2VlcCBjbGllbnQgdXAgdG8gZGF0ZSB3aXRoIHRoZSBiYWNrZW5kLlxuICAgICAqL1xuICAgIGZvcmNlU3luYyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaG91cnMgcGVyIGRheS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWhvdXJzUGVyRGF5KVxuICAgICAqL1xuICAgIGhvdXJzUGVyRGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlY29yZC4gTWlnaHQgYmUgbWFwcGVkIHRvIGFub3RoZXIgZGF0YVNvdXJjZSB1c2luZyBpZEZpZWxkLCBidXQgYWx3YXlzIGV4cG9zZWQgYXNcbiAgICAgKiByZWNvcmQuaWQuIFdpbGwgZ2V0IGEgZ2VuZXJhdGVkIHZhbHVlIGlmIG5vbmUgaXMgc3BlY2lmaWVkIGluIHJlY29yZHMgZGF0YS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWlkKVxuICAgICAqL1xuICAgIGlkID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogPHN0cm9uZz5UaGlzIG9wdGlvbiBpcyBleHBlcmltZW50YWwgYW5kIHN1YmplY3QgZm9yIHBvc3NpYmxlIGNoYW5nZTwvc3Ryb25nPi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWlnbm9yZUNvbnN0cmFpbnRzT25Db25mbGljdER1cmluZ1NlY29uZFBhc3MpXG4gICAgICogQGRlcHJlY2F0ZWQgVGhlIG9wdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkIHNpbmNlIHRoZSBjb2RlIG5vdyBieSBkZWZhdWx0IGlnbm9yZXMgY29uZmxpY3RzIGZhY2VkIG9uIHRoZSBzZWNvbmQgcGFzcy5cbiAgICAgKi9cbiAgICBpZ25vcmVDb25zdHJhaW50c09uQ29uZmxpY3REdXJpbmdTZWNvbmRQYXNzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYWtlIFNUTSBpZ25vcmUgY2hhbmdlcyBjb21pbmcgZnJvbSB0aGUgYmFja2VuZC4gVGhpcyB3aWxsIGFsbG93IHVzZXIgdG8gb25seSB1bmRvIHJlZG9cbiAgICAgKiBsb2NhbCBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGlnbm9yZVJlbW90ZUNoYW5nZXNJblNUTSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBcIkFzIHNvb24gYXMgcG9zc2libGVcIiBhbmQgXCJBcyBsYXRlIGFzIHBvc3NpYmxlXCIgaW4gdGhlIGxpc3Qgb2YgdGhlIGNvbnN0cmFpbnRzLFxuICAgICAqIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1TIFByb2plY3QuIEVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWluY2x1ZGVBc2FwQWxhcEFzQ29uc3RyYWludHMpXG4gICAgICovXG4gICAgaW5jbHVkZUFzYXBBbGFwQXNDb25zdHJhaW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG9ubHkgaW5jbHVkZSB0aGUgaWQgb2YgYSByZW1vdmVkIHBhcmVudCBub2RlIGluIHRoZSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kIChhbHNvXG4gICAgICogYWZmZWN0cyBwcm9ncmFtbWF0aWMgY2FsbHMgdG8gZ2V0IFtjaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNwcm9wZXJ0eS1jaGFuZ2VzKSBldGMuKSwgYW5kIG5vdCB0aGUgaWRzIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWluY2x1ZGVDaGlsZHJlbkluUmVtb3ZlUmVxdWVzdClcbiAgICAgKi9cbiAgICBpbmNsdWRlQ2hpbGRyZW5JblJlbW92ZVJlcXVlc3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgbGVnYWN5IGRhdGEgcHJvcGVydGllcyBpbiB0aGUgSlNPTiAvIGlubGluZURhdGEgb3V0cHV0LiBUaGUgbGVnYWN5IGRhdGEgcHJvcGVydGllcyBhcmVcbiAgICAgKiB0aGUgYHh4RGF0YWAgKGBldmVudHNEYXRhYCwgYHJlc291cmNlc0RhdGFgIGV0Yy4pIHByb3BlcnRpZXMgdGhhdCBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluXG4gICAgICogdGhlIGZ1dHVyZS5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBUaGlzIGNvbmZpZyB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGUgZXZlbnRzRGF0YSwgcmVzb3VyY2VzRGF0YSBldGMuIHByb3BlcnRpZXMgYXJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICAgKi9cbiAgICBpbmNsdWRlTGVnYWN5RGF0YVByb3BlcnRpZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBjbGFzcyBhdCBydW50aW1lIHdoZW4gdGhlIFN0b3JlIGlzIGNvbmZpZ3VyZWQgd2l0aFxuICAgICAqIFtsYXp5TG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLWxhenlMb2FkKS4gSWYgc2V0IG9uIGEgcGFyZW50IHJlY29yZCBhdCBsb2FkIHRpbWUsIHRoYXQgcGFyZW50IHdpbGwgbm90IGNhdXNlIGFueVxuICAgICAqIG1vcmUgY2hpbGQgbG9hZCByZXF1ZXN0cy4gSWYgb21pdHRlZCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCB0byBgdHJ1ZWAgd2hlbiBhIGxvYWQgcmVxdWVzdCByZWNlaXZlcyBmZXdlclxuICAgICAqIGNoaWxkIHJlY29yZHMgdGhhbiByZXF1ZXN0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1pc0Z1bGx5TG9hZGVkKVxuICAgICAqL1xuICAgIGlzRnVsbHlMb2FkZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9qZWN0IGRhdGEgYXMgYSBKU09OIHN0cmluZywgdXNlZCB0byBwb3B1bGF0ZSBpdHMgc3RvcmVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctanNvbilcbiAgICAgKi9cbiAgICBqc29uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCBvciBhIGNvbmZpZyBvYmplY3QsIHRoaXMgbWFrZXMgdGhlIENydWRNYW5hZ2VyIGxvYWQgcmVjb3JkcyBvbmx5IHdoZW4gbmVlZGVkLiBXaGVuIGEgcmVjb3JkXG4gICAgICogb3IgYSBkYXRlIHJhbmdlIHRoYXQgaXMgbm90IGFscmVhZHkgbG9hZGVkIGlzIHJlcXVlc3RlZCwgYSBsb2FkIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICAgICAqIE1vcmUgbW9yZSBkZXRhaWxzIGFib3V0IGxhenkgbG9hZGluZywgc2VlIHRoZSBbZ3VpZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9ndWlkZXMvZGF0YS9sYXp5bG9hZGluZy5tZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbGF6eUxvYWQgTGF6eSBsb2FkIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsYXp5TG9hZC5jaHVua1NpemUgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIGJlIGxvYWRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZXF1ZXN0ZWQgaW5kZXggKG9ubHkgYWZmZWN0cyB0aGUgUmVzb3VyY2VTdG9yZSkuXG4gICAgICogQHBhcmFtIHtEdXJhdGlvblVuaXR9IGJ1ZmZlclVuaXQgVXNlZCB0b2dldGhlciB3aXRoIGJ1ZmZlckFtb3VudCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgZWFjaCBsb2FkIHJlcXVlc3QuIFRoZSB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgY3VycmVudCB2aXNpYmxlIHN0YXJ0IG9yIGVuZCBkYXRlLiBEZWZhdWx0cyB0byB0aGUgdmlzaWJsZSB0aW1lIHNwYW4gbGVuZ3RoIChkb2VzIG5vdCBhZmZlY3QgUmVzb3VyY2VTdG9yZSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlckFtb3VudCBTZWUgYGJ1ZmZlclVuaXRgXG4gICAgICovXG4gICAgbGF6eUxvYWQgPyA6IGJvb2xlYW58e2xhenlMb2FkOiB7IGNodW5rU2l6ZTogbnVtYmVyIH0sIGJ1ZmZlclVuaXQ6IER1cmF0aW9uVW5pdCwgYnVmZmVyQW1vdW50OiBudW1iZXJ9XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBQcm9qZWN0TW9kZWxMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzaG9ydGN1dCB0byBzZXQgb25seSB0aGUgdXJsIHRvIGxvYWQgZnJvbSwgd2hlbiB5b3UgZG8gbm90IG5lZWQgdG8gc3VwcGx5IGFueSBvdGhlciBjb25maWdcbiAgICAgKiBvcHRpb25zIGluIHRoZSBgbG9hZGAgc2VjdGlvbiBvZiB0aGUgYHRyYW5zcG9ydGAgY29uZmlnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctbG9hZFVybClcbiAgICAgKi9cbiAgICBsb2FkVXJsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHJhbmdlIHRoZSBwcm9qZWN0IGNhbGVuZGFycyBjYW4gaXRlcmF0ZS5cbiAgICAgKiBUaGUgdmFsdWUgaXMgZGVmaW5lZCBpbiBtaWxsaXNlY29uZHMgYW5kIGJ5IGRlZmF1bHQgZXF1YWxzIGA1IHllYXJzYCByb3VnaGx5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctbWF4Q2FsZW5kYXJSYW5nZSlcbiAgICAgKi9cbiAgICBtYXhDYWxlbmRhclJhbmdlID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgKmNyaXRpY2FsIHBhdGhzKiB0byBjb2xsZWN0IGluIFtjcml0aWNhbFBhdGhzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1jcml0aWNhbFBhdGhzKS5cbiAgICAgKiBXaGVuIGNyaXRpY2FsIHRhc2tzIGNvbm5lY3Rpdml0eSBpcyBoaWdoICh0aGVyZSBhcmUgbWFueSBvZiBzdWNoIHRhc2tzIGhhdmluZyBtYW55XG4gICAgICogY3JpdGljYWwgcHJlZGVjZXNzb3JzKSB0aGUgdGFza3MgbWlnaHQgcHJvZHVjZSBhIGh1Z2UgbnVtYmVyIG9mIGNyaXRpY2FsIHBhdGhzIHdoaWNoXG4gICAgICogY2FuJ3QgcmVhbGx5IGJlIGhhbmRsZWQgYnkgYSBicm93c2VyLlxuICAgICAqIFNvIHRoaXMgdmFsdWUgbGltaXRzIHRoZSBudW1iZXIgb2YgcGF0aHMgdG8gY29sbGVjdCB0byBwcm90ZWN0IGZyb20gc3VjaCBjYXNlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLW1heENyaXRpY2FsUGF0aHNDb3VudClcbiAgICAgKi9cbiAgICBtYXhDcml0aWNhbFBhdGhzQ291bnQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IGZpZWxkIHByb3ZpZGVkIGluIHNlcnZlciBzeW5jaHJvbml6YXRpb24gcGFja2V0cyB0byBzcGVjaWZ5XG4gICAgICogd2hpY2ggcG9zaXRpb24gdGhlIG5vZGUgdGFrZXMgaW4gdGhlIHBhcmVudCdzIG9yZGVyZWQgY2hpbGRyZW4gYXJyYXkuXG4gICAgICogVGhpcyBpbmRleCBpcyBzZXQgb24gbG9hZCBhbmQgZ2V0cyB1cGRhdGVkIG9uIHJlb3JkZXJpbmcgbm9kZXMgaW4gdHJlZS4gU29ydGluZyBhbmQgZmlsdGVyaW5nXG4gICAgICogaGF2ZSBubyBlZmZlY3Qgb24gaXQuXG4gICAgICovXG4gICAgb3JkZXJlZFBhcmVudEluZGV4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIFJlc291cmNlIHJlY29yZHMgZWFjaCBwYWdlIHNob3VsZCBjb250YWluLCB3aGVuIHVzaW5nIFtyZW1vdGVQYWdpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvbWl4aW4vTGF6eUxvYWRDcnVkTWFuYWdlciNjb25maWctcmVtb3RlUGFnaW5nKVxuICAgICAqL1xuICAgIHBhZ2VTaXplID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IGZpZWxkIHByb3ZpZGVkIGluIHNlcnZlciBzeW5jaHJvbml6YXRpb24gcGFja2V0cyB0byBzcGVjaWZ5XG4gICAgICogd2hpY2ggcmVjb3JkIGlkIGlzIHRoZSBwYXJlbnQgb2YgdGhlIHJlY29yZC5cbiAgICAgKi9cbiAgICBwYXJlbnRJZCA/IDogc3RyaW5nfG51bWJlcnxudWxsXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhIHJlYWQtb25seSBmaWVsZCBwcm92aWRlZCBpbiBzZXJ2ZXIgc3luY2hyb25pemF0aW9uIHBhY2tldHMgdG8gc3BlY2lmeVxuICAgICAqIHdoaWNoIHBvc2l0aW9uIHRoZSBub2RlIHRha2VzIGluIHRoZSBwYXJlbnQncyBjaGlsZHJlbiBhcnJheS5cbiAgICAgKiBUaGlzIGluZGV4IGlzIHNldCBvbiBsb2FkIGFuZCBnZXRzIHVwZGF0ZWQgYXV0b21hdGljYWxseSBhZnRlciByb3cgcmVvcmRlcmluZywgc29ydGluZywgZXRjLlxuICAgICAqIFRvIHNhdmUgdGhlIG9yZGVyLCBuZWVkIHRvIHBlcnNpc3QgdGhlIGZpZWxkIG9uIHRoZSBzZXJ2ZXIgYW5kIHdoZW4gZGF0YSBpcyBmZXRjaGVkIHRvIGJlIGxvYWRlZCxcbiAgICAgKiBuZWVkIHRvIHNvcnQgYnkgdGhpcyBmaWVsZC5cbiAgICAgKi9cbiAgICBwYXJlbnRJbmRleCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogRmllbGQgbmFtZSB0byBiZSB1c2VkIHRvIHRyYW5zZmVyIGEgcGhhbnRvbSByZWNvcmQgaWRlbnRpZmllci5cbiAgICAgKi9cbiAgICBwaGFudG9tSWRGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRmllbGQgbmFtZSB0byBiZSB1c2VkIHRvIHRyYW5zZmVyIGEgcGhhbnRvbSBwYXJlbnQgcmVjb3JkIGlkZW50aWZpZXIuXG4gICAgICovXG4gICAgcGhhbnRvbVBhcmVudElkRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEZsYWcgdGhlIHJlY29yZCBhcyByZWFkLW9ubHkgb24gdGhlIFVJIGxldmVsLCBwcmV2ZW50aW5nIHRoZSBlbmQgdXNlciBmcm9tIG1hbmlwdWxhdGluZyBpdCB1c2luZyBlZGl0aW5nXG4gICAgICogZmVhdHVyZXMgc3VjaCBhcyBjZWxsIGVkaXRpbmcgYW5kIGV2ZW50IGRyYWdnaW5nLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBjbGFzcyBhdCBydW50aW1lIHdoZW4gdGhlIFN0b3JlIGlzIGNvbmZpZ3VyZWQgd2l0aFxuICAgICAqIFtsYXp5TG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLWxhenlMb2FkKS4gVGhlXG4gICAgICogbnVtYmVyIHNwZWNpZmllZCBzaG91bGQgcmVmbGVjdCB0aGUgPHN0cm9uZz50b3RhbDwvc3Ryb25nPiBhbW91bnQgb2YgY2hpbGRyZW4gb2YgYSBwYXJlbnQgbm9kZSwgaW5jbHVkaW5nIG5lc3RlZCBkZXNjZW5kYW50cy5cbiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGZpZWxkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSByZWFkIHRoZSBbZ3VpZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9ndWlkZXMvZGF0YS9sYXp5bG9hZGluZy5tZCkgdG8gZmluZCBvdXQgaWYgeW91ciBhcHAgbmVlZHMgdG8gdXNlIHRoZSBuZXcgW2lzRnVsbHlMb2FkZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL21peGluL1RyZWVOb2RlI2ZpZWxkLWlzRnVsbHlMb2FkZWQpIGZpZWxkLlxuICAgICAqL1xuICAgIHJlbW90ZUNoaWxkQ291bnQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoaXMgbWFrZXMgdGhlIENydWRNYW5hZ2VyIGxvYWQgcGFnZXMgb2YgZGF0YSwgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZSBjb21wbGV0ZSBkYXRhc2V0IGF0XG4gICAgICogb25jZS4gVGhlIHJlcXVlc3RzIG1hZGUgdG8gdGhlIFtsb2FkVXJsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNjb25maWctbG9hZFVybCkgd2lsbCBjb250YWluXG4gICAgICogcGFyYW1zIHdpdGggaW5mbyBhYm91dCB0aGUgY3VycmVudCBkYXRhc2V0IGJlaW5nIHJlcXVlc3RlZDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXJlbW90ZVBhZ2luZylcbiAgICAgKi9cbiAgICByZW1vdGVQYWdpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBDcnVkTWFuYWdlci9Qcm9qZWN0IGlzIGNvbmZpZ3VyZWQgd2l0aCBbbGF6eUxvYWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvbWl4aW4vTGF6eUxvYWRDcnVkTWFuYWdlciNjb25maWctbGF6eUxvYWQpIHNldCB0byBgdHJ1ZWAsIHlvdSBjYW4gY29uZmlndXJlXG4gICAgICogeW91ciBvd24gZGF0YSBmZXRjaGluZyBsb2dpYyBieSBpbXBsZW1lbnRpbmcgdGhpcyBmdW5jdGlvbi4gRG9pbmcgdGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBidWlsdC1pbiBmZXRjaGluZ1xuICAgICAqIG1lY2hhbmlzbSB1c2luZyB0aGUgW2xvYWRVcmxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2RhdGEvQ3J1ZE1hbmFnZXIjY29uZmlnLWxvYWRVcmwpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctcmVxdWVzdERhdGEpXG4gICAgICogQHBhcmFtIHtMYXp5TG9hZENydWRNYW5hZ2VyUmVxdWVzdFBhcmFtc30gcGFyYW1zIE9iamVjdCBjb250YWluaW5nIGluZm8gb2Ygd2hhdCBkYXRhIGlzIHJlcXVlc3RlZFxuICAgICAqIEByZXR1cm5zIHtDcnVkTWFuYWdlclJlcXVlc3RSZXNwb25zZX1cbiAgICAgKi9cbiAgICByZXF1ZXN0RGF0YSA/IDogKHBhcmFtczogTGF6eUxvYWRDcnVkTWFuYWdlclJlcXVlc3RQYXJhbXMpID0+IFByb21pc2U8Q3J1ZE1hbmFnZXJSZXF1ZXN0UmVzcG9uc2U+XG4gICAgLyoqXG4gICAgICogYFRydWVgIHRvIHJlc2V0IGlkZW50aWZpZXJzIChkZWZpbmVkIGJ5IGBpZEZpZWxkYCBjb25maWcpIG9mIHBoYW50b20gcmVjb3JkcyBiZWZvcmUgc3VibWl0dGluZyB0aGVtXG4gICAgICogdG8gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICByZXNldElkc0JlZm9yZVN5bmMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHJlc2V0IHRoZSB1bmRvL3JlZG8gcXVldWVzIG9mIHRoZSBpbnRlcm5hbCBbU3RhdGVUcmFja2luZ01hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL3N0bS9TdGF0ZVRyYWNraW5nTWFuYWdlcilcbiAgICAgKiBhZnRlciB0aGUgUHJvamVjdCBoYXMgbG9hZGVkLiBEZWZhdWx0cyB0byBgZmFsc2VgXG4gICAgICovXG4gICAgcmVzZXRVbmRvUmVkb1F1ZXVlc0FmdGVyTG9hZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgcmVzb3VyY2UgbW9kZWwgY2xhc3MsIHRvIGJlIHVzZWQgaW4gdGhlIHByb2plY3QuIFdpbGwgYmUgc2V0IGFzIHRoZSBbbW9kZWxDbGFzc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLW1vZGVsQ2xhc3MpXG4gICAgICogcHJvcGVydHkgb2YgdGhlIFtyZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1yZXNvdXJjZVN0b3JlKVxuICAgICAqL1xuICAgIHJlc291cmNlTW9kZWxDbGFzcyA/IDogdHlwZW9mIFJlc291cmNlTW9kZWxcbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbcmVzb3VyY2VTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktcmVzb3VyY2VTdG9yZSkuIFNob3VsZCBiZSBhbiBhcnJheSBvZlxuICAgICAqIFtSZXNvdXJjZU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9SZXNvdXJjZU1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqL1xuICAgIHJlc291cmNlcyA/IDogUmVzb3VyY2VNb2RlbFtdfFJlc291cmNlTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBpbml0aWFsIGRhdGEsIHRvIGZpbGwgdGhlIFtyZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1yZXNvdXJjZVN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbUmVzb3VyY2VNb2RlbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUmVzb3VyY2VNb2RlbCkgb3IgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqIEBkZXByZWNhdGVkIDYuMy4wIFVzZSBbcmVzb3VyY2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctcmVzb3VyY2VzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgcmVzb3VyY2VzRGF0YSA/IDogUmVzb3VyY2VNb2RlbENvbmZpZ1tdfFJlc291cmNlTW9kZWxbXVxuICAgIC8qKlxuICAgICAqIEEgW1Jlc291cmNlU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZGF0YS9SZXNvdXJjZVN0b3JlKSBpbnN0YW5jZSBvciBhIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgcmVzb3VyY2VTdG9yZSA/IDogUmVzb3VyY2VTdG9yZXxSZXNvdXJjZVN0b3JlQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIGRlcGVuZGVuY3kgc3RvcmUgaW5zdGFuY2Ugd2l0aC4gU2hvdWxkIGJlIGEgY2xhc3MsIHN1YmNsYXNzaW5nIHRoZSBbUmVzb3VyY2VTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9kYXRhL1Jlc291cmNlU3RvcmUpXG4gICAgICovXG4gICAgcmVzb3VyY2VTdG9yZUNsYXNzID8gOiB0eXBlb2YgUmVzb3VyY2VTdG9yZVxuICAgIC8qKlxuICAgICAqIEV4cGVyaW1lbnRhbCBob29rIHRoYXQgbGV0cyB0aGUgYXBwIGRldGVybWluZSBpZiBhIGJvdW5kIGRhdGFzZXQgbmVlZHMgc3luY2luZyB3aXRoIHRoZSBzdG9yZSBvciBub3QsIGFuZFxuICAgICAqIGlmIGl0IGRvZXMgLSB3aGljaCByZWNvcmRzIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4gT25seSBjYWxsZWQgZm9yIHN0b3JlcyB0aGF0IGFyZSBjb25maWd1cmVkIHdpdGhcbiAgICAgKiBgc3luY0RhdGFPbkxvYWQ6IHRydWVgICh3aGljaCBpcyB0aGUgZGVmYXVsdCBpbiB0aGUgUmVhY3QsIEFuZ3VsYXIgYW5kIFZ1ZSB3cmFwcGVycykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zaG91bGRTeW5jRGF0YU9uTG9hZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIHBhc3NlZCBieSB0aGUgc3RvcmUgdG8gdGhpcyBob29rXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuU3RvcmV9IG9wdGlvbnMuc3RvcmUgU3RvcmUgYWJvdXQgdG8gYmUgc3luY2VkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IG9wdGlvbnMucmVjb3JkcyBSZWNvcmRzIGN1cnJlbnRseSBpbiB0aGUgc3RvcmVcbiAgICAgKiBAcGFyYW0ge29iamVjdFtdfSBvcHRpb25zLmRhdGEgSW5jb21pbmcgZGF0YVxuICAgICAqIEByZXR1cm5zIHtTZXQ8YW55Pixib29sZWFufSBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdG9yZSBmcm9tIHN5bmNpbmcsIG9yIGEgc2V0IG9mIHJlY29yZCBpZHMgdGhhdCBuZWVkIGZ1cnRoZXIgcHJvY2Vzc2luZyAoZm9yIHJlY29yZHMgdGhhdCBoYXMgc29tZSBraW5kIG9mIGNoYW5nZSwgZWcuIGFuIHVwZGF0ZSwgcmVtb3ZhbCBvciBhZGRpdGlvbilcbiAgICAgKi9cbiAgICBzaG91bGRTeW5jRGF0YU9uTG9hZCA/IDogKG9wdGlvbnM6IHsgc3RvcmU6IFN0b3JlLCByZWNvcmRzOiBNb2RlbCwgZGF0YTogb2JqZWN0W10gfSkgPT4gU2V0PGFueT58Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNpbGVuY2VzIHByb3BhZ2F0aW9ucyBjYXVzZWQgYnkgdGhlIHByb2plY3QgbG9hZGluZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXNpbGVuY2VJbml0aWFsQ29tbWl0KVxuICAgICAqL1xuICAgIHNpbGVuY2VJbml0aWFsQ29tbWl0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgdGhlIHByb2plY3QncyBtYW51YWxseSBzY2hlZHVsZWQgdGFza3MgZHVyYXRpb24gd2lsbCBpbmNsdWRlIG9ubHkgd29ya2luZyBwZXJpb2RzIG9mIHRpbWUuXG4gICAgICogV2hlbiBgZmFsc2VgIHN1Y2ggdGFza3Mgd2lsbCBpZ25vcmUgd29ya2luZyB0aW1lIGNhbGVuZGFycyBhbmQgdHJlYXQgYWxsIGludGVydmFscyBhcyB3b3JraW5nLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc2tpcE5vbldvcmtpbmdUaW1lSW5EdXJhdGlvbldoZW5TY2hlZHVsaW5nTWFudWFsbHkpXG4gICAgICovXG4gICAgc2tpcE5vbldvcmtpbmdUaW1lSW5EdXJhdGlvbldoZW5TY2hlZHVsaW5nTWFudWFsbHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgcHJvamVjdCBtYW51YWxseSBzY2hlZHVsZWQgdGFza3Mgd2lsbCBhZGp1c3QgdGhlaXIgcHJvcG9zZWQgc3RhcnQvZW5kIGRhdGVzXG4gICAgICogdG8gc2tpcCBub24gd29ya2luZyB0aW1lLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc2tpcE5vbldvcmtpbmdUaW1lV2hlblNjaGVkdWxpbmdNYW51YWxseSlcbiAgICAgKi9cbiAgICBza2lwTm9uV29ya2luZ1RpbWVXaGVuU2NoZWR1bGluZ01hbnVhbGx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgdHJlYXRzIHBhcnNlZCByZXNwb25zZXMgd2l0aG91dCBgc3VjY2Vzc2AgcHJvcGVydHkgYXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiBJbiB0aGlzIG1vZGUgYSBwYXJzZWQgcmVzcG9uc2UgaXMgdHJlYXRlZCBhcyBpbnZhbGlkIGlmIGl0IGhhcyBleHBsaWNpdGx5IHNldCBgc3VjY2VzcyA6IGZhbHNlYC5cbiAgICAgKi9cbiAgICBza2lwU3VjY2Vzc1Byb3BlcnR5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3RhcnQgZGF0ZSBvZiB0aGUgcHJvamVjdCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LiBTZXR0aW5nIHRoaXMgZGF0ZSB3aWxsIGNvbnN0cmFpbiBhbGwgb3RoZXIgdGFza3MgaW4gdGhlXG4gICAgICogcHJvamVjdCB0byBzdGFydCBubyBlYXJsaWVyIHRoYW4gaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zdGFydERhdGUpXG4gICAgICovXG4gICAgc3RhcnREYXRlID8gOiBzdHJpbmd8RGF0ZVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBob3cgc3RhcnRlZCB0YXNrcyBhcmUgc2NoZWR1bGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc3RhcnRlZFRhc2tTY2hlZHVsaW5nKVxuICAgICAqL1xuICAgIHN0YXJ0ZWRUYXNrU2NoZWR1bGluZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBkYXRlIG9mIHRoZSBwcm9qZWN0LiBJdCBpcyBqdXN0IGEgZGF0ZSwgdGhhdCBzZXRzIGEgcmVmZXJlbmNlIHBvaW50IHRvIHZhcmlvdXMgcmVwb3J0aW5nIGZhY2lsaXRpZXMsXG4gICAgICogbGlrZSBbUHJvZ3Jlc3NMaW5lXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvUHJvZ3Jlc3NMaW5lKSBvciBbUGxhbm5lZFBlcmNlbnREb25lQ29sdW1uXSgjR2FudHQvY29sdW1uL1BsYW5uZWRQZXJjZW50RG9uZUNvbHVtbikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zdGF0dXNEYXRlKVxuICAgICAqL1xuICAgIHN0YXR1c0RhdGUgPyA6IERhdGVcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcHJvdmlkZSB0byB0aGUgU1RNIG1hbmFnZXJcbiAgICAgKi9cbiAgICBzdG0gPyA6IFN0YXRlVHJhY2tpbmdNYW5hZ2VyQ29uZmlnfENvcmVTdGF0ZVRyYWNraW5nTWFuYWdlclxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgYSBzdG9yZSBwcm9wZXJ0eSB0byByZXRyaWV2ZSBzdG9yZSBpZGVudGlmaWVycyBmcm9tLiBNYWtlIHN1cmUgeW91IGhhdmUgYW4gaW5zdGFuY2Ugb2YgYVxuICAgICAqIHN0b3JlIHRvIHVzZSBpdCBieSBpZC4gU3RvcmUgaWRlbnRpZmllciBpcyB1c2VkIGFzIGEgY29udGFpbmVyIG5hbWUgaG9sZGluZyBjb3JyZXNwb25kaW5nIHN0b3JlIGRhdGFcbiAgICAgKiB3aGlsZSB0cmFuc2ZlcnJpbmcgdGhlbSB0by9mcm9tIHRoZSBzZXJ2ZXIuIEJ5IGRlZmF1bHQsIGBpZGAgcHJvcGVydHkgaXMgdXNlZC4gQW5kIGluIGNhc2UgYVxuICAgICAqIGNvbnRhaW5lciBpZGVudGlmaWVyIGhhcyB0byBkaWZmZXIgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zdG9yZUlkUHJvcGVydHkpXG4gICAgICovXG4gICAgc3RvcmVJZFByb3BlcnR5ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgQ3J1ZCBNYW5hZ2VyIGRvZXMgbm90IHJlcXVpcmUgYWxsIHVwZGF0ZWQgYW5kIHJlbW92ZWQgcmVjb3JkcyB0byBiZSBtZW50aW9uZWQgaW4gdGhlXG4gICAgICogKnN5bmMqIHJlc3BvbnNlLiBJbiB0aGlzIGNhc2UgcmVzcG9uc2Ugc2hvdWxkIGluY2x1ZGUgb25seSBzZXJ2ZXIgc2lkZSBjaGFuZ2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc3VwcG9ydFNob3J0U3luY1Jlc3BvbnNlKVxuICAgICAqL1xuICAgIHN1cHBvcnRTaG9ydFN5bmNSZXNwb25zZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHN0b3JlIGlkZW50aWZpZXJzIHNldHMgYW4gYWx0ZXJuYXRpdmUgc3luYyByZXNwb25zZXMgYXBwbHkgb3JkZXIuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIG9yZGVyIGluIHdoaWNoIHN5bmMgcmVzcG9uc2VzIGFyZSBhcHBsaWVkIHRvIHRoZSBzdG9yZXMgaXMgdGhlIHNhbWUgYXMgdGhleVxuICAgICAqIHJlZ2lzdGVyZWQgaW4uIEJ1dCBpbiBjYXNlIG9mIHNvbWUgdHJpY2t5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN0b3JlcyB0aGlzIG9yZGVyIGNhbiBiZSBjaGFuZ2VkOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc3luY0FwcGx5U2VxdWVuY2UpXG4gICAgICovXG4gICAgc3luY0FwcGx5U2VxdWVuY2UgPyA6IHN0cmluZ1tdfENydWRNYW5hZ2VyU3RvcmVEZXNjcmlwdG9yW11cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzaG9ydGN1dCB0byBzZXQgb25seSB0aGUgdXJsIHRvIHN5bmMgdG8sIHdoZW4geW91IGRvIG5vdCBuZWVkIHRvIHN1cHBseSBhbnkgb3RoZXIgY29uZmlnXG4gICAgICogb3B0aW9ucyBpbiB0aGUgYHN5bmNgIHNlY3Rpb24gb2YgdGhlIGB0cmFuc3BvcnRgIGNvbmZpZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXN5bmNVcmwpXG4gICAgICovXG4gICAgc3luY1VybCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBldmVudCBtb2RlbCBjbGFzcywgdG8gYmUgdXNlZCBpbiB0aGUgcHJvamVjdC4gV2lsbCBiZSBzZXQgYXMgdGhlIFttb2RlbENsYXNzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbW9kZWxDbGFzcylcbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgW2V2ZW50U3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LWV2ZW50U3RvcmUpXG4gICAgICovXG4gICAgdGFza01vZGVsQ2xhc3MgPyA6IHR5cGVvZiBUYXNrTW9kZWxcbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbdGFza1N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS10YXNrU3RvcmUpLiBTaG91bGQgYmUgYW4gYXJyYXkgb2ZcbiAgICAgKiBbVGFza01vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgdGFza3MgPyA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW3Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktdGFza1N0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbVGFza01vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwpIG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBVc2UgW3Rhc2tzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdGFza3MpIGluc3RlYWRcbiAgICAgKi9cbiAgICB0YXNrc0RhdGEgPyA6IFRhc2tNb2RlbENvbmZpZ1tdfFRhc2tNb2RlbFtdXG4gICAgLyoqXG4gICAgICogQW4gYWxpYXMgZm9yIHRoZSBbZXZlbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWV2ZW50U3RvcmUpLlxuICAgICAqL1xuICAgIHRhc2tTdG9yZSA/IDogVGFza1N0b3JlfFRhc2tTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYW4gdGFzayBzdG9yZSBpbnN0YW5jZSB3aXRoLiBTaG91bGQgYmUgYSBjbGFzcywgc3ViY2xhc3NpbmcgdGhlIFtUYXNrU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZGF0YS9UYXNrU3RvcmUpXG4gICAgICovXG4gICAgdGFza1N0b3JlQ2xhc3MgPyA6IHR5cGVvZiBUYXNrU3RvcmVcbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbdGltZVJhbmdlU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LXRpbWVSYW5nZVN0b3JlKS4gU2hvdWxkIGJlIGFuIGFycmF5IG9mXG4gICAgICogW1RpbWVSYW5nZU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvVGltZVJhbmdlTW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgdGltZVJhbmdlcyA/IDogVGltZVJhbmdlTW9kZWxbXXxUaW1lUmFuZ2VNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW3RpbWVSYW5nZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS10aW1lUmFuZ2VTdG9yZSkgd2l0aC5cbiAgICAgKiBTaG91bGQgYmUgYW4gYXJyYXkgb2YgW1RpbWVSYW5nZU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvVGltZVJhbmdlTW9kZWwpIG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBVc2UgW3RpbWVSYW5nZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy10aW1lUmFuZ2VzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgdGltZVJhbmdlc0RhdGEgPyA6IFRpbWVTcGFuQ29uZmlnW118VGltZVNwYW5bXVxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoYXQgaG9sZHMgdGltZSByYW5nZXMgLSBpbnN0YW5jZXMgb2YgW1RpbWVSYW5nZU1vZGVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9UaW1lUmFuZ2VNb2RlbCkgZm9yIHRoZVxuICAgICAqIFtUaW1lUmFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVSYW5nZXMpIGZlYXR1cmUuIEEgc3RvcmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgaWYgbm9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgdGltZVJhbmdlU3RvcmUgPyA6IFRpbWVSYW5nZVN0b3JlQ29uZmlnfFRpbWVSYW5nZVN0b3JlXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgSUFOQSB0aW1lIHpvbmUgKGkuZS4gYEV1cm9wZS9TdG9ja2hvbG1gKSBvciBhIFVUQyBvZmZzZXQgaW4gbWludXRlcyAoaS5lLiBgLTEyMGApLiBUaGlzIHdpbGxcbiAgICAgKiBjb252ZXJ0IGFsbCBldmVudHMsIHRhc2tzIGFuZCB0aW1lIHJhbmdlcyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZSBvciBvZmZzZXQuIEl0IHdpbGwgYWxzbyBhZmZlY3QgdGhlXG4gICAgICogZGlzcGxheWVkIHRpbWVsaW5lJ3MgaGVhZGVycyBhcyB3ZWxsIGF0IHRoZSBzdGFydCBhbmQgZW5kIGRhdGUgb2YgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy10aW1lWm9uZSlcbiAgICAgKi9cbiAgICB0aW1lWm9uZSA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBbdG9KU09OXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9taXhpbi9Qcm9qZWN0TW9kZWxDb21tb24jZnVuY3Rpb24tdG9KU09OKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXRvSlNPTlJlc3VsdEZvcm1hdClcbiAgICAgKi9cbiAgICB0b0pTT05SZXN1bHRGb3JtYXQgPyA6ICdpbmxpbmVEYXRhJ3wnbW9kZWwnXG4gICAgLyoqXG4gICAgICogSWYgYHRydWVgLCBwcm9qZWN0IFtjaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby9kYXRhL21peGluL1Byb2plY3RDcnVkTWFuYWdlciNwcm9wZXJ0eS1jaGFuZ2VzKSBBUEkgd2lsbCBhbHNvIHJlcG9ydCBwcm9qZWN0IG1vZGVsIGNoYW5nZXM6IHN0YXJ0L2VuZCBkYXRlLFxuICAgICAqIGNhbGVuZGFyLCBlZmZvcnQsIGR1cmF0aW9uLCBldGMuXG4gICAgICovXG4gICAgdHJhY2tQcm9qZWN0TW9kZWxDaGFuZ2VzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgZm9yY2VzIHRoZSBDUlVEIG1hbmFnZXIgdG8gcHJvY2VzcyByZXNwb25zZXMgZGVwZW5kaW5nIG9uIHRoZWlyIGB0eXBlYCBhdHRyaWJ1dGUuXG4gICAgICogU28gYGxvYWRgIHJlcXVlc3QgbWF5IGJlIHJlc3BvbmRlZCB3aXRoIGBzeW5jYCByZXNwb25zZSBmb3IgZXhhbXBsZS5cbiAgICAgKiBDYW4gYmUgdXNlZCBmb3Igc21hcnQgc2VydmVyIGxvZ2ljIGFsbG93aW5nIHRoZSBzZXJ2ZXIgdG8gZGVjaWRlIHdoZW4gaXQncyBiZXR0ZXIgdG8gcmVzcG9uZCB3aXRoIGFcbiAgICAgKiBjb21wbGV0ZSBkYXRhIHNldCAoYGxvYWRgIHJlc3BvbnNlKSBvciBpdCdzIGVub3VnaCB0byByZXR1cm4ganVzdCBhIGRlbHRhIChgc3luY2AgcmVzcG9uc2UpLlxuICAgICAqL1xuICAgIHRyYWNrUmVzcG9uc2VUeXBlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBvZiB0aGUgQUpBWCByZXF1ZXN0cyB1c2VkIGJ5ICpDcnVkIE1hbmFnZXIqIHRvIGNvbW11bmljYXRlIHdpdGggYSBzZXJ2ZXItc2lkZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXRyYW5zcG9ydClcbiAgICAgKi9cbiAgICB0cmFuc3BvcnQgPyA6IHtcbiAgICAgICAgbG9hZD86IG9iamVjdFxuICAgICAgICBzeW5jPzogb2JqZWN0XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBzdG9yZXMgb2YgYSBwcm9qZWN0IHVzZSB0aGUgcmF3IGRhdGEgb2JqZWN0cyBwYXNzZWQgdG8gdGhlbSBhcyB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZWlyXG4gICAgICogcmVjb3JkcyBpZiBkYXRhIGlzIGxvYWRlZCByZW1vdGVseSAodXNpbmcgYW4gYEFqYXhTdG9yZWAgb3IgYSBgQ3J1ZE1hbmFnZXJgKS4gRm9yIGRhdGEgc3VwcGxpZWQgaW5saW5lLFxuICAgICAqIHRoZSBkYXRhIG9iamVjdHMgYXJlIGluc3RlYWQgYnkgZGVmYXVsdCBjbG9uZWQgdG8gYXZvaWQgdGhlIG9yaWdpbmFsIGRhdGEgb2JqZWN0IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZVxuICAgICAqIHN0b3JlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdXNlUmF3RGF0YSlcbiAgICAgKi9cbiAgICB1c2VSYXdEYXRhID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgdmFsaWRhdGVzIHRoZSByZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIHJlcXVlc3RzIG1hZGUgYnkgdGhlIENydWQgTWFuYWdlci5cbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIENydWQgTWFuYWdlciBjaGVja3MgZXZlcnkgcGFyc2VkIHJlc3BvbnNlIHN0cnVjdHVyZSBmb3IgZXJyb3JzXG4gICAgICogYW5kIGlmIHRoZSByZXNwb25zZSBmb3JtYXQgaXMgaW52YWxpZCwgYSB3YXJuaW5nIGlzIGxvZ2dlZCB0byB0aGUgYnJvd3NlciBjb25zb2xlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdmFsaWRhdGVSZXNwb25zZSlcbiAgICAgKi9cbiAgICB2YWxpZGF0ZVJlc3BvbnNlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogYHRydWVgIHRvIHdyaXRlIGFsbCBmaWVsZHMgZnJvbSB0aGUgcmVjb3JkIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogSWYgc2V0IHRvIGBmYWxzZWAgaXQgd2lsbCBvbmx5IHNlbmQgdGhlIGZpZWxkcyB0aGF0IHdlcmUgbW9kaWZpZWQuXG4gICAgICogTm90ZSB0aGF0IGFueSBmaWVsZHMgdGhhdCBoYXZlIFtwZXJzaXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9maWVsZC9EYXRhRmllbGQjY29uZmlnLXBlcnNpc3QpIHNldCB0byBgZmFsc2VgIHdpbGxcbiAgICAgKiBzdGlsbCBiZSBpZ25vcmVkIGFuZCBmaWVsZHMgaGF2aW5nIFthbHdheXNXcml0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvZmllbGQvRGF0YUZpZWxkI2NvbmZpZy1hbHdheXNXcml0ZSkgc2V0IHRvIGB0cnVlYFxuICAgICAqIHdpbGwgYWx3YXlzIGJlIGluY2x1ZGVkLlxuICAgICAqL1xuICAgIHdyaXRlQWxsRmllbGRzID8gOiBib29sZWFuXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1nYW50dC1wcm9qZWN0LW1vZGVsJyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1HYW50dFByb2plY3RNb2RlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFByb2plY3RNb2RlbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ1Byb2plY3RNb2RlbCc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZUxvYWQnLFxuICAgICAgICAnb25CZWZvcmVMb2FkQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVSZXNwb25zZUFwcGx5JyxcbiAgICAgICAgJ29uQmVmb3JlU2VuZCcsXG4gICAgICAgICdvbkJlZm9yZVN5bmMnLFxuICAgICAgICAnb25CZWZvcmVTeW5jQXBwbHknLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNoYW5nZScsXG4gICAgICAgICdvbkN5Y2xlJyxcbiAgICAgICAgJ29uRGF0YVJlYWR5JyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkVtcHR5Q2FsZW5kYXInLFxuICAgICAgICAnb25IYXNDaGFuZ2VzJyxcbiAgICAgICAgJ29uTG9hZCcsXG4gICAgICAgICdvbkxvYWRDYW5jZWxlZCcsXG4gICAgICAgICdvbkxvYWRGYWlsJyxcbiAgICAgICAgJ29uTm9DaGFuZ2VzJyxcbiAgICAgICAgJ29uUHJvZ3Jlc3MnLFxuICAgICAgICAnb25SZXF1ZXN0RG9uZScsXG4gICAgICAgICdvblJlcXVlc3RGYWlsJyxcbiAgICAgICAgJ29uUmV2aXNpb25Ob3RpZmljYXRpb24nLFxuICAgICAgICAnb25TY2hlZHVsaW5nQ29uZmxpY3QnLFxuICAgICAgICAnb25TeW5jJyxcbiAgICAgICAgJ29uU3luY0NhbmNlbGVkJyxcbiAgICAgICAgJ29uU3luY0RlbGF5ZWQnLFxuICAgICAgICAnb25TeW5jRmFpbCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG5cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bUdhbnR0UHJvamVjdE1vZGVsQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FkZENvbnN0cmFpbnRPbkRhdGVTZXQnLFxuICAgICAgICAnYWRqdXN0RHVyYXRpb25Ub0RTVCcsXG4gICAgICAgICdhbGxvd1Bvc3Rwb25lZENvbmZsaWN0cycsXG4gICAgICAgICdhc3NpZ25tZW50TW9kZWxDbGFzcycsXG4gICAgICAgICdhc3NpZ25tZW50cycsXG4gICAgICAgICdhc3NpZ25tZW50c0RhdGEnLFxuICAgICAgICAnYXNzaWdubWVudFN0b3JlJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2F1dG9DYWxjdWxhdGVQZXJjZW50RG9uZUZvclBhcmVudFRhc2tzJyxcbiAgICAgICAgJ2F1dG9Mb2FkJyxcbiAgICAgICAgJ2F1dG9NZXJnZUFkamFjZW50U2VnbWVudHMnLFxuICAgICAgICAnYXV0b1Bvc3Rwb25lQ29uZmxpY3RzJyxcbiAgICAgICAgJ2F1dG9Qb3N0cG9uZWRDb25mbGljdHMnLFxuICAgICAgICAnYXV0b1NjaGVkdWxlTWFudWFsVGFza3NPblNlY29uZFBhc3MnLFxuICAgICAgICAnYXV0b1NldENvbnN0cmFpbnRzJyxcbiAgICAgICAgJ2F1dG9TeW5jJyxcbiAgICAgICAgJ2F1dG9TeW5jVGltZW91dCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnYndjQ29uZmxpY3RQb3N0cG9uZScsXG4gICAgICAgICdjYWxlbmRhcicsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZScsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2NhbGVuZGFyTW9kZWxDbGFzcycsXG4gICAgICAgICdjYWxlbmRhcnMnLFxuICAgICAgICAnY2FsZW5kYXJzRGF0YScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NoaWxkcmVuJyxcbiAgICAgICAgJ2NydWRTdG9yZXMnLFxuICAgICAgICAnZGF5c1Blck1vbnRoJyxcbiAgICAgICAgJ2RheXNQZXJXZWVrJyxcbiAgICAgICAgJ2RlbGF5Q2FsY3VsYXRpb24nLFxuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2RlcGVuZGVuY2llc0NhbGVuZGFyJyxcbiAgICAgICAgJ2RlcGVuZGVuY2llc0RhdGEnLFxuICAgICAgICAnZGVwZW5kZW5jeU1vZGVsQ2xhc3MnLFxuICAgICAgICAnZGVwZW5kZW5jeVN0b3JlJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2RpcmVjdGlvbicsXG4gICAgICAgICdlbmFibGVQcm9ncmVzc05vdGlmaWNhdGlvbnMnLFxuICAgICAgICAnZW5jb2RlcicsXG4gICAgICAgICdlbmREYXRlJyxcbiAgICAgICAgJ2V2ZW50c0RhdGEnLFxuICAgICAgICAnZXZlbnRTdG9yZScsXG4gICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICdmb3JjZVN5bmMnLFxuICAgICAgICAnaG91cnNQZXJEYXknLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlQ29uc3RyYWludHNPbkNvbmZsaWN0RHVyaW5nU2Vjb25kUGFzcycsXG4gICAgICAgICdpZ25vcmVSZW1vdGVDaGFuZ2VzSW5TVE0nLFxuICAgICAgICAnaW5jbHVkZUFzYXBBbGFwQXNDb25zdHJhaW50cycsXG4gICAgICAgICdpbmNsdWRlQ2hpbGRyZW5JblJlbW92ZVJlcXVlc3QnLFxuICAgICAgICAnaW5jbHVkZUxlZ2FjeURhdGFQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ2lzRnVsbHlMb2FkZWQnLFxuICAgICAgICAnanNvbicsXG4gICAgICAgICdsYXp5TG9hZCcsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9hZFVybCcsXG4gICAgICAgICdtYXhDYWxlbmRhclJhbmdlJyxcbiAgICAgICAgJ21heENyaXRpY2FsUGF0aHNDb3VudCcsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ29yZGVyZWRQYXJlbnRJbmRleCcsXG4gICAgICAgICdwYWdlU2l6ZScsXG4gICAgICAgICdwYXJlbnRJZCcsXG4gICAgICAgICdwYXJlbnRJbmRleCcsXG4gICAgICAgICdwaGFudG9tSWRGaWVsZCcsXG4gICAgICAgICdwaGFudG9tUGFyZW50SWRGaWVsZCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZW1vdGVDaGlsZENvdW50JyxcbiAgICAgICAgJ3JlbW90ZVBhZ2luZycsXG4gICAgICAgICdyZXF1ZXN0RGF0YScsXG4gICAgICAgICdyZXNldElkc0JlZm9yZVN5bmMnLFxuICAgICAgICAncmVzZXRVbmRvUmVkb1F1ZXVlc0FmdGVyTG9hZCcsXG4gICAgICAgICdyZXNvdXJjZU1vZGVsQ2xhc3MnLFxuICAgICAgICAncmVzb3VyY2VzJyxcbiAgICAgICAgJ3Jlc291cmNlc0RhdGEnLFxuICAgICAgICAncmVzb3VyY2VTdG9yZScsXG4gICAgICAgICdyZXNvdXJjZVN0b3JlQ2xhc3MnLFxuICAgICAgICAnc2hvdWxkU3luY0RhdGFPbkxvYWQnLFxuICAgICAgICAnc2lsZW5jZUluaXRpYWxDb21taXQnLFxuICAgICAgICAnc2tpcE5vbldvcmtpbmdUaW1lSW5EdXJhdGlvbldoZW5TY2hlZHVsaW5nTWFudWFsbHknLFxuICAgICAgICAnc2tpcE5vbldvcmtpbmdUaW1lV2hlblNjaGVkdWxpbmdNYW51YWxseScsXG4gICAgICAgICdza2lwU3VjY2Vzc1Byb3BlcnR5JyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGFydGVkVGFza1NjaGVkdWxpbmcnLFxuICAgICAgICAnc3RhdHVzRGF0ZScsXG4gICAgICAgICdzdG0nLFxuICAgICAgICAnc3RvcmVJZFByb3BlcnR5JyxcbiAgICAgICAgJ3N1cHBvcnRTaG9ydFN5bmNSZXNwb25zZScsXG4gICAgICAgICdzeW5jQXBwbHlTZXF1ZW5jZScsXG4gICAgICAgICdzeW5jVXJsJyxcbiAgICAgICAgJ3Rhc2tNb2RlbENsYXNzJyxcbiAgICAgICAgJ3Rhc2tzJyxcbiAgICAgICAgJ3Rhc2tzRGF0YScsXG4gICAgICAgICd0YXNrU3RvcmUnLFxuICAgICAgICAndGFza1N0b3JlQ2xhc3MnLFxuICAgICAgICAndGltZVJhbmdlcycsXG4gICAgICAgICd0aW1lUmFuZ2VzRGF0YScsXG4gICAgICAgICd0aW1lUmFuZ2VTdG9yZScsXG4gICAgICAgICd0aW1lWm9uZScsXG4gICAgICAgICd0b0pTT05SZXN1bHRGb3JtYXQnLFxuICAgICAgICAndHJhY2tQcm9qZWN0TW9kZWxDaGFuZ2VzJyxcbiAgICAgICAgJ3RyYWNrUmVzcG9uc2VUeXBlJyxcbiAgICAgICAgJ3RyYW5zcG9ydCcsXG4gICAgICAgICd1c2VSYXdEYXRhJyxcbiAgICAgICAgJ3ZhbGlkYXRlUmVzcG9uc2UnLFxuICAgICAgICAnd3JpdGVBbGxGaWVsZHMnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWRqdXN0RHVyYXRpb25Ub0RTVCcsXG4gICAgICAgICdhc3NpZ25tZW50TW9kZWxDbGFzcycsXG4gICAgICAgICdhc3NpZ25tZW50c0RhdGEnLFxuICAgICAgICAnYXNzaWdubWVudFN0b3JlQ2xhc3MnLFxuICAgICAgICAnYXV0b0xvYWQnLFxuICAgICAgICAnYXV0b1NldENvbnN0cmFpbnRzJyxcbiAgICAgICAgJ2F1dG9TeW5jJyxcbiAgICAgICAgJ2F1dG9TeW5jVGltZW91dCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnYndjQ29uZmxpY3RQb3N0cG9uZScsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2NhbGVuZGFyTW9kZWxDbGFzcycsXG4gICAgICAgICdjYWxlbmRhcnNEYXRhJyxcbiAgICAgICAgJ2NoaWxkcmVuJyxcbiAgICAgICAgJ2RlbGF5Q2FsY3VsYXRpb24nLFxuICAgICAgICAnZGVwZW5kZW5jaWVzRGF0YScsXG4gICAgICAgICdkZXBlbmRlbmN5TW9kZWxDbGFzcycsXG4gICAgICAgICdkZXBlbmRlbmN5U3RvcmVDbGFzcycsXG4gICAgICAgICdlbmNvZGVyJyxcbiAgICAgICAgJ2V2ZW50c0RhdGEnLFxuICAgICAgICAnZXhwYW5kZWQnLFxuICAgICAgICAnaW5jbHVkZUFzYXBBbGFwQXNDb25zdHJhaW50cycsXG4gICAgICAgICdpbmNsdWRlQ2hpbGRyZW5JblJlbW92ZVJlcXVlc3QnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ21heENhbGVuZGFyUmFuZ2UnLFxuICAgICAgICAnb3JkZXJlZFBhcmVudEluZGV4JyxcbiAgICAgICAgJ3BhZ2VTaXplJyxcbiAgICAgICAgJ3BhcmVudEluZGV4JyxcbiAgICAgICAgJ3BoYW50b21JZEZpZWxkJyxcbiAgICAgICAgJ3BoYW50b21QYXJlbnRJZEZpZWxkJyxcbiAgICAgICAgJ3JlbW90ZVBhZ2luZycsXG4gICAgICAgICdyZXF1ZXN0RGF0YScsXG4gICAgICAgICdyZXNldElkc0JlZm9yZVN5bmMnLFxuICAgICAgICAncmVzZXRVbmRvUmVkb1F1ZXVlc0FmdGVyTG9hZCcsXG4gICAgICAgICdyZXNvdXJjZU1vZGVsQ2xhc3MnLFxuICAgICAgICAncmVzb3VyY2VzRGF0YScsXG4gICAgICAgICdyZXNvdXJjZVN0b3JlQ2xhc3MnLFxuICAgICAgICAnc2lsZW5jZUluaXRpYWxDb21taXQnLFxuICAgICAgICAnc2tpcFN1Y2Nlc3NQcm9wZXJ0eScsXG4gICAgICAgICdzdG9yZUlkUHJvcGVydHknLFxuICAgICAgICAnc3VwcG9ydFNob3J0U3luY1Jlc3BvbnNlJyxcbiAgICAgICAgJ3Rhc2tNb2RlbENsYXNzJyxcbiAgICAgICAgJ3Rhc2tzRGF0YScsXG4gICAgICAgICd0YXNrU3RvcmVDbGFzcycsXG4gICAgICAgICd0aW1lUmFuZ2VzRGF0YScsXG4gICAgICAgICd0b0pTT05SZXN1bHRGb3JtYXQnLFxuICAgICAgICAndHJhY2tSZXNwb25zZVR5cGUnLFxuICAgICAgICAndHJhbnNwb3J0JyxcbiAgICAgICAgJ3VzZVJhd0RhdGEnLFxuICAgICAgICAndmFsaWRhdGVSZXNwb25zZScsXG4gICAgICAgICd3cml0ZUFsbEZpZWxkcydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1HYW50dFByb2plY3RNb2RlbENvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZGRDb25zdHJhaW50T25EYXRlU2V0JyxcbiAgICAgICAgJ2FsbENoaWxkcmVuJyxcbiAgICAgICAgJ2FsbG93UG9zdHBvbmVkQ29uZmxpY3RzJyxcbiAgICAgICAgJ2FsbFVuZmlsdGVyZWRDaGlsZHJlbicsXG4gICAgICAgICdhc3NpZ25tZW50cycsXG4gICAgICAgICdhc3NpZ25tZW50U3RvcmUnLFxuICAgICAgICAnYXV0b0NhbGN1bGF0ZVBlcmNlbnREb25lRm9yUGFyZW50VGFza3MnLFxuICAgICAgICAnYXV0b01lcmdlQWRqYWNlbnRTZWdtZW50cycsXG4gICAgICAgICdhdXRvUG9zdHBvbmVDb25mbGljdHMnLFxuICAgICAgICAnYXV0b1Bvc3Rwb25lZENvbmZsaWN0cycsXG4gICAgICAgICdhdXRvU2NoZWR1bGVNYW51YWxUYXNrc09uU2Vjb25kUGFzcycsXG4gICAgICAgICdjYWxlbmRhcicsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZScsXG4gICAgICAgICdjYWxlbmRhcnMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjcml0aWNhbFBhdGhzJyxcbiAgICAgICAgJ2NydWRTdG9yZXMnLFxuICAgICAgICAnZGF5c1Blck1vbnRoJyxcbiAgICAgICAgJ2RheXNQZXJXZWVrJyxcbiAgICAgICAgJ2RlcGVuZGVuY2llcycsXG4gICAgICAgICdkZXBlbmRlbmNpZXNDYWxlbmRhcicsXG4gICAgICAgICdkZXBlbmRlbmN5U3RvcmUnLFxuICAgICAgICAnZGVzY2VuZGFudENvdW50JyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2RpcmVjdGlvbicsXG4gICAgICAgICdlbmFibGVQcm9ncmVzc05vdGlmaWNhdGlvbnMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudFN0b3JlJyxcbiAgICAgICAgJ2ZvcmNlU3luYycsXG4gICAgICAgICdoYXNHZW5lcmF0ZWRJZCcsXG4gICAgICAgICdob3Vyc1BlckRheScsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVDb25zdHJhaW50c09uQ29uZmxpY3REdXJpbmdTZWNvbmRQYXNzJyxcbiAgICAgICAgJ2lnbm9yZVJlbW90ZUNoYW5nZXNJblNUTScsXG4gICAgICAgICdpbmNsdWRlTGVnYWN5RGF0YVByb3BlcnRpZXMnLFxuICAgICAgICAnaW5saW5lRGF0YScsXG4gICAgICAgICdpbnRlcm5hbElkJyxcbiAgICAgICAgJ2lzQ29tbWl0dGluZycsXG4gICAgICAgICdpc0NyZWF0aW5nJyxcbiAgICAgICAgJ2lzRnVsbHlMb2FkZWQnLFxuICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgICdqc29uJyxcbiAgICAgICAgJ2xhenlMb2FkJyxcbiAgICAgICAgJ2xvYWRVcmwnLFxuICAgICAgICAnbWF4Q3JpdGljYWxQYXRoc0NvdW50JyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAncGFyZW50SWQnLFxuICAgICAgICAncHJldmlvdXNTaWJsaW5nc1RvdGFsQ291bnQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVtb3RlQ2hpbGRDb3VudCcsXG4gICAgICAgICdyZXNvdXJjZXMnLFxuICAgICAgICAncmVzb3VyY2VTdG9yZScsXG4gICAgICAgICdzZWdtZW50TW9kZWxDbGFzcycsXG4gICAgICAgICdzaG91bGRTeW5jRGF0YU9uTG9hZCcsXG4gICAgICAgICdza2lwTm9uV29ya2luZ1RpbWVJbkR1cmF0aW9uV2hlblNjaGVkdWxpbmdNYW51YWxseScsXG4gICAgICAgICdza2lwTm9uV29ya2luZ1RpbWVXaGVuU2NoZWR1bGluZ01hbnVhbGx5JyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGFydGVkVGFza1NjaGVkdWxpbmcnLFxuICAgICAgICAnc3RhdHVzRGF0ZScsXG4gICAgICAgICdzdG0nLFxuICAgICAgICAnc3luY0FwcGx5U2VxdWVuY2UnLFxuICAgICAgICAnc3luY1VybCcsXG4gICAgICAgICd0YXNrcycsXG4gICAgICAgICd0YXNrU3RvcmUnLFxuICAgICAgICAndGltZVJhbmdlcycsXG4gICAgICAgICd0aW1lUmFuZ2VTdG9yZScsXG4gICAgICAgICd0aW1lWm9uZScsXG4gICAgICAgICd0cmFja1Byb2plY3RNb2RlbENoYW5nZXMnLFxuICAgICAgICAndmlzaWJsZURlc2NlbmRhbnRDb3VudCdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBQcm9qZWN0TW9kZWw7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRqdXN0RHVyYXRpb25Ub0RTVCAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFzc2lnbm1lbnRNb2RlbENsYXNzICAgICAgICAgICAhIDogdHlwZW9mIEFzc2lnbm1lbnRNb2RlbDtcbiAgICBASW5wdXQoKSBhc3NpZ25tZW50c0RhdGEgICAgICAgICAgICAgICAgISA6IEFzc2lnbm1lbnRNb2RlbENvbmZpZ1tdfEFzc2lnbm1lbnRNb2RlbFtdO1xuICAgIEBJbnB1dCgpIGFzc2lnbm1lbnRTdG9yZUNsYXNzICAgICAgICAgICAhIDogdHlwZW9mIEFzc2lnbm1lbnRTdG9yZTtcbiAgICBASW5wdXQoKSBhdXRvTG9hZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b1NldENvbnN0cmFpbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGF1dG9TeW5jICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhdXRvU3luY1RpbWVvdXQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBid2NDb25mbGljdFBvc3Rwb25lICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2FsZW5kYXJNYW5hZ2VyU3RvcmVDbGFzcyAgICAgICEgOiB0eXBlb2YgQ2FsZW5kYXJNYW5hZ2VyU3RvcmU7XG4gICAgQElucHV0KCkgY2FsZW5kYXJNb2RlbENsYXNzICAgICAgICAgICAgICEgOiB0eXBlb2YgQ2FsZW5kYXJNb2RlbDtcbiAgICBASW5wdXQoKSBjYWxlbmRhcnNEYXRhICAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyTW9kZWxDb25maWdbXXxDYWxlbmRhck1vZGVsW107XG4gICAgQElucHV0KCkgY2hpbGRyZW4gICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBkZWxheUNhbGN1bGF0aW9uICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGVwZW5kZW5jaWVzRGF0YSAgICAgICAgICAgICAgICEgOiBEZXBlbmRlbmN5TW9kZWxDb25maWdbXXxEZXBlbmRlbmN5TW9kZWxbXTtcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5TW9kZWxDbGFzcyAgICAgICAgICAgISA6IHR5cGVvZiBEZXBlbmRlbmN5TW9kZWw7XG4gICAgQElucHV0KCkgZGVwZW5kZW5jeVN0b3JlQ2xhc3MgICAgICAgICAgICEgOiB0eXBlb2YgRGVwZW5kZW5jeVN0b3JlO1xuICAgIEBJbnB1dCgpIGVuY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICByZXF1ZXN0RGF0YT86IG9iamVjdFxuICAgIH07XG4gICAgQElucHV0KCkgZXZlbnRzRGF0YSAgICAgICAgICAgICAgICAgICAgICEgOiBUYXNrTW9kZWxDb25maWdbXXxUYXNrTW9kZWxbXTtcbiAgICBASW5wdXQoKSBleHBhbmRlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5jbHVkZUFzYXBBbGFwQXNDb25zdHJhaW50cyAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVDaGlsZHJlbkluUmVtb3ZlUmVxdWVzdCAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICAgISA6IFByb2plY3RNb2RlbExpc3RlbmVycztcbiAgICBASW5wdXQoKSBtYXhDYWxlbmRhclJhbmdlICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBvcmRlcmVkUGFyZW50SW5kZXggICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwYWdlU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwYXJlbnRJbmRleCAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwaGFudG9tSWRGaWVsZCAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBwaGFudG9tUGFyZW50SWRGaWVsZCAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZW1vdGVQYWdpbmcgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVxdWVzdERhdGEgICAgICAgICAgICAgICAgICAgICEgOiAocGFyYW1zOiBMYXp5TG9hZENydWRNYW5hZ2VyUmVxdWVzdFBhcmFtcykgPT4gUHJvbWlzZTxDcnVkTWFuYWdlclJlcXVlc3RSZXNwb25zZT47XG4gICAgQElucHV0KCkgcmVzZXRJZHNCZWZvcmVTeW5jICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc2V0VW5kb1JlZG9RdWV1ZXNBZnRlckxvYWQgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNvdXJjZU1vZGVsQ2xhc3MgICAgICAgICAgICAgISA6IHR5cGVvZiBSZXNvdXJjZU1vZGVsO1xuICAgIEBJbnB1dCgpIHJlc291cmNlc0RhdGEgICAgICAgICAgICAgICAgICAhIDogUmVzb3VyY2VNb2RlbENvbmZpZ1tdfFJlc291cmNlTW9kZWxbXTtcbiAgICBASW5wdXQoKSByZXNvdXJjZVN0b3JlQ2xhc3MgICAgICAgICAgICAgISA6IHR5cGVvZiBSZXNvdXJjZVN0b3JlO1xuICAgIEBJbnB1dCgpIHNpbGVuY2VJbml0aWFsQ29tbWl0ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBza2lwU3VjY2Vzc1Byb3BlcnR5ICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RvcmVJZFByb3BlcnR5ICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3VwcG9ydFNob3J0U3luY1Jlc3BvbnNlICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRhc2tNb2RlbENsYXNzICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIFRhc2tNb2RlbDtcbiAgICBASW5wdXQoKSB0YXNrc0RhdGEgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tNb2RlbENvbmZpZ1tdfFRhc2tNb2RlbFtdO1xuICAgIEBJbnB1dCgpIHRhc2tTdG9yZUNsYXNzICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIFRhc2tTdG9yZTtcbiAgICBASW5wdXQoKSB0aW1lUmFuZ2VzRGF0YSAgICAgICAgICAgICAgICAgISA6IFRpbWVTcGFuQ29uZmlnW118VGltZVNwYW5bXTtcbiAgICBASW5wdXQoKSB0b0pTT05SZXN1bHRGb3JtYXQgICAgICAgICAgICAgISA6ICdpbmxpbmVEYXRhJ3wnbW9kZWwnO1xuICAgIEBJbnB1dCgpIHRyYWNrUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0cmFuc3BvcnQgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgbG9hZD86IG9iamVjdFxuICAgICAgICBzeW5jPzogb2JqZWN0XG4gICAgfTtcbiAgICBASW5wdXQoKSB1c2VSYXdEYXRhICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdmFsaWRhdGVSZXNwb25zZSAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHdyaXRlQWxsRmllbGRzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhZGRDb25zdHJhaW50T25EYXRlU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd1Bvc3Rwb25lZENvbmZsaWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhc3NpZ25tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgYXNzaWdubWVudFN0b3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFzc2lnbm1lbnRTdG9yZXxBc3NpZ25tZW50U3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgYXV0b0NhbGN1bGF0ZVBlcmNlbnREb25lRm9yUGFyZW50VGFza3MgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b01lcmdlQWRqYWNlbnRTZWdtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b1Bvc3Rwb25lQ29uZmxpY3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b1Bvc3Rwb25lZENvbmZsaWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b1NjaGVkdWxlTWFudWFsVGFza3NPblNlY29uZFBhc3MgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2FsZW5kYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyTW9kZWx8c3RyaW5nfENhbGVuZGFyTW9kZWxDb25maWc7XG4gICAgQElucHV0KCkgY2FsZW5kYXJNYW5hZ2VyU3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyTWFuYWdlclN0b3JlfENhbGVuZGFyTWFuYWdlclN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNhbGVuZGFycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBDYWxlbmRhck1vZGVsW118Q2FsZW5kYXJNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNydWRTdG9yZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBDcnVkTWFuYWdlclN0b3JlRGVzY3JpcHRvcltdfFN0b3JlW118c3RyaW5nW118U3RvcmVDb25maWdbXTtcbiAgICBASW5wdXQoKSBkYXlzUGVyTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGRheXNQZXJXZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgZGVwZW5kZW5jaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IERlcGVuZGVuY3lNb2RlbFtdfERlcGVuZGVuY3lNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGRlcGVuZGVuY2llc0NhbGVuZGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnVG9FdmVudCd8J0Zyb21FdmVudCd8J1Byb2plY3QnfCdBbGxXb3JraW5nJztcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5U3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogRGVwZW5kZW5jeVN0b3JlfERlcGVuZGVuY3lTdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnRm9yd2FyZCd8J0JhY2t3YXJkJztcbiAgICBASW5wdXQoKSBlbmFibGVQcm9ncmVzc05vdGlmaWNhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmREYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERhdGU7XG4gICAgQElucHV0KCkgZXZlbnRTdG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tTdG9yZXxUYXNrU3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgZm9yY2VTeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG91cnNQZXJEYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBpZ25vcmVDb25zdHJhaW50c09uQ29uZmxpY3REdXJpbmdTZWNvbmRQYXNzICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZ25vcmVSZW1vdGVDaGFuZ2VzSW5TVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbmNsdWRlTGVnYWN5RGF0YVByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc0Z1bGx5TG9hZGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBqc29uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhenlMb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtsYXp5TG9hZDogeyBjaHVua1NpemU6IG51bWJlciB9LCBidWZmZXJVbml0OiBEdXJhdGlvblVuaXQsIGJ1ZmZlckFtb3VudDogbnVtYmVyfTtcbiAgICBASW5wdXQoKSBsb2FkVXJsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heENyaXRpY2FsUGF0aHNDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBwYXJlbnRJZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZ3xudWxsO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbW90ZUNoaWxkQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcmVzb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlc291cmNlTW9kZWxbXXxSZXNvdXJjZU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgcmVzb3VyY2VTdG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlc291cmNlU3RvcmV8UmVzb3VyY2VTdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBzaG91bGRTeW5jRGF0YU9uTG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKG9wdGlvbnM6IHsgc3RvcmU6IFN0b3JlLCByZWNvcmRzOiBNb2RlbCwgZGF0YTogb2JqZWN0W10gfSkgPT4gU2V0PGFueT58Ym9vbGVhbjtcbiAgICBASW5wdXQoKSBza2lwTm9uV29ya2luZ1RpbWVJbkR1cmF0aW9uV2hlblNjaGVkdWxpbmdNYW51YWxseSAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBza2lwTm9uV29ya2luZ1RpbWVXaGVuU2NoZWR1bGluZ01hbnVhbGx5ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdGFydERhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERhdGU7XG4gICAgQElucHV0KCkgc3RhcnRlZFRhc2tTY2hlZHVsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0dXNEYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBzdG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogQ29yZVN0YXRlVHJhY2tpbmdNYW5hZ2VyfFN0YXRlVHJhY2tpbmdNYW5hZ2VyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHN5bmNBcHBseVNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmdbXXxDcnVkTWFuYWdlclN0b3JlRGVzY3JpcHRvcltdO1xuICAgIEBJbnB1dCgpIHN5bmNVcmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGFza3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHRhc2tTdG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUYXNrU3RvcmV8VGFza1N0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRpbWVSYW5nZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUaW1lUmFuZ2VNb2RlbFtdfFRpbWVSYW5nZU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgdGltZVJhbmdlU3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFN0b3JlfFRpbWVSYW5nZVN0b3JlQ29uZmlnfFRpbWVSYW5nZVN0b3JlO1xuICAgIEBJbnB1dCgpIHRpbWVab25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHRyYWNrUHJvamVjdE1vZGVsQ2hhbmdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYWxsQ2hpbGRyZW4gICAgICAgICAgICAgICAgISA6IE1vZGVsW107XG4gICAgQElucHV0KCkgYWxsVW5maWx0ZXJlZENoaWxkcmVuICAgICAgISA6IE1vZGVsW107XG4gICAgQElucHV0KCkgY3JpdGljYWxQYXRocyAgICAgICAgICAgICAgISA6IGFueVtdO1xuICAgIEBJbnB1dCgpIGRlc2NlbmRhbnRDb3VudCAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgaGFzR2VuZXJhdGVkSWQgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5saW5lRGF0YSAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBpbnRlcm5hbElkICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGlzQ29tbWl0dGluZyAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzQ3JlYXRpbmcgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzVmFsaWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXZpb3VzU2libGluZ3NUb3RhbENvdW50ICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc2VnbWVudE1vZGVsQ2xhc3MgICAgICAgICAgISA6IHR5cGVvZiBFdmVudFNlZ21lbnRNb2RlbDtcbiAgICBASW5wdXQoKSB2aXNpYmxlRGVzY2VuZGFudENvdW50ICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgW2xvYWQgcmVxdWVzdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tbG9hZCkgaXMgc2VudC4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIGxvYWQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucGFjayBUaGUgZGF0YSBwYWNrYWdlIHdoaWNoIGNvbnRhaW5zIGRhdGEgZm9yIGFsbCBzdG9yZXMgbWFuYWdlZCBieSB0aGUgY3J1ZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUxvYWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHBhY2s6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBsb2FkZWQgZGF0YSBnZXQgYXBwbGllZCB0byB0aGUgc3RvcmVzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRhdGEgYXBwbHlpbmcuXG4gICAgICogVGhpcyBldmVudCBjYW4gYmUgdXNlZCBmb3Igc2VydmVyIGRhdGEgcHJlcHJvY2Vzc2luZy4gVG8gYWNoaWV2ZSBpdCB1c2VyIGNhbiBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vcHRpb25zIE9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIFtsb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBtZXRob2QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlTG9hZEFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCByZXNwb25zZTogb2JqZWN0LCBvcHRpb25zOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgc2VydmVyIHJlc3BvbnNlIGdldHMgYXBwbGllZCB0byB0aGUgc3RvcmVzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRhdGEgYXBwbHlpbmcuXG4gICAgICogVGhpcyBldmVudCBjYW4gYmUgdXNlZCBmb3Igc2VydmVyIGRhdGEgcHJlcHJvY2Vzc2luZy4gVG8gYWNoaWV2ZSBpdCB1c2VyIGNhbiBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7J3N5bmMnLCdsb2FkJ30gZXZlbnQucmVxdWVzdFR5cGUgVGhlIHJlcXVlc3QgdHlwZSAoYHN5bmNgIG9yIGBsb2FkYCkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlIFRoZSBkZWNvZGVkIHNlcnZlciByZXNwb25zZSBvYmplY3QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVzcG9uc2VBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVxdWVzdFR5cGU6ICdzeW5jJ3wnbG9hZCcsIHJlc3BvbnNlOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYSByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtYmVmb3JlU2VuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5jcnVkTWFuYWdlciBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5wYXJhbXMgSFRUUCByZXF1ZXN0IHBhcmFtcyB0byBiZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3QgVVJMLlxuICAgICAqIEBwYXJhbSB7J3N5bmMnLCdsb2FkJ30gZXZlbnQucmVxdWVzdFR5cGUgQ3J1ZE1hbmFnZXIgcmVxdWVzdCB0eXBlIChgbG9hZGAvYHN5bmNgKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXF1ZXN0Q29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBBamF4IHJlcXVlc3QgY2FsbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNlbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjcnVkTWFuYWdlcjogQWJzdHJhY3RDcnVkTWFuYWdlciwgcGFyYW1zOiBvYmplY3QsIHJlcXVlc3RUeXBlOiAnc3luYyd8J2xvYWQnLCByZXF1ZXN0Q29uZmlnOiBvYmplY3QgfSkgPT4gUHJvbWlzZTx2b2lkPil8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBbc3luYyByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1zeW5jKSBpcyBzZW50LiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgc3luYyByZXF1ZXN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNldmVudC1iZWZvcmVTeW5jKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5wYWNrIFRoZSBkYXRhIHBhY2thZ2Ugd2hpY2ggY29udGFpbnMgZGF0YSBmb3IgYWxsIHN0b3JlcyBtYW5hZ2VkIGJ5IHRoZSBjcnVkIG1hbmFnZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3luYzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcGFjazogb2JqZWN0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHN5bmMgcmVzcG9uc2UgZGF0YSBnZXQgYXBwbGllZCB0byB0aGUgc3RvcmVzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRhdGEgYXBwbHlpbmcuXG4gICAgICogVGhpcyBldmVudCBjYW4gYmUgdXNlZCBmb3Igc2VydmVyIGRhdGEgcHJlcHJvY2Vzc2luZy4gVG8gYWNoaWV2ZSBpdCB1c2VyIGNhbiBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN5bmNBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVzcG9uc2U6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRhdGEgaW4gYW55IG9mIHRoZSBwcm9qZWN0cyBzdG9yZXMgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtY2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQuc291cmNlIFRoaXMgcHJvamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLlN0b3JlfSBldmVudC5zdG9yZSBBZmZlY3RlZCBzdG9yZVxuICAgICAqIEBwYXJhbSB7J3JlbW92ZScsJ3JlbW92ZUFsbCcsJ2FkZCcsJ2NsZWFyY2hhbmdlcycsJ2ZpbHRlcicsJ3VwZGF0ZScsJ2RhdGFzZXQnLCdyZXBsYWNlJ30gZXZlbnQuYWN0aW9uIE5hbWUgb2YgYWN0aW9uIHdoaWNoIHRyaWdnZXJlZCB0aGUgY2hhbmdlLiBNYXkgYmUgb25lIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBhYm92ZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIENoYW5nZWQgcmVjb3JkLCBmb3IgYWN0aW9ucyB0aGF0IGFmZmVjdHMgZXhhY3RseSBvbmUgcmVjb3JkIChgJ3VwZGF0ZSdgKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgQ2hhbmdlZCByZWNvcmRzLCBwYXNzZWQgZm9yIGFsbCBhY3Rpb25zIGV4Y2VwdCBgJ3JlbW92ZUFsbCdgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgUGFzc2VkIGZvciB0aGUgYCd1cGRhdGUnYCBhY3Rpb24sIGluZm8gb24gd2hpY2ggcmVjb3JkIGZpZWxkcyBjaGFuZ2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQcm9qZWN0TW9kZWwsIHN0b3JlOiBTdG9yZSwgYWN0aW9uOiAncmVtb3ZlJ3wncmVtb3ZlQWxsJ3wnYWRkJ3wnY2xlYXJjaGFuZ2VzJ3wnZmlsdGVyJ3wndXBkYXRlJ3wnZGF0YXNldCd8J3JlcGxhY2UnLCByZWNvcmQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBjaGFuZ2VzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIEVuZ2luZSBkZXRlY3RzIGEgY29tcHV0YXRpb24gY3ljbGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5zY2hlZHVsaW5nSXNzdWUgU2NoZWR1bGluZyBlcnJvciBkZXNjcmliaW5nIHRoZSBjYXNlOlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LnNjaGVkdWxpbmdJc3N1ZS5nZXREZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjeWNsZSBkZXNjcmlwdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5zY2hlZHVsaW5nSXNzdWUuY3ljbGUgT2JqZWN0IHByb3ZpZGluZyB0aGUgY3ljbGUgaW5mb1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LnNjaGVkdWxpbmdJc3N1ZS5nZXRSZXNvbHV0aW9ucyBSZXR1cm5zIHBvc3NpYmxlIHJlc29sdXRpb25zXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuY29udGludWVXaXRoUmVzb2x1dGlvblJlc3VsdCBGdW5jdGlvbiB0byBjYWxsIGFmdGVyIGEgcmVzb2x1dGlvbiBpcyBjaG9zZW4gdG8gcHJvY2VlZCB3aXRoIHRoZSBFbmdpbmUgY2FsY3VsYXRpb25zOiBgYGBqYXZhc2NyaXB0IHByb2plY3Qub24oJ2N5Y2xlJywgKHsgY29udGludWVXaXRoUmVzb2x1dGlvblJlc3VsdCB9KSA9PiB7ICAgICAvLyBjYW5jZWwgY2hhbmdlcyBpbiBjYXNlIG9mIGEgY3ljbGUgICAgIGNvbnRpbnVlV2l0aFJlc29sdXRpb25SZXN1bHQoRWZmZWN0UmVzb2x1dGlvblJlc3VsdC5DYW5jZWwpOyB9KSBgYGAgV2hlcmUgYEVmZmVjdFJlc29sdXRpb25SZXN1bHQuQ2FuY2VsYCByZXN1bHRzIGluIGNhbmNlbGxpbmcgdGhlIGNoYW5nZXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ3ljbGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzY2hlZHVsaW5nSXNzdWU6IHsgZ2V0RGVzY3JpcHRpb246IEZ1bmN0aW9uLCBjeWNsZTogb2JqZWN0LCBnZXRSZXNvbHV0aW9uczogRnVuY3Rpb24gfSwgY29udGludWVXaXRoUmVzb2x1dGlvblJlc3VsdDogRnVuY3Rpb24gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgaXRzIGNhbGN1bGF0aW9ucyBhbmQgdGhlIHJlc3VsdHMgaGFzIGJlZW4gd3JpdHRlbiBiYWNrIHRvIHRoZSByZWNvcmRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNldmVudC1kYXRhUmVhZHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5zb3VyY2UgVGhlIHByb2plY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzSW5pdGlhbENvbW1pdCBGbGFnIHRoYXQgc2hvd3MgaWYgdGhpcyBjb21taXQgaXMgaW5pdGlhbFxuICAgICAqIEBwYXJhbSB7U2V0PGFueT59IGV2ZW50LnJlY29yZHMgU2V0IG9mIGFsbCBbTW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsKXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGluIHRoZSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24uIFVzZSB0aGUgW21vZGlmaWNhdGlvbnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsI3Byb3BlcnR5LW1vZGlmaWNhdGlvbnMpIHByb3BlcnR5IG9mIGVhY2ggTW9kZWwgdG8gaWRlbnRpZnkgbW9kaWZpZWQgZmllbGRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWFkeTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUHJvamVjdE1vZGVsLCBpc0luaXRpYWxDb21taXQ6IGJvb2xlYW4sIHJlY29yZHM6IFNldDxhbnk+IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBFbmdpbmUgZGV0ZWN0cyBhIGNhbGVuZGFyIG1pc2NvbmZpZ3VyYXRpb24gd2hlbiB0aGUgY2FsZW5kYXIgZG9lc1xuICAgICAqIG5vdCBwcm92aWRlIGFueSB3b3JraW5nIHBlcmlvZHMgb2YgdGltZSB3aGljaCBtYWtlcyB1c2FnZSBpbXBvc3NpYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuc2NoZWR1bGluZ0lzc3VlIFNjaGVkdWxpbmcgZXJyb3IgZGVzY3JpYmluZyB0aGUgY2FzZTpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5zY2hlZHVsaW5nSXNzdWUuZ2V0RGVzY3JpcHRpb24gUmV0dXJucyB0aGUgZXJyb3IgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5zY2hlZHVsaW5nSXNzdWUuZ2V0Q2FsZW5kYXIgUmV0dXJucyB0aGUgY2FsZW5kYXIgdGhhdCBtdXN0IGJlIGZpeGVkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuc2NoZWR1bGluZ0lzc3VlLmdldFJlc29sdXRpb25zIFJldHVybnMgcG9zc2libGUgcmVzb2x1dGlvbnNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250aW51ZVdpdGhSZXNvbHV0aW9uUmVzdWx0IEZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgYSByZXNvbHV0aW9uIGlzIGNob3NlbiB0byBwcm9jZWVkIHdpdGggdGhlIEVuZ2luZSBjYWxjdWxhdGlvbnM6IGBgYGphdmFzY3JpcHQgcHJvamVjdC5vbignZW1wdHlDYWxlbmRhcicsICh7IHNjaGVkdWxpbmdJc3N1ZSwgY29udGludWVXaXRoUmVzb2x1dGlvblJlc3VsdCB9KSA9PiB7ICAgICAvLyBhcHBseSB0aGUgZmlyc3QgcmVzb2x1dGlvbiBhbmQgY29udGludWUgICAgIHNjaGVkdWxpbmdJc3N1ZS5nZXRSZXNvbHV0aW9ucygpWzBdLnJlc29sdmUoKTsgICAgIGNvbnRpbnVlV2l0aFJlc29sdXRpb25SZXN1bHQoRWZmZWN0UmVzb2x1dGlvblJlc3VsdC5SZXN1bWUpOyB9KSBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbXB0eUNhbGVuZGFyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc2NoZWR1bGluZ0lzc3VlOiB7IGdldERlc2NyaXB0aW9uOiBGdW5jdGlvbiwgZ2V0Q2FsZW5kYXI6IEZ1bmN0aW9uLCBnZXRSZXNvbHV0aW9uczogRnVuY3Rpb24gfSwgY29udGludWVXaXRoUmVzb2x1dGlvblJlc3VsdDogRnVuY3Rpb24gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gZGF0YSBpbiBhbnkgb2YgdGhlIHJlZ2lzdGVyZWQgZGF0YSBzdG9yZXMgaXMgY2hhbmdlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtaGFzQ2hhbmdlcylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IYXNDaGFuZ2VzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiBzdWNjZXNzZnVsIFtsb2FkIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLWxvYWQpIGNvbXBsZXRpb24gYWZ0ZXIgZGF0YSBnZXRzIGxvYWRlZCB0byB0aGUgc3RvcmVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTG9hZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVzcG9uc2U6IG9iamVjdCwgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIFtsb2FkIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLWxvYWQpIHdhcyBjYW5jZWxlZCBieSBzb21lIFtiZWZvcmVMb2FkXSgjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2V2ZW50LWJlZm9yZUxvYWQpXG4gICAgICogbGlzdGVuZXIgb3IgZHVlIHRvIGluY29tcGxldGUgcHJpb3IgbG9hZCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5wYWNrIFRoZSBkYXRhIHBhY2thZ2Ugd2hpY2ggY29udGFpbnMgZGF0YSBmb3IgYWxsIHN0b3JlcyBtYW5hZ2VkIGJ5IHRoZSBjcnVkIG1hbmFnZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTG9hZENhbmNlbGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCBwYWNrOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBbbG9hZCByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBmYWlscy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2UgVGhlIGRlY29kZWQgc2VydmVyIHJlc3BvbnNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQucmVzcG9uc2VUZXh0IFRoZSByYXcgc2VydmVyIHJlc3BvbnNlIHRleHRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2VPcHRpb25zIFtERVBSRUNBVEVEXSBzZWUgYHJlcXVlc3RPcHRpb25zYFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXF1ZXN0T3B0aW9ucyBUaGUgcmVxdWVzdCBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBldmVudC5yYXdSZXNwb25zZSBUaGUgbmF0aXZlIFJlc3BvbnNlIG9iamVjdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxvYWRGYWlsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCByZXNwb25zZTogb2JqZWN0LCByZXNwb25zZVRleHQ6IHN0cmluZywgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gcmVnaXN0ZXJlZCBzdG9yZXMgZ2V0IGludG8gc3RhdGUgd2hlbiB0aGV5IGRvbid0IGhhdmUgYW55XG4gICAgICogbm90IHBlcnNpc3RlZCBjaGFuZ2UuIFRoaXMgaGFwcGVucyBhZnRlciBbbG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tbG9hZCkgb3IgW3N5bmNdKCNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tc3luYykgcmVxdWVzdFxuICAgICAqIGNvbXBsZXRpb24uIE9yIHRoaXMgbWF5IGhhcHBlbiBhZnRlciBhIHJlY29yZCB1cGRhdGUgd2hpY2ggdHVybnMgaXRzIGZpZWxkcyBiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNldmVudC1ub0NoYW5nZXMpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9DaGFuZ2VzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBkdXJpbmcgdGhlIEVuZ2luZSBjYWxjdWxhdGlvbiBpZiBbZW5hYmxlUHJvZ3Jlc3NOb3RpZmljYXRpb25zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctZW5hYmxlUHJvZ3Jlc3NOb3RpZmljYXRpb25zKSBjb25maWcgaXMgYHRydWVgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5zb3VyY2UgVGhlIG93bmluZyBwcm9qZWN0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LnRvdGFsIFRoZSB0b3RhbCBudW1iZXIgb2Ygb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5yZW1haW5pbmcgVGhlIG51bWJlciBvZiByZW1haW5pbmcgb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7J3N0b3JlUG9wdWxhdGlvbicsJ3Byb3BhZ2F0aW5nJ30gZXZlbnQucGhhc2UgVGhlIHBoYXNlIG9mIHRoZSBjYWxjdWxhdGlvbiwgZWl0aGVyICdzdG9yZVBvcHVsYXRpb24nIHdoZW4gZGF0YSBpcyBnZXR0aW5nIGxvYWRlZCwgb3IgJ3Byb3BhZ2F0aW5nJyB3aGVuIGRhdGEgaXMgZ2V0dGluZyBjYWxjdWxhdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUHJvZ3Jlc3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFByb2plY3RNb2RlbCwgdG90YWw6IG51bWJlciwgcmVtYWluaW5nOiBudW1iZXIsIHBoYXNlOiAnc3RvcmVQb3B1bGF0aW9uJ3wncHJvcGFnYXRpbmcnIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiBzdWNjZXNzZnVsIHJlcXVlc3QgY29tcGxldGlvbiBhZnRlciBkYXRhIGdldHMgYXBwbGllZCB0byB0aGUgc3RvcmVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7J3N5bmMnLCdsb2FkJ30gZXZlbnQucmVxdWVzdFR5cGUgVGhlIHJlcXVlc3QgdHlwZSAoYHN5bmNgIG9yIGBsb2FkYCkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlIFRoZSBkZWNvZGVkIHNlcnZlciByZXNwb25zZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlT3B0aW9ucyBbREVQUkVDQVRFRF0gc2VlIGByZXF1ZXN0T3B0aW9uc2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVxdWVzdE9wdGlvbnMgVGhlIHJlcXVlc3Qgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gZXZlbnQucmF3UmVzcG9uc2UgVGhlIG5hdGl2ZSBSZXNwb25zZSBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXF1ZXN0RG9uZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVxdWVzdFR5cGU6ICdzeW5jJ3wnbG9hZCcsIHJlc3BvbnNlOiBvYmplY3QsIHJlc3BvbnNlT3B0aW9uczogb2JqZWN0LCByZXF1ZXN0T3B0aW9uczogb2JqZWN0LCByYXdSZXNwb25zZTogYW55IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgcmVxdWVzdCBmYWlscy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0geydzeW5jJywnbG9hZCd9IGV2ZW50LnJlcXVlc3RUeXBlIFRoZSByZXF1ZXN0IHR5cGUgKGBzeW5jYCBvciBgbG9hZGApLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZXNwb25zZVRleHQgVGhlIHJhdyBzZXJ2ZXIgcmVzcG9uc2UgdGV4dFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVxdWVzdEZhaWw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHJlcXVlc3RUeXBlOiAnc3luYyd8J2xvYWQnLCByZXNwb25zZTogb2JqZWN0LCByZXNwb25zZVRleHQ6IHN0cmluZywgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgdHJpZ2dlcnMgd2hlbiBhIG5ldyByZXZpc2lvbiBpcyBhZGRlZCB0byB0aGUgcHJvamVjdC4gSXQgaXMgdXNlZCB0byBub3RpZnkgdGhlIGJhY2tlbmQgYWJvdXQgdGhlXG4gICAgICogbmV3IHJldmlzaW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubG9jYWxSZXZpc2lvbklkIElEIG9mIHRoZSBsb2NhbCByZXZpc2lvbi4gQmFja2VuZCBzaG91bGQgc2VuZCBpdCBpbiB0aGUgYnJvYWRjYXN0IGNoYW5uZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29uZmxpY3RSZXNvbHV0aW9uRm9yIElEIG9mIHRoZSByZXZpc2lvbiB3aXRoIGEgY29uZmxpY3Qgd2hpY2ggd2FzIHJlc29sdmVkIGJ5IHRoaXMgcmV2aXNpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY2xpZW50SWQgSUQgb2YgdGhlIGNsaWVudCBpbnN0YW5jZS4gVXNlZCB0byBkaXN0aW5ndWlzaCBvd24gcmV2aXNpb25zIGZyb20gdGhlIGJyb2FkY2FzdCBjaGFubmVsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgT2JqZWN0IHdpdGggY2hhbmdlcyBjb25zdGl0dXRpbmcgcmV2aXNpb25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXZpc2lvbk5vdGlmaWNhdGlvbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGxvY2FsUmV2aXNpb25JZDogc3RyaW5nLCBjb25mbGljdFJlc29sdXRpb25Gb3I/OiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcsIGNoYW5nZXM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgRW5naW5lIGRldGVjdHMgYSBzY2hlZHVsaW5nIGNvbmZsaWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuc2NoZWR1bGluZ0lzc3VlIFRoZSBjb25mbGljdCBkZXRhaWxzOlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LnNjaGVkdWxpbmdJc3N1ZS5nZXREZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjb25mbGljdCBkZXNjcmlwdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0W119IGV2ZW50LnNjaGVkdWxpbmdJc3N1ZS5pbnRlcnZhbHMgQXJyYXkgb2YgY29uZmxpY3RpbmcgaW50ZXJ2YWxzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuc2NoZWR1bGluZ0lzc3VlLmdldFJlc29sdXRpb25zIEZ1bmN0aW9uIHRvIGdldCBwb3NzaWJsZSByZXNvbHV0aW9uc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRpbnVlV2l0aFJlc29sdXRpb25SZXN1bHQgRnVuY3Rpb24gdG8gY2FsbCBhZnRlciBhIHJlc29sdXRpb24gaXMgY2hvc2VuIHRvIHByb2NlZWQgd2l0aCB0aGUgRW5naW5lIGNhbGN1bGF0aW9uczogYGBgamF2YXNjcmlwdCBwcm9qZWN0Lm9uKCdzY2hlZHVsaW5nQ29uZmxpY3QnLCAoeyBzY2hlZHVsaW5nSXNzdWUsIGNvbnRpbnVlV2l0aFJlc29sdXRpb25SZXN1bHQgfSkgPT4geyAgICAgLy8gYXBwbHkgdGhlIGZpcnN0IHJlc29sdXRpb24gYW5kIGNvbnRpbnVlICAgICBzY2hlZHVsaW5nSXNzdWUuZ2V0UmVzb2x1dGlvbnMoKVswXS5yZXNvbHZlKCk7ICAgICBjb250aW51ZVdpdGhSZXNvbHV0aW9uUmVzdWx0KEVmZmVjdFJlc29sdXRpb25SZXN1bHQuUmVzdW1lKTsgfSkgYGBgIFdoZXJlIGBFZmZlY3RSZXNvbHV0aW9uUmVzdWx0LlJlc3VtZWAgcmVzdWx0cyBpbiBhIHJlc29sdXRpb24gYmVpbmcgYXBwbGllZCBhbmQgY3VycmVudCB0cmFuc2FjdGlvbiBzaG91bGQgYmUgY29udGludWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjaGVkdWxpbmdDb25mbGljdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNjaGVkdWxpbmdJc3N1ZTogeyBnZXREZXNjcmlwdGlvbjogRnVuY3Rpb24sIGludGVydmFsczogb2JqZWN0W10sIGdldFJlc29sdXRpb25zOiBGdW5jdGlvbiB9LCBjb250aW51ZVdpdGhSZXNvbHV0aW9uUmVzdWx0OiBGdW5jdGlvbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gc3VjY2Vzc2Z1bCBbc3luYyByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1zeW5jKSBjb21wbGV0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3luYzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVzcG9uc2U6IG9iamVjdCwgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIFtzeW5jIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIHdhcyBjYW5jZWxlZCBieSBzb21lIFtiZWZvcmVTeW5jXSgjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2V2ZW50LWJlZm9yZVN5bmMpIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5wYWNrIFRoZSBkYXRhIHBhY2thZ2Ugd2hpY2ggY29udGFpbnMgZGF0YSBmb3IgYWxsIHN0b3JlcyBtYW5hZ2VkIGJ5IHRoZSBjcnVkIG1hbmFnZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3luY0NhbmNlbGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCBwYWNrOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIFtzeW5jIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIHdhcyBkZWxheWVkIGR1ZSB0byBpbmNvbXBsZXRlIHByZXZpb3VzIG9uZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuYXJndW1lbnRzIFRoZSBhcmd1bWVudHMgb2YgW3N5bmNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIGNhbGwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3luY0RlbGF5ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIGFyZ3VtZW50czogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgW3N5bmMgcmVxdWVzdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tc3luYykgZmFpbHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlIFRoZSBkZWNvZGVkIHNlcnZlciByZXNwb25zZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlc3BvbnNlVGV4dCBUaGUgcmF3IHNlcnZlciByZXNwb25zZSB0ZXh0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlT3B0aW9ucyBbREVQUkVDQVRFRF0gc2VlIGByZXF1ZXN0T3B0aW9uc2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVxdWVzdE9wdGlvbnMgVGhlIHJlcXVlc3Qgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gZXZlbnQucmF3UmVzcG9uc2UgVGhlIG5hdGl2ZSBSZXNwb25zZSBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TeW5jRmFpbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVzcG9uc2U6IG9iamVjdCwgcmVzcG9uc2VUZXh0OiBzdHJpbmcsIHJlc3BvbnNlT3B0aW9uczogb2JqZWN0LCByZXF1ZXN0T3B0aW9uczogb2JqZWN0LCByYXdSZXNwb25zZTogYW55IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtR2FudHRQcm9qZWN0TW9kZWxDb21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bUdhbnR0UHJvamVjdE1vZGVsQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1HYW50dFByb2plY3RNb2RlbENvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==