@bryntum/taskboard-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 (56) hide show
  1. package/README.md +44 -0
  2. package/bryntum-taskboard-angular-thin.d.ts +5 -0
  3. package/bundles/bryntum-taskboard-angular-thin.umd.js +18990 -0
  4. package/bundles/bryntum-taskboard-angular-thin.umd.js.map +1 -0
  5. package/esm2015/bryntum-taskboard-angular-thin.js +5 -0
  6. package/esm2015/lib/bryntum-column-combo.component.js +937 -0
  7. package/esm2015/lib/bryntum-column-filter-field.component.js +800 -0
  8. package/esm2015/lib/bryntum-column-picker-button.component.js +720 -0
  9. package/esm2015/lib/bryntum-column-scroll-button.component.js +720 -0
  10. package/esm2015/lib/bryntum-project-combo.component.js +941 -0
  11. package/esm2015/lib/bryntum-resources-combo.component.js +937 -0
  12. package/esm2015/lib/bryntum-swimlane-combo.component.js +937 -0
  13. package/esm2015/lib/bryntum-swimlane-filter-field.component.js +808 -0
  14. package/esm2015/lib/bryntum-swimlane-picker-button.component.js +720 -0
  15. package/esm2015/lib/bryntum-swimlane-scroll-button.component.js +720 -0
  16. package/esm2015/lib/bryntum-tag-combo.component.js +941 -0
  17. package/esm2015/lib/bryntum-task-board-base.component.js +1679 -0
  18. package/esm2015/lib/bryntum-task-board-field-filter-picker-group.component.js +763 -0
  19. package/esm2015/lib/bryntum-task-board-field-filter-picker.component.js +733 -0
  20. package/esm2015/lib/bryntum-task-board-project-model.component.js +690 -0
  21. package/esm2015/lib/bryntum-task-board.component.js +1683 -0
  22. package/esm2015/lib/bryntum-task-color-combo.component.js +795 -0
  23. package/esm2015/lib/bryntum-task-filter-field.component.js +808 -0
  24. package/esm2015/lib/bryntum-todo-list-field.component.js +781 -0
  25. package/esm2015/lib/bryntum-undo-redo.component.js +690 -0
  26. package/esm2015/lib/bryntum-zoom-slider.component.js +666 -0
  27. package/esm2015/lib/taskboard.module.js +124 -0
  28. package/esm2015/lib/wrapper.helper.js +74 -0
  29. package/esm2015/public-api.js +26 -0
  30. package/fesm2015/bryntum-taskboard-angular-thin.js +18489 -0
  31. package/fesm2015/bryntum-taskboard-angular-thin.js.map +1 -0
  32. package/lib/bryntum-column-combo.component.d.ts +1209 -0
  33. package/lib/bryntum-column-filter-field.component.d.ts +989 -0
  34. package/lib/bryntum-column-picker-button.component.d.ts +854 -0
  35. package/lib/bryntum-column-scroll-button.component.d.ts +854 -0
  36. package/lib/bryntum-project-combo.component.d.ts +1210 -0
  37. package/lib/bryntum-resources-combo.component.d.ts +1208 -0
  38. package/lib/bryntum-swimlane-combo.component.d.ts +1208 -0
  39. package/lib/bryntum-swimlane-filter-field.component.d.ts +1002 -0
  40. package/lib/bryntum-swimlane-picker-button.component.d.ts +854 -0
  41. package/lib/bryntum-swimlane-scroll-button.component.d.ts +854 -0
  42. package/lib/bryntum-tag-combo.component.d.ts +1213 -0
  43. package/lib/bryntum-task-board-base.component.d.ts +1922 -0
  44. package/lib/bryntum-task-board-field-filter-picker-group.component.d.ts +942 -0
  45. package/lib/bryntum-task-board-field-filter-picker.component.d.ts +890 -0
  46. package/lib/bryntum-task-board-project-model.component.d.ts +733 -0
  47. package/lib/bryntum-task-board.component.d.ts +1924 -0
  48. package/lib/bryntum-task-color-combo.component.d.ts +966 -0
  49. package/lib/bryntum-task-filter-field.component.d.ts +1002 -0
  50. package/lib/bryntum-todo-list-field.component.d.ts +956 -0
  51. package/lib/bryntum-undo-redo.component.d.ts +832 -0
  52. package/lib/bryntum-zoom-slider.component.d.ts +785 -0
  53. package/lib/taskboard.module.d.ts +27 -0
  54. package/lib/wrapper.helper.d.ts +26 -0
  55. package/package.json +33 -0
  56. package/public-api.d.ts +22 -0
@@ -0,0 +1,720 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum SwimlaneScrollButton
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { Widget } from '@bryntum/core-thin';
8
+ import { SwimlaneScrollButton } from '@bryntum/taskboard-thin';
9
+ import * as i0 from "@angular/core";
10
+ export class BryntumSwimlaneScrollButtonComponent {
11
+ constructor(element) {
12
+ this.bryntumConfig = {
13
+ adopt: undefined,
14
+ appendTo: undefined,
15
+ href: undefined,
16
+ angularComponent: this,
17
+ features: {},
18
+ listeners: {}
19
+ };
20
+ // Events emitters
21
+ /**
22
+ * Fires when the default action is performed (the button is clicked)
23
+ * @param {object} event Event object
24
+ * @param {Core.widget.Button} event.source The button
25
+ * @param {Event} event.event DEPRECATED - Use domEvent instead.
26
+ * @param {Event} event.domEvent The triggering DOM event. Using the `pointerType` property of this event can help determine if it was a mouse, touch or pen action.
27
+ */
28
+ this.onAction = new EventEmitter();
29
+ /**
30
+ * Fires before an object is destroyed.
31
+ * @param {object} event Event object
32
+ * @param {Core.Base} event.source The Object that is being destroyed.
33
+ */
34
+ this.onBeforeDestroy = new EventEmitter();
35
+ /**
36
+ * Triggered before a widget is hidden. Return `false` to prevent the action.
37
+ * @param {object} event Event object
38
+ * @param {Core.widget.Widget} event.source The widget being hidden.
39
+ */
40
+ this.onBeforeHide = new EventEmitter();
41
+ /**
42
+ * Triggered before a widget is shown. Return `false` to prevent the action.
43
+ * @param {object} event Event object
44
+ * @param {Core.widget.Widget,any} event.source The widget being shown
45
+ */
46
+ this.onBeforeShow = new EventEmitter();
47
+ /**
48
+ * This event is triggered when the button's menu is about to be shown.
49
+ * @param {object} event Event object
50
+ * @param {Core.widget.Button} event.source This Button instance.
51
+ * @param {Core.widget.Menu} event.menu This button's menu instance.
52
+ * @param {boolean} event.userAction `true` if the toggle was triggered by a user action (click), `false` if it was triggered programmatically.
53
+ * @param {Event} event.domEvent The original DOM event that triggered the action, if any. Using the `pointerType` property of this event can help determine if it was a mouse, touch or pen action.
54
+ */
55
+ this.onBeforeShowMenu = new EventEmitter();
56
+ /**
57
+ * Fires before the button is toggled (the [pressed](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#property-pressed) state is changed). If the button is part of
58
+ * a [toggleGroup](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#config-toggleGroup) and you need to process the pressed button only, consider using
59
+ * [click](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#event-click) event or [action](#Core/widget/Button#event-action) event.
60
+ * Return `false` to prevent the toggle to the new pressed state.
61
+ * @param {object} event Event object
62
+ * @param {Core.widget.Button} event.source Toggled button
63
+ * @param {boolean} event.pressed New pressed state
64
+ * @param {boolean} event.userAction `true` if the toggle was triggered by a user action (click), `false` if it was triggered programmatically.
65
+ * @param {Event} event.domEvent The original DOM event that triggered the action, if any. Using the `pointerType` property of this event can help determine if it was a mouse, touch or pen action.
66
+ */
67
+ this.onBeforeToggle = new EventEmitter();
68
+ /**
69
+ * Fires when any other event is fired from the object.
70
+ * ...
71
+ * [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/SwimlaneScrollButton#event-catchAll)
72
+ * @param {object} event Event object
73
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
74
+ * @param {string} event.event.type The type of the event which is caught by the listener
75
+ */
76
+ this.onCatchAll = new EventEmitter();
77
+ /**
78
+ * Fires when the button is clicked
79
+ * @param {object} event Event object
80
+ * @param {Core.widget.Button} event.source The button
81
+ * @param {Event} event.event DEPRECATED - Use domEvent instead.
82
+ * @param {Event} event.domEvent The triggering DOM event. Using the `pointerType` property of this event can help determine if it was a mouse, touch or pen action.
83
+ */
84
+ this.onClick = new EventEmitter();
85
+ /**
86
+ * Fires when an object is destroyed.
87
+ * @param {object} event Event object
88
+ * @param {Core.Base} event.source The Object that is being destroyed.
89
+ */
90
+ this.onDestroy = new EventEmitter();
91
+ /**
92
+ * Triggered when a widget's [element](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#property-element) is available.
93
+ * @param {object} event Event object
94
+ * @param {HTMLElement} event.element The Widget's element.
95
+ */
96
+ this.onElementCreated = new EventEmitter();
97
+ /**
98
+ * Fired when focus enters this Widget.
99
+ * @param {object} event Event object
100
+ * @param {Core.widget.Widget} event.source This Widget
101
+ * @param {HTMLElement} event.fromElement The element which lost focus.
102
+ * @param {HTMLElement} event.toElement The element which gained focus.
103
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
104
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
105
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
106
+ */
107
+ this.onFocusIn = new EventEmitter();
108
+ /**
109
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
110
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
111
+ * will not trigger this event. This is when focus exits this widget completely.
112
+ * @param {object} event Event object
113
+ * @param {Core.widget.Widget} event.source This Widget
114
+ * @param {HTMLElement} event.fromElement The element which lost focus.
115
+ * @param {HTMLElement} event.toElement The element which gained focus.
116
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
117
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
118
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
119
+ */
120
+ this.onFocusOut = new EventEmitter();
121
+ /**
122
+ * Triggered after a widget was hidden
123
+ * @param {object} event Event object
124
+ * @param {Core.widget.Widget} event.source The widget
125
+ */
126
+ this.onHide = new EventEmitter();
127
+ /**
128
+ * Triggered when a widget which had been in a non-visible state for any reason
129
+ * achieves visibility.
130
+ * ...
131
+ * [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/SwimlaneScrollButton#event-paint)
132
+ * @param {object} event Event object
133
+ * @param {Core.widget.Widget} event.source The widget being painted.
134
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
135
+ */
136
+ this.onPaint = new EventEmitter();
137
+ /**
138
+ * Fired when a Widget's read only state is toggled
139
+ * @param {object} event Event object
140
+ * @param {boolean} event.readOnly Read only or not
141
+ */
142
+ this.onReadOnly = new EventEmitter();
143
+ /**
144
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
145
+ * to [recompose](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
146
+ */
147
+ this.onRecompose = new EventEmitter();
148
+ /**
149
+ * Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
150
+ * @param {object} event Event object
151
+ * @param {Core.widget.Widget} event.source This Widget
152
+ * @param {number} event.width The new width
153
+ * @param {number} event.height The new height
154
+ * @param {number} event.oldWidth The old width
155
+ * @param {number} event.oldHeight The old height
156
+ */
157
+ this.onResize = new EventEmitter();
158
+ /**
159
+ * Triggered after a widget is shown.
160
+ * @param {object} event Event object
161
+ * @param {Core.widget.Widget} event.source The widget
162
+ */
163
+ this.onShow = new EventEmitter();
164
+ /**
165
+ * Fires when the button is toggled via a UI interaction (the [pressed](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#property-pressed) state is changed). If the button is part of a
166
+ * [toggleGroup](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#config-toggleGroup) and you need to process the pressed button only, consider using
167
+ * [click](https://bryntum.com/products/taskboard/docs/api/Core/widget/Button#event-click) event or [action](#Core/widget/Button#event-action) event.
168
+ * @param {object} event Event object
169
+ * @param {Core.widget.Button} event.source Toggled button
170
+ * @param {boolean} event.pressed New pressed state
171
+ * @param {boolean} event.userAction `true` if the toggle was triggered by a user action (click), `false` if it was triggered programmatically.
172
+ * @param {Event} event.domEvent The original DOM event that triggered the action, if any. Using the `pointerType` property of this event can help determine if it was a mouse, touch or pen action.
173
+ */
174
+ this.onToggle = new EventEmitter();
175
+ this.elementRef = element;
176
+ }
177
+ /**
178
+ * Create and append the underlying widget
179
+ */
180
+ ngOnInit() {
181
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumSwimlaneScrollButtonComponent;
182
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
183
+ // @ts-ignore
184
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
185
+ if (['features', 'config'].includes(prop)) {
186
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
187
+ }
188
+ });
189
+ // @ts-ignore
190
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
191
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
192
+ // @ts-ignore
193
+ bryntumConfig.listeners[eventName(event)] = e => {
194
+ // @ts-ignore
195
+ me[event].emit(e);
196
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
197
+ // in Angular listeners
198
+ return e.returnValue;
199
+ };
200
+ });
201
+ // If component has no container specified in config then use adopt to Wrapper's element
202
+ const containerParam = [
203
+ 'adopt',
204
+ 'appendTo',
205
+ 'insertAfter',
206
+ 'insertBefore'
207
+ // @ts-ignore
208
+ ].find(prop => bryntumConfig[prop]);
209
+ if (!containerParam) {
210
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
211
+ // Button should always be <a> or <button> inside owner element
212
+ bryntumConfig.appendTo = elementRef.nativeElement;
213
+ }
214
+ else {
215
+ bryntumConfig.adopt = elementRef.nativeElement;
216
+ }
217
+ }
218
+ else {
219
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
220
+ }
221
+ // @ts-ignore
222
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
223
+ }
224
+ /**
225
+ * Watch for changes
226
+ * @param changes
227
+ */
228
+ ngOnChanges(changes) {
229
+ const { instance } = this, { instanceName } = BryntumSwimlaneScrollButtonComponent;
230
+ if (!instance) {
231
+ return;
232
+ }
233
+ // Iterate over all changes
234
+ Object.entries(changes).forEach(([prop, change]) => {
235
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumSwimlaneScrollButtonComponent;
236
+ if (bryntumProps.includes(prop)) {
237
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
238
+ if (bryntumConfigsOnly.includes(prop)) {
239
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
240
+ }
241
+ }
242
+ });
243
+ }
244
+ /**
245
+ * Destroy the component
246
+ */
247
+ ngOnDestroy() {
248
+ // @ts-ignore
249
+ if (this.instance && this.instance.destroy) {
250
+ this.instance.destroy();
251
+ }
252
+ }
253
+ }
254
+ BryntumSwimlaneScrollButtonComponent.instanceClass = SwimlaneScrollButton;
255
+ BryntumSwimlaneScrollButtonComponent.instanceName = 'SwimlaneScrollButton';
256
+ BryntumSwimlaneScrollButtonComponent.bryntumEvents = [
257
+ 'onAction',
258
+ 'onBeforeDestroy',
259
+ 'onBeforeHide',
260
+ 'onBeforeShow',
261
+ 'onBeforeShowMenu',
262
+ 'onBeforeToggle',
263
+ 'onCatchAll',
264
+ 'onClick',
265
+ 'onDestroy',
266
+ 'onElementCreated',
267
+ 'onFocusIn',
268
+ 'onFocusOut',
269
+ 'onHide',
270
+ 'onPaint',
271
+ 'onReadOnly',
272
+ 'onRecompose',
273
+ 'onResize',
274
+ 'onShow',
275
+ 'onToggle'
276
+ ];
277
+ BryntumSwimlaneScrollButtonComponent.bryntumFeatureNames = [];
278
+ BryntumSwimlaneScrollButtonComponent.bryntumConfigs = BryntumSwimlaneScrollButtonComponent.bryntumFeatureNames.concat([
279
+ 'adopt',
280
+ 'align',
281
+ 'alignSelf',
282
+ 'anchor',
283
+ 'appendTo',
284
+ 'ariaDescription',
285
+ 'ariaLabel',
286
+ 'badge',
287
+ 'behaviorType',
288
+ 'bubbleEvents',
289
+ 'callOnFunctions',
290
+ 'catchEventHandlerExceptions',
291
+ 'centered',
292
+ 'cls',
293
+ 'color',
294
+ 'column',
295
+ 'config',
296
+ 'constrainTo',
297
+ 'content',
298
+ 'contentElementCls',
299
+ 'dataField',
300
+ 'dataset',
301
+ 'defaultBindProperty',
302
+ 'detectCSSCompatibilityIssues',
303
+ 'disabled',
304
+ 'dock',
305
+ 'draggable',
306
+ 'elementAttributes',
307
+ 'extraData',
308
+ 'flex',
309
+ 'floating',
310
+ 'height',
311
+ 'hidden',
312
+ 'hideAnimation',
313
+ 'href',
314
+ 'html',
315
+ 'htmlCls',
316
+ 'icon',
317
+ 'iconAlign',
318
+ 'id',
319
+ 'ignoreParentReadOnly',
320
+ 'insertBefore',
321
+ 'insertFirst',
322
+ 'keyMap',
323
+ 'listeners',
324
+ 'localeClass',
325
+ 'localizable',
326
+ 'localizableProperties',
327
+ 'margin',
328
+ 'maskDefaults',
329
+ 'masked',
330
+ 'maxHeight',
331
+ 'maximizeOnMobile',
332
+ 'maxWidth',
333
+ 'menu',
334
+ 'menuIcon',
335
+ 'minHeight',
336
+ 'minWidth',
337
+ 'monitorResize',
338
+ 'owner',
339
+ 'positioned',
340
+ 'pressed',
341
+ 'pressedCls',
342
+ 'pressedIcon',
343
+ 'preventTooltipOnTouch',
344
+ 'readOnly',
345
+ 'relayStoreEvents',
346
+ 'rendition',
347
+ 'ripple',
348
+ 'rootElement',
349
+ 'rtl',
350
+ 'scrollable',
351
+ 'scrollAction',
352
+ 'showAnimation',
353
+ 'showTooltipWhenDisabled',
354
+ 'span',
355
+ 'split',
356
+ 'supportsPressedClick',
357
+ 'tab',
358
+ 'tabIndex',
359
+ 'tag',
360
+ 'target',
361
+ 'taskBoard',
362
+ 'text',
363
+ 'textAlign',
364
+ 'title',
365
+ 'toggleable',
366
+ 'toggleGroup',
367
+ 'tooltip',
368
+ 'type',
369
+ 'ui',
370
+ 'weight',
371
+ 'width',
372
+ 'x',
373
+ 'y'
374
+ ]);
375
+ BryntumSwimlaneScrollButtonComponent.bryntumConfigsOnly = [
376
+ 'adopt',
377
+ 'align',
378
+ 'anchor',
379
+ 'ariaDescription',
380
+ 'ariaLabel',
381
+ 'bubbleEvents',
382
+ 'centered',
383
+ 'color',
384
+ 'config',
385
+ 'constrainTo',
386
+ 'contentElementCls',
387
+ 'dataField',
388
+ 'defaultBindProperty',
389
+ 'detectCSSCompatibilityIssues',
390
+ 'dock',
391
+ 'draggable',
392
+ 'elementAttributes',
393
+ 'floating',
394
+ 'hideAnimation',
395
+ 'htmlCls',
396
+ 'ignoreParentReadOnly',
397
+ 'listeners',
398
+ 'localeClass',
399
+ 'localizable',
400
+ 'localizableProperties',
401
+ 'maskDefaults',
402
+ 'masked',
403
+ 'monitorResize',
404
+ 'owner',
405
+ 'positioned',
406
+ 'preventTooltipOnTouch',
407
+ 'relayStoreEvents',
408
+ 'ripple',
409
+ 'rootElement',
410
+ 'scrollAction',
411
+ 'showAnimation',
412
+ 'showTooltipWhenDisabled',
413
+ 'supportsPressedClick',
414
+ 'tab',
415
+ 'tag',
416
+ 'taskBoard',
417
+ 'textAlign',
418
+ 'title',
419
+ 'type',
420
+ 'ui',
421
+ 'weight'
422
+ ];
423
+ BryntumSwimlaneScrollButtonComponent.bryntumProps = BryntumSwimlaneScrollButtonComponent.bryntumFeatureNames.concat([
424
+ 'alignSelf',
425
+ 'anchorSize',
426
+ 'appendTo',
427
+ 'badge',
428
+ 'behaviorType',
429
+ 'callOnFunctions',
430
+ 'catchEventHandlerExceptions',
431
+ 'cls',
432
+ 'column',
433
+ 'content',
434
+ 'dataset',
435
+ 'disabled',
436
+ 'extraData',
437
+ 'flex',
438
+ 'focusVisible',
439
+ 'height',
440
+ 'hidden',
441
+ 'href',
442
+ 'html',
443
+ 'icon',
444
+ 'iconAlign',
445
+ 'id',
446
+ 'insertBefore',
447
+ 'insertFirst',
448
+ 'keyMap',
449
+ 'margin',
450
+ 'maxHeight',
451
+ 'maximizeOnMobile',
452
+ 'maxWidth',
453
+ 'menu',
454
+ 'menuIcon',
455
+ 'minHeight',
456
+ 'minWidth',
457
+ 'parent',
458
+ 'pressed',
459
+ 'pressedCls',
460
+ 'pressedIcon',
461
+ 'readOnly',
462
+ 'rendition',
463
+ 'rtl',
464
+ 'scrollable',
465
+ 'span',
466
+ 'split',
467
+ 'tabIndex',
468
+ 'target',
469
+ 'text',
470
+ 'toggleable',
471
+ 'toggleGroup',
472
+ 'tooltip',
473
+ 'width',
474
+ 'x',
475
+ 'y'
476
+ ]);
477
+ BryntumSwimlaneScrollButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumSwimlaneScrollButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
478
+ BryntumSwimlaneScrollButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumSwimlaneScrollButtonComponent, selector: "bryntum-swimlane-scroll-button", inputs: { adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bubbleEvents: "bubbleEvents", centered: "centered", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", defaultBindProperty: "defaultBindProperty", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", floating: "floating", hideAnimation: "hideAnimation", htmlCls: "htmlCls", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", supportsPressedClick: "supportsPressedClick", tab: "tab", tag: "tag", taskBoard: "taskBoard", textAlign: "textAlign", title: "title", type: "type", ui: "ui", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", badge: "badge", behaviorType: "behaviorType", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", column: "column", content: "content", dataset: "dataset", disabled: "disabled", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", href: "href", html: "html", icon: "icon", iconAlign: "iconAlign", id: "id", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", menu: "menu", menuIcon: "menuIcon", minHeight: "minHeight", minWidth: "minWidth", pressed: "pressed", pressedCls: "pressedCls", pressedIcon: "pressedIcon", readOnly: "readOnly", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", span: "span", split: "split", tabIndex: "tabIndex", target: "target", text: "text", toggleable: "toggleable", toggleGroup: "toggleGroup", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", parent: "parent" }, outputs: { onAction: "onAction", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeShow: "onBeforeShow", onBeforeShowMenu: "onBeforeShowMenu", onBeforeToggle: "onBeforeToggle", onCatchAll: "onCatchAll", onClick: "onClick", onDestroy: "onDestroy", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onShow: "onShow", onToggle: "onToggle" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
479
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumSwimlaneScrollButtonComponent, decorators: [{
480
+ type: Component,
481
+ args: [{
482
+ selector: 'bryntum-swimlane-scroll-button',
483
+ template: ''
484
+ }]
485
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
486
+ type: Input
487
+ }], align: [{
488
+ type: Input
489
+ }], anchor: [{
490
+ type: Input
491
+ }], ariaDescription: [{
492
+ type: Input
493
+ }], ariaLabel: [{
494
+ type: Input
495
+ }], bubbleEvents: [{
496
+ type: Input
497
+ }], centered: [{
498
+ type: Input
499
+ }], color: [{
500
+ type: Input
501
+ }], config: [{
502
+ type: Input
503
+ }], constrainTo: [{
504
+ type: Input
505
+ }], contentElementCls: [{
506
+ type: Input
507
+ }], dataField: [{
508
+ type: Input
509
+ }], defaultBindProperty: [{
510
+ type: Input
511
+ }], detectCSSCompatibilityIssues: [{
512
+ type: Input
513
+ }], dock: [{
514
+ type: Input
515
+ }], draggable: [{
516
+ type: Input
517
+ }], elementAttributes: [{
518
+ type: Input
519
+ }], floating: [{
520
+ type: Input
521
+ }], hideAnimation: [{
522
+ type: Input
523
+ }], htmlCls: [{
524
+ type: Input
525
+ }], ignoreParentReadOnly: [{
526
+ type: Input
527
+ }], listeners: [{
528
+ type: Input
529
+ }], localeClass: [{
530
+ type: Input
531
+ }], localizable: [{
532
+ type: Input
533
+ }], localizableProperties: [{
534
+ type: Input
535
+ }], maskDefaults: [{
536
+ type: Input
537
+ }], masked: [{
538
+ type: Input
539
+ }], monitorResize: [{
540
+ type: Input
541
+ }], owner: [{
542
+ type: Input
543
+ }], positioned: [{
544
+ type: Input
545
+ }], preventTooltipOnTouch: [{
546
+ type: Input
547
+ }], relayStoreEvents: [{
548
+ type: Input
549
+ }], ripple: [{
550
+ type: Input
551
+ }], rootElement: [{
552
+ type: Input
553
+ }], scrollAction: [{
554
+ type: Input
555
+ }], showAnimation: [{
556
+ type: Input
557
+ }], showTooltipWhenDisabled: [{
558
+ type: Input
559
+ }], supportsPressedClick: [{
560
+ type: Input
561
+ }], tab: [{
562
+ type: Input
563
+ }], tag: [{
564
+ type: Input
565
+ }], taskBoard: [{
566
+ type: Input
567
+ }], textAlign: [{
568
+ type: Input
569
+ }], title: [{
570
+ type: Input
571
+ }], type: [{
572
+ type: Input
573
+ }], ui: [{
574
+ type: Input
575
+ }], weight: [{
576
+ type: Input
577
+ }], alignSelf: [{
578
+ type: Input
579
+ }], appendTo: [{
580
+ type: Input
581
+ }], badge: [{
582
+ type: Input
583
+ }], behaviorType: [{
584
+ type: Input
585
+ }], callOnFunctions: [{
586
+ type: Input
587
+ }], catchEventHandlerExceptions: [{
588
+ type: Input
589
+ }], cls: [{
590
+ type: Input
591
+ }], column: [{
592
+ type: Input
593
+ }], content: [{
594
+ type: Input
595
+ }], dataset: [{
596
+ type: Input
597
+ }], disabled: [{
598
+ type: Input
599
+ }], extraData: [{
600
+ type: Input
601
+ }], flex: [{
602
+ type: Input
603
+ }], height: [{
604
+ type: Input
605
+ }], hidden: [{
606
+ type: Input
607
+ }], href: [{
608
+ type: Input
609
+ }], html: [{
610
+ type: Input
611
+ }], icon: [{
612
+ type: Input
613
+ }], iconAlign: [{
614
+ type: Input
615
+ }], id: [{
616
+ type: Input
617
+ }], insertBefore: [{
618
+ type: Input
619
+ }], insertFirst: [{
620
+ type: Input
621
+ }], keyMap: [{
622
+ type: Input
623
+ }], margin: [{
624
+ type: Input
625
+ }], maxHeight: [{
626
+ type: Input
627
+ }], maximizeOnMobile: [{
628
+ type: Input
629
+ }], maxWidth: [{
630
+ type: Input
631
+ }], menu: [{
632
+ type: Input
633
+ }], menuIcon: [{
634
+ type: Input
635
+ }], minHeight: [{
636
+ type: Input
637
+ }], minWidth: [{
638
+ type: Input
639
+ }], pressed: [{
640
+ type: Input
641
+ }], pressedCls: [{
642
+ type: Input
643
+ }], pressedIcon: [{
644
+ type: Input
645
+ }], readOnly: [{
646
+ type: Input
647
+ }], rendition: [{
648
+ type: Input
649
+ }], rtl: [{
650
+ type: Input
651
+ }], scrollable: [{
652
+ type: Input
653
+ }], span: [{
654
+ type: Input
655
+ }], split: [{
656
+ type: Input
657
+ }], tabIndex: [{
658
+ type: Input
659
+ }], target: [{
660
+ type: Input
661
+ }], text: [{
662
+ type: Input
663
+ }], toggleable: [{
664
+ type: Input
665
+ }], toggleGroup: [{
666
+ type: Input
667
+ }], tooltip: [{
668
+ type: Input
669
+ }], width: [{
670
+ type: Input
671
+ }], x: [{
672
+ type: Input
673
+ }], y: [{
674
+ type: Input
675
+ }], anchorSize: [{
676
+ type: Input
677
+ }], focusVisible: [{
678
+ type: Input
679
+ }], parent: [{
680
+ type: Input
681
+ }], onAction: [{
682
+ type: Output
683
+ }], onBeforeDestroy: [{
684
+ type: Output
685
+ }], onBeforeHide: [{
686
+ type: Output
687
+ }], onBeforeShow: [{
688
+ type: Output
689
+ }], onBeforeShowMenu: [{
690
+ type: Output
691
+ }], onBeforeToggle: [{
692
+ type: Output
693
+ }], onCatchAll: [{
694
+ type: Output
695
+ }], onClick: [{
696
+ type: Output
697
+ }], onDestroy: [{
698
+ type: Output
699
+ }], onElementCreated: [{
700
+ type: Output
701
+ }], onFocusIn: [{
702
+ type: Output
703
+ }], onFocusOut: [{
704
+ type: Output
705
+ }], onHide: [{
706
+ type: Output
707
+ }], onPaint: [{
708
+ type: Output
709
+ }], onReadOnly: [{
710
+ type: Output
711
+ }], onRecompose: [{
712
+ type: Output
713
+ }], onResize: [{
714
+ type: Output
715
+ }], onShow: [{
716
+ type: Output
717
+ }], onToggle: [{
718
+ type: Output
719
+ }] } });
720
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1zd2ltbGFuZS1zY3JvbGwtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudC9zcmMvbGliL2JyeW50dW0tc3dpbWxhbmUtc2Nyb2xsLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBQ3REOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0QsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsT0FBTyxFQUF3TCxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsTyxPQUFPLEVBQWdDLG9CQUFvQixFQUE0QyxNQUFNLHlCQUF5QixDQUFDOztBQXlqQnZJLE1BQU0sT0FBTyxvQ0FBb0M7SUFzUDdDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUF1SEYsa0JBQWtCO1FBQ2xCOzs7Ozs7V0FNRztRQUNPLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBK0UsQ0FBQztRQUMxSDs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBNkUsQ0FBQztRQUM1SDs7Ozs7OztXQU9HO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQTJILENBQUM7UUFDOUs7Ozs7Ozs7Ozs7V0FV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TTtzQkFBZCxLQUFLO2dCQVVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBU0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFRRyxPQUFPO3NCQUFoQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBYUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBV0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gU3dpbWxhbmVTY3JvbGxCdXR0b25cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBCdXR0b24sIERvbUNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrQ29uZmlnLCBNZW51LCBNZW51Q29uZmlnLCBNZW51SXRlbUVudHJ5LCBQb3B1cENvbmZpZywgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFRhYkNvbmZpZywgVG9vbHRpcENvbmZpZywgVnVlQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgVGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZywgU3dpbWxhbmVTY3JvbGxCdXR0b24sIFN3aW1sYW5lU2Nyb2xsQnV0dG9uTGlzdGVuZXJzLCBUYXNrQm9hcmQgfSBmcm9tICdAYnJ5bnR1bS90YXNrYm9hcmQtdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1Td2ltbGFuZVNjcm9sbEJ1dHRvblByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2FsaWduLXNlbGZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9hbGlnbi1zZWxmKSBzdHlsZS5cbiAgICAgKi9cbiAgICBhbGlnblNlbGYgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB0ZXh0IHRvIHNob3cgaW4gYmFkZ2UuXG4gICAgICovXG4gICAgYmFkZ2UgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBidXR0b24gYmVoYXZpb3JhbCB0eXBlLCB3aWxsIGJlIGFwcGxpZWQgYXMgYSBgdHlwZWAgYXR0cmlidXRlIHRvIHRoaXMgYnV0dG9uJ3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBiZWhhdmlvclR5cGUgPyA6ICdidXR0b24nfCdzdWJtaXQnfCdyZXNldCdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgb3IgW3Bvc2l0aW9uZWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXBvc2l0aW9uZWQpLipcbiAgICAgKiBFbGVtZW50LCBXaWRnZXQgb3IgUmVjdGFuZ2xlIHRvIHdoaWNoIHRoaXMgV2lkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICAgICAqL1xuICAgIGNvbnN0cmFpblRvID8gOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgY29udGVudCB0aGF0IGNvZXhpc3RzIHdpdGggc2libGluZyBlbGVtZW50cyB3aGljaCBtYXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZVxuICAgICAqIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KSBieSBwbHVnaW5zIGFuZCBmZWF0dXJlcy5cbiAgICAgKiBXaGVuIHNwZWNpZnlpbmcgaHRtbCwgdGhpcyB3aWRnZXQncyBlbGVtZW50IHdpbGwgYWxzbyBoYXZlIHRoZSBbaHRtbENsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1odG1sQ2xzKVxuICAgICAqIGNsYXNzIGFkZGVkIHRvIGl0cyBjbGFzc0xpc3QsIHRvIGFsbG93IHRhcmdldGVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY29udGVudCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBzaW5nbGUgdmFsdWUgaXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIFdpZGdldC4gU3VjaCBhcyB3aGVuIHVzZWRcbiAgICAgKiBpbiBhIGdyaWQgV2lkZ2V0Q29sdW1uLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSB0byB3aGljaCB0aGUgY29sdW1uJ3MgYGZpZWxkYCBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRCaW5kUHJvcGVydHkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgd2lkZ2V0LiBJdCBpcyBzaW1pbGFyIHRvIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICovXG4gICAgZHJhZ2dhYmxlID8gOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFtmbGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZmxleCkgc3R5bGUuXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgJmx0O2ZsZXgtZ3JvdyZndDsgJmx0O2ZsZXgtc2hyaW5rJmd0OyAmbHQ7ZmxleC1iYXNpcyZndDtgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGBmbGV4LWdyb3dgIHZhbHVlLlxuICAgICAqL1xuICAgIGZsZXggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG1vdmUgdGhlIHdpZGdldCBvdXQgb2YgdGhlIGRvY3VtZW50IGZsb3cgYW5kIHBvc2l0aW9uIGl0XG4gICAgICogYWJzb2x1dGVseSBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGZsb2F0aW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWhpZGVBbmltYXRpb24pXG4gICAgICovXG4gICAgaGlkZUFuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBJZiBwcm92aWRlZCwgdHVybnMgdGhlIGJ1dHRvbiBpbnRvIGEgbGluay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctaHJlZilcbiAgICAgKi9cbiAgICBocmVmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgSFRNTCB0byBkaXNwbGF5IGluaXRpYWxseSBvciBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbWFya3VwIChjYWxsZWQgYXQgd2lkZ2V0IGNvbnN0cnVjdGlvbiB0aW1lKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctaHRtbClcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gd2lkZ2V0IFRoZSBjYWxsaW5nIFdpZGdldFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaHRtbCA/IDogc3RyaW5nfCgod2lkZ2V0OiBXaWRnZXQpID0+IHN0cmluZyl8RG9tQ29uZmlnfERvbUNvbmZpZ1tdfFZ1ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBDU1MgY2xhc3MoZXMpIHRvIGFkZCB3aGVuIEhUTUwgY29udGVudCBpcyBiZWluZyBhcHBsaWVkIHRvIHRoaXMgd2lkZ2V0LlxuICAgICAqL1xuICAgIGh0bWxDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBCdXR0b24gaWNvbiBjbGFzcywgYSBkZXZlbG9wZXItZGVmaW5lZCBDU1MgY2xhc3Mgc3RyaW5nIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGRlc2lyZWQgaWNvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctaWNvbilcbiAgICAgKi9cbiAgICBpY29uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBCdXR0b24gaWNvbiBhbGlnbm1lbnQuIE1heSBiZSBgJ3N0YXJ0J2Agb3IgYCdlbmQnYC4gRGVmYXVsdHMgdG8gYCdzdGFydCdgXG4gICAgICovXG4gICAgaWNvbkFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctaWdub3JlUGFyZW50UmVhZE9ubHkpXG4gICAgICovXG4gICAgaWdub3JlUGFyZW50UmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBba2V5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkpIG5hbWVcbiAgICAgKiBhbmQgb3B0aW9uYWwgbW9kaWZpZXIgcHJlZml4ZXM6IGAnQ3RybCsnYCwgYCdBbHQrJ2AsIGAnTWV0YSsnYCwgYW5kIGAnU2hpZnQrJ2AgKGNhc2UtaW5zZW5zaXRpdmUpLiBUaGUgdmFsdWVzXG4gICAgICogYXJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSBtZXRob2QgdG8gY2FsbCB3aGVuIHRoZSBrZXlzdHJva2UgaXMgcmVjZWl2ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogU3dpbWxhbmVTY3JvbGxCdXR0b25MaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBBIGNsYXNzIHRyYW5zbGF0aW9ucyBvZiB3aGljaCBhcmUgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhpcyBlbnRpdHkuXG4gICAgICogVGhpcyBpcyBvZnRlbiB1c2VkIHdoZW4gdHJhbnNsYXRpb25zIG9mIGFuIGl0ZW0gYXJlIGRlZmluZWQgb24gaXRzIGNvbnRhaW5lciBjbGFzcy5cbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctbG9jYWxlQ2xhc3MpXG4gICAgICovXG4gICAgbG9jYWxlQ2xhc3MgPyA6IHR5cGVvZiBCYXNlXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgbG9jYWxpemFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggdmFsdWVzIHNob3VsZCBiZSB0cmFuc2xhdGVkIGF1dG9tYXRpY2FsbHkgdXBvbiBhIGxvY2FsZSBhcHBseWluZy5cbiAgICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgbmVlZCB0byBsb2NhbGl6ZSBub3QgdHlwaWNhbCB2YWx1ZSAobm90IGEgU3RyaW5nIHZhbHVlIG9yIGEgZmllbGQgd2l0aCByZS1kZWZpbmVkIHNldHRlci9nZXR0ZXIpLFxuICAgICAqIHlvdSBjb3VsZCB1c2UgJ2xvY2FsZUtleScgbWV0YSBjb25maWd1cmF0aW9uLlxuICAgICAqIEV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNyZWF0ZWQgZm9yIHRoZVxuICAgICAqIFttYXNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza2VkKSBjb25maWcuIEFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYG1hc2tlZGAgY29uZmlnIHdpbGwgb3ZlcnJpZGUgdGhlc2VcbiAgICAgKiB2YWx1ZXMuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhIZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHN1Ym1lbnUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFuIGFycmF5IG9mIE1lbnVJdGVtIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBmcm9tIHdoaWNoIHRvIGNyZWF0ZSBhXG4gICAgICogc3VibWVudSB3aGljaCBpcyBzaG93biB3aGVuIHRoaXMgYnV0dG9uIGlzIHByZXNzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLW1lbnUpXG4gICAgICovXG4gICAgbWVudSA/IDogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeXxUYXNrQm9hcmRDb250YWluZXJJdGVtQ29uZmlnPnwoTWVudUl0ZW1FbnRyeXxUYXNrQm9hcmRDb250YWluZXJJdGVtQ29uZmlnKVtdfE1lbnVDb25maWd8UG9wdXBDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgbWVudSBpY29uIGNsYXNzIHRvIHNob3cgd2hlbiB0aGUgYnV0dG9uIGhhcyBhIG1lbnUuIFNldCB0byBgbnVsbGAgdG8gbm90IHNob3cgYSBtZW51IGljb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLW1lbnVJY29uKVxuICAgICAqL1xuICAgIG1lbnVJY29uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1pbkhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgaXMgY29uZmlndXJlZCBhcyBgdHJ1ZWAgYSBbUmVzaXplT2JzZXJ2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNpemVPYnNlcnZlcilcbiAgICAgKiBpcyB1c2VkIHRvIG1vbml0b3IgdGhpcyBlbGVtZW50IGZvciBzaXplIGNoYW5nZXMgY2F1c2VkIGJ5IGVpdGhlciBzdHlsZSBtYW5pcHVsYXRpb24sIG9yIGJ5IENTU1xuICAgICAqIGxheW91dC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgd2hlbiBhIHdpZGdldCBpcyByZW5kZXJlZCBpbnRvIGFub3RoZXIgd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctcG9zaXRpb25lZClcbiAgICAgKi9cbiAgICBwb3NpdGlvbmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGx5IHByZXNzZWQgb3Igbm90LiBPbmx5IGFwcGxpZXMgd2l0aCBgdG9nZ2xlYWJsZSA9IHRydWVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1wcmVzc2VkKVxuICAgICAqL1xuICAgIHByZXNzZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIENTUyBjbGFzcyB0byBhZGQgdG8gdGhlIHByZXNzZWQgc3RhdGUgb2YgdGhlIGJ1dHRvbi4gQSBgYi1wcmVzc2VkYCBDU1MgY2xhc3MgaXMgYWx3YXlzIGFkZGVkLFxuICAgICAqIHdoZW4gYSBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBwcmVzc2VkQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJY29uIGNsYXNzIGZvciB0aGUgYnV0dG9ucyBwcmVzc2VkIHN0YXRlLCBhIGRldmVsb3Blci1kZWZpbmVkIENTUyBjbGFzcyBzdHJpbmcgd2hpY2ggcmVzdWx0cyBpbiB0aGVcbiAgICAgKiBkZXNpcmVkIGljb24uIE9ubHkgYXBwbGllcyB0byB0b2dnbGUgYnV0dG9uc1xuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1wcmVzc2VkSWNvbilcbiAgICAgKi9cbiAgICBwcmVzc2VkSWNvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgd2lkZ2V0IGlzIHJlYWQtb25seS4gIFRoaXMgaXMgb25seSB2YWxpZCBpZiB0aGUgd2lkZ2V0IGlzIGFuIGlucHV0XG4gICAgICogZmllbGQsIDxzdHJvbmc+b3IgY29udGFpbnMgaW5wdXQgZmllbGRzIGF0IGFueSBkZXB0aDwvc3Ryb25nPi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJlZGVmaW5lZCBzdHlsZSB0byB1c2UgZm9yIHRoZSBidXR0b24uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6ICdlbGV2YXRlZCd8J2ZpbGxlZCd8J3RvbmFsJ3wnb3V0bGluZWQnfCd0ZXh0J3xzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBkaXNwbGF5IGEgdHJhbnNsdWNlbnQgcmlwcGxlIHdoZW4gaXRzXG4gICAgICogW2ZvY3VzRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWZvY3VzRWxlbWVudCksIG9yIFtlbGVtZW50XSgjQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIHRhcHBlZCA8ZW0+aWYgdGhlXG4gICAgICogY3VycmVudCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzPC9lbT4uIE91dCBvZiB0aGUgYm94LCBvbmx5IHRoZSBNYXRlcmlhbCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLXNjcm9sbGFibGUpXG4gICAgICovXG4gICAgc2Nyb2xsYWJsZSA/IDogYm9vbGVhbnxTY3JvbGxlckNvbmZpZ3xTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hhdCB0byBkbyBpZiBkb2N1bWVudCBpcyBzY3JvbGxlZCB3aGlsZSBXaWRnZXQgaXMgdmlzaWJsZSAob25seSByZWxldmFudCB3aGVuIGZsb2F0aW5nIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqIFZhbGlkIHZhbHVlczogwrRudWxswrQ6IGRvIG5vdGhpbmcsIMK0aGlkZcK0OiBoaWRlIHRoZSB3aWRnZXQgb3IgwrRyZWFsaWduwrQ6IHJlYWxpZ24gdG8gdGhlIHRhcmdldCBpZiBwb3NzaWJsZS5cbiAgICAgKi9cbiAgICBzY3JvbGxBY3Rpb24gPyA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy1zaG93QW5pbWF0aW9uKVxuICAgICAqL1xuICAgIHNob3dBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gY3JlYXRlIGEgc3BsaXQgYnV0dG9uLiBBIHNwbGl0IGJ1dHRvbiBoYXMgYSBtYWluIGFjdGlvbiBhbmQgYSBkcm9wZG93biBhcnJvdyB0byBzaG93IGEgbWVudS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctc3BsaXQpXG4gICAgICovXG4gICAgc3BsaXQgPyA6IGJvb2xlYW58J21vdXNlb3Zlcid8J2hvdmVyJ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gcGVyZm9ybSBhY3Rpb24gb24gY2xpY2tpbmcgdGhlIGJ1dHRvbiBpZiBpdCdzIGFscmVhZHkgcHJlc3NlZFxuICAgICAqIGFuZCBiZWxvbmdzIHRvIGEgW3RvZ2dsZUdyb3VwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9CdXR0b24jY29uZmlnLXRvZ2dsZUdyb3VwKS5cbiAgICAgKi9cbiAgICBzdXBwb3J0c1ByZXNzZWRDbGljayA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIHRhYiBpbmRleCBvZiB0aGUgYnV0dG9uLCBvciBgbnVsbGAgZm9yIG5hdHVyYWwgdGFiIG9yZGVyIChyZWNvbW1lbmRlZCkuIFNldHRpbmcgdG8gYDBgIGlzIGVxdWl2YWxlbnRcbiAgICAgKiB0byBuYXR1cmFsIHRhYiBvcmRlciwgYnV0IGlzIHVubmVjZXNzYXJ5IGZvciBidXR0b25zIHNpbmNlIHRoZXkgYXJlIG5hdHVyYWxseSB0YWJiYWJsZSAoaS5lLiwgYWNjZXNzaWJsZVxuICAgICAqIHZpYSB0aGUgVEFCIGtleSkuIFNldHRpbmcgdG8gYC0xYCBkaXNhYmxlcyB0YWJiYWJpbGl0eSBidXQgYWxsb3dzIGZvciBmb2N1cyB0byBiZSBzZXQgdG8gdGhlIGVsZW1lbnRcbiAgICAgKiBwcm9ncmFtbWF0aWNhbGx5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy10YWJJbmRleClcbiAgICAgKi9cbiAgICB0YWJJbmRleCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHRhZyBuYW1lIG9mIHRoaXMgV2lkZ2V0J3Mgcm9vdCBlbGVtZW50XG4gICAgICovXG4gICAgdGFnID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYHRhcmdldGAgYXR0cmlidXRlIGZvciB0aGUgW2hyZWZdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0J1dHRvbiNjb25maWctaHJlZikgY29uZmlnXG4gICAgICovXG4gICAgdGFyZ2V0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBdXRvIGRldGVjdGVkIHdoZW4gdXNlZCB3aXRoaW4gYSBUYXNrQm9hcmQuIElmIHlvdSBhZGQgdGhlIHdpZGdldCBlbHNld2hlcmUsIGl0IHdpbGwgdHJ5IHRvIGZpbmQgYW4gaW5zdGFuY2VcbiAgICAgKiBvZiBUYXNrQm9hcmQgb24gcGFnZS4gSWYgdGhhdCBmYWlscyB5b3UgaGF2ZSB0byBzdXBwbHkgdGhpcyBjb25maWcgdG8gY29ubmVjdCBpdCB0byBhIFRhc2tCb2FyZCBtYW51YWxseS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWctdGFza0JvYXJkKVxuICAgICAqL1xuICAgIHRhc2tCb2FyZCA/IDogVGFza0JvYXJkXG4gICAgLyoqXG4gICAgICogVGhlIGJ1dHRvbidzIHRleHQuIFlvdSBjYW4gYWxzbyBzdXBwbHkgYSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9yIGFuIGFycmF5IG9mIERvbUNvbmZpZ3MgZm9yIGNvbXBsZXggYnV0dG9uXG4gICAgICogY29udGVudC5cbiAgICAgKi9cbiAgICB0ZXh0ID8gOiBzdHJpbmd8RG9tQ29uZmlnfERvbUNvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGZvciB0aGUgd2lkZ2V0LiBPbmx5IGluIGVmZmVjdCB3aGVuIGluc2lkZSBhIGNvbnRhaW5lciB0aGF0IHVzZXMgaXQgKHN1Y2ggYXMgVGFiUGFuZWwpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZWQgdG9nZ2xpbmcgb2YgdGhlIGJ1dHRvbiAoc3RheXMgcHJlc3NlZCB3aGVuIHByZXNzZWQpLlxuICAgICAqL1xuICAgIHRvZ2dsZWFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGJ1dHRvbiBpcyBwYXJ0IG9mIGEgZ3JvdXAgd2hlcmUgb25seSBvbmUgYnV0dG9uIGNhbiBiZSBwcmVzc2VkLiBBc3NpZ25pbmcgYSB2YWx1ZVxuICAgICAqIGFsc28gc2V0cyBgdG9nZ2xlYWJsZWAgdG8gYHRydWVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy10b2dnbGVHcm91cClcbiAgICAgKi9cbiAgICB0b2dnbGVHcm91cCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1N3aW1sYW5lU2Nyb2xsQnV0dG9uI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICB0eXBlID8gOiAnc3dpbWxhbmVTY3JvbGxCdXR0b24nfCdzd2ltbGFuZXNjcm9sbGJ1dHRvbidcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvU3dpbWxhbmVTY3JvbGxCdXR0b24jY29uZmlnLXVpKVxuICAgICAqL1xuICAgIHVpID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWcteClcbiAgICAgKi9cbiAgICB4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXN3aW1sYW5lLXNjcm9sbC1idXR0b24nLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bVN3aW1sYW5lU2Nyb2xsQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gU3dpbWxhbmVTY3JvbGxCdXR0b247XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdTd2ltbGFuZVNjcm9sbEJ1dHRvbic7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQWN0aW9uJyxcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZUhpZGUnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU2hvd01lbnUnLFxuICAgICAgICAnb25CZWZvcmVUb2dnbGUnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNsaWNrJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uVG9nZ2xlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtU3dpbWxhbmVTY3JvbGxCdXR0b25Db21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2JhZGdlJyxcbiAgICAgICAgJ2JlaGF2aW9yVHlwZScsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50JyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaHJlZicsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2h0bWxDbHMnLFxuICAgICAgICAnaWNvbicsXG4gICAgICAgICdpY29uQWxpZ24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21lbnUnLFxuICAgICAgICAnbWVudUljb24nLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmVzc2VkJyxcbiAgICAgICAgJ3ByZXNzZWRDbHMnLFxuICAgICAgICAncHJlc3NlZEljb24nLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3NwbGl0JyxcbiAgICAgICAgJ3N1cHBvcnRzUHJlc3NlZENsaWNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGFyZ2V0JyxcbiAgICAgICAgJ3Rhc2tCb2FyZCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b2dnbGVhYmxlJyxcbiAgICAgICAgJ3RvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2h0bWxDbHMnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc3VwcG9ydHNQcmVzc2VkQ2xpY2snLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0YXNrQm9hcmQnLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bVN3aW1sYW5lU2Nyb2xsQnV0dG9uQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2JhZGdlJyxcbiAgICAgICAgJ2JlaGF2aW9yVHlwZScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2ZvY3VzVmlzaWJsZScsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hyZWYnLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2ljb25BbGlnbicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtZW51JyxcbiAgICAgICAgJ21lbnVJY29uJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncHJlc3NlZCcsXG4gICAgICAgICdwcmVzc2VkQ2xzJyxcbiAgICAgICAgJ3ByZXNzZWRJY29uJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3NwbGl0JyxcbiAgICAgICAgJ3RhYkluZGV4JyxcbiAgICAgICAgJ3RhcmdldCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RvZ2dsZWFibGUnLFxuICAgICAgICAndG9nZ2xlR3JvdXAnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogU3dpbWxhbmVTY3JvbGxCdXR0b247XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWduICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFsaWduU3BlY3xzdHJpbmc7XG4gICAgQElucHV0KCkgYW5jaG9yICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjZW50ZXJlZCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29uc3RyYWluVG8gICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0QmluZFByb3BlcnR5ICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZHJhZ2dhYmxlICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlQW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBodG1sQ2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAhIDogU3dpbWxhbmVTY3JvbGxCdXR0b25MaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcG9zaXRpb25lZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmlwcGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSByb290RWxlbWVudCAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbEFjdGlvbiAgICAgICAgICAgICAgICAgISA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbDtcbiAgICBASW5wdXQoKSBzaG93QW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN1cHBvcnRzUHJlc3NlZENsaWNrICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRhc2tCb2FyZCAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tCb2FyZDtcbiAgICBASW5wdXQoKSB0ZXh0QWxpZ24gICAgICAgICAgICAgICAgICAgICEgOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnc3dpbWxhbmVTY3JvbGxCdXR0b24nfCdzd2ltbGFuZXNjcm9sbGJ1dHRvbic7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYmVoYXZpb3JUeXBlICAgICAgICAgICAgICAgICEgOiAnYnV0dG9uJ3wnc3VibWl0J3wncmVzZXQnO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbnRlbnQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdpbmVydCc7XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHJlZiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KCh3aWRnZXQ6IFdpZGdldCkgPT4gc3RyaW5nKXxEb21Db25maWd8RG9tQ29uZmlnW118VnVlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGljb24gICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb25BbGlnbiAgICAgICAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBrZXlNYXAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhpbWl6ZU9uTW9iaWxlICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1lbnUgICAgICAgICAgICAgICAgICAgICAgICAhIDogV2lkZ2V0fFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnl8VGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZz58KE1lbnVJdGVtRW50cnl8VGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZylbXXxNZW51Q29uZmlnfFBvcHVwQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1lbnVJY29uICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgcHJlc3NlZCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXNzZWRDbHMgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByZXNzZWRJY29uICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZW5kaXRpb24gICAgICAgICAgICAgICAgICAgISA6ICdlbGV2YXRlZCd8J2ZpbGxlZCd8J3RvbmFsJ3wnb3V0bGluZWQnfCd0ZXh0J3xzdHJpbmc7XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsZXJ8Ym9vbGVhbnxTY3JvbGxlckNvbmZpZztcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzcGxpdCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J21vdXNlb3Zlcid8J2hvdmVyJztcbiAgICBASW5wdXQoKSB0YWJJbmRleCAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWd8RG9tQ29uZmlnW107XG4gICAgQElucHV0KCkgdG9nZ2xlYWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRvZ2dsZUdyb3VwICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBhbmNob3JTaXplICAgISA6IG51bWJlcltdO1xuICAgIEBJbnB1dCgpIGZvY3VzVmlzaWJsZSAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgISA6IFdpZGdldDtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGRlZmF1bHQgYWN0aW9uIGlzIHBlcmZvcm1lZCAodGhlIGJ1dHRvbiBpcyBjbGlja2VkKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkJ1dHRvbn0gZXZlbnQuc291cmNlIFRoZSBidXR0b25cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBERVBSRUNBVEVEIC0gVXNlIGRvbUV2ZW50IGluc3RlYWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50LiBVc2luZyB0aGUgYHBvaW50ZXJUeXBlYCBwcm9wZXJ0eSBvZiB0aGlzIGV2ZW50IGNhbiBoZWxwIGRldGVybWluZSBpZiBpdCB3YXMgYSBtb3VzZSwgdG91Y2ggb3IgcGVuIGFjdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BY3Rpb246IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJ1dHRvbiwgZXZlbnQ6IEV2ZW50LCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBoaWRkZW4uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIGhpZGRlbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgYnV0dG9uJ3MgbWVudSBpcyBhYm91dCB0byBiZSBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5CdXR0b259IGV2ZW50LnNvdXJjZSBUaGlzIEJ1dHRvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhpcyBidXR0b24ncyBtZW51IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudXNlckFjdGlvbiBgdHJ1ZWAgaWYgdGhlIHRvZ2dsZSB3YXMgdHJpZ2dlcmVkIGJ5IGEgdXNlciBhY3Rpb24gKGNsaWNrKSwgYGZhbHNlYCBpZiBpdCB3YXMgdHJpZ2dlcmVkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG9yaWdpbmFsIERPTSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWN0aW9uLCBpZiBhbnkuIFVzaW5nIHRoZSBgcG9pbnRlclR5cGVgIHByb3BlcnR5IG9mIHRoaXMgZXZlbnQgY2FuIGhlbHAgZGV0ZXJtaW5lIGlmIGl0IHdhcyBhIG1vdXNlLCB0b3VjaCBvciBwZW4gYWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3dNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCdXR0b24sIG1lbnU6IE1lbnUsIHVzZXJBY3Rpb246IGJvb2xlYW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSB0aGUgYnV0dG9uIGlzIHRvZ2dsZWQgKHRoZSBbcHJlc3NlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQnV0dG9uI3Byb3BlcnR5LXByZXNzZWQpIHN0YXRlIGlzIGNoYW5nZWQpLiBJZiB0aGUgYnV0dG9uIGlzIHBhcnQgb2ZcbiAgICAgKiBhIFt0b2dnbGVHcm91cF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQnV0dG9uI2NvbmZpZy10b2dnbGVHcm91cCkgYW5kIHlvdSBuZWVkIHRvIHByb2Nlc3MgdGhlIHByZXNzZWQgYnV0dG9uIG9ubHksIGNvbnNpZGVyIHVzaW5nXG4gICAgICogW2NsaWNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9CdXR0b24jZXZlbnQtY2xpY2spIGV2ZW50IG9yIFthY3Rpb25dKCNDb3JlL3dpZGdldC9CdXR0b24jZXZlbnQtYWN0aW9uKSBldmVudC5cbiAgICAgKiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSB0b2dnbGUgdG8gdGhlIG5ldyBwcmVzc2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkJ1dHRvbn0gZXZlbnQuc291cmNlIFRvZ2dsZWQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5wcmVzc2VkIE5ldyBwcmVzc2VkIHN0YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC51c2VyQWN0aW9uIGB0cnVlYCBpZiB0aGUgdG9nZ2xlIHdhcyB0cmlnZ2VyZWQgYnkgYSB1c2VyIGFjdGlvbiAoY2xpY2spLCBgZmFsc2VgIGlmIGl0IHdhcyB0cmlnZ2VyZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgb3JpZ2luYWwgRE9NIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3Rpb24sIGlmIGFueS4gVXNpbmcgdGhlIGBwb2ludGVyVHlwZWAgcHJvcGVydHkgb2YgdGhpcyBldmVudCBjYW4gaGVscCBkZXRlcm1pbmUgaWYgaXQgd2FzIGEgbW91c2UsIHRvdWNoIG9yIHBlbiBhY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCdXR0b24sIHByZXNzZWQ6IGJvb2xlYW4sIHVzZXJBY3Rpb246IGJvb2xlYW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQnV0dG9ufSBldmVudC5zb3VyY2UgVGhlIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IERFUFJFQ0FURUQgLSBVc2UgZG9tRXZlbnQgaW5zdGVhZC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQuIFVzaW5nIHRoZSBgcG9pbnRlclR5cGVgIHByb3BlcnR5IG9mIHRoaXMgZXZlbnQgY2FuIGhlbHAgZGV0ZXJtaW5lIGlmIGl0IHdhcyBhIG1vdXNlLCB0b3VjaCBvciBwZW4gYWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCdXR0b24sIGV2ZW50OiBFdmVudCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRoZSBXaWRnZXQncyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVsZW1lbnRDcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9Td2ltbGFuZVNjcm9sbEJ1dHRvbiNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGJ1dHRvbiBpcyB0b2dnbGVkIHZpYSBhIFVJIGludGVyYWN0aW9uICh0aGUgW3ByZXNzZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0J1dHRvbiNwcm9wZXJ0eS1wcmVzc2VkKSBzdGF0ZSBpcyBjaGFuZ2VkKS4gSWYgdGhlIGJ1dHRvbiBpcyBwYXJ0IG9mIGFcbiAgICAgKiBbdG9nZ2xlR3JvdXBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0J1dHRvbiNjb25maWctdG9nZ2xlR3JvdXApIGFuZCB5b3UgbmVlZCB0byBwcm9jZXNzIHRoZSBwcmVzc2VkIGJ1dHRvbiBvbmx5LCBjb25zaWRlciB1c2luZ1xuICAgICAqIFtjbGlja10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQnV0dG9uI2V2ZW50LWNsaWNrKSBldmVudCBvciBbYWN0aW9uXSgjQ29yZS93aWRnZXQvQnV0dG9uI2V2ZW50LWFjdGlvbikgZXZlbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQnV0dG9ufSBldmVudC5zb3VyY2UgVG9nZ2xlZCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnByZXNzZWQgTmV3IHByZXNzZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gYHRydWVgIGlmIHRoZSB0b2dnbGUgd2FzIHRyaWdnZXJlZCBieSBhIHVzZXIgYWN0aW9uIChjbGljayksIGBmYWxzZWAgaWYgaXQgd2FzIHRyaWdnZXJlZCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBvcmlnaW5hbCBET00gZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGFjdGlvbiwgaWYgYW55LiBVc2luZyB0aGUgYHBvaW50ZXJUeXBlYCBwcm9wZXJ0eSBvZiB0aGlzIGV2ZW50IGNhbiBoZWxwIGRldGVybWluZSBpZiBpdCB3YXMgYSBtb3VzZSwgdG91Y2ggb3IgcGVuIGFjdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJ1dHRvbiwgcHJlc3NlZDogYm9vbGVhbiwgdXNlckFjdGlvbjogYm9vbGVhbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtU3dpbWxhbmVTY3JvbGxCdXR0b25Db21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bVN3aW1sYW5lU2Nyb2xsQnV0dG9uQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1Td2ltbGFuZVNjcm9sbEJ1dHRvbkNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==