@bryntum/grid-angular 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 (132) hide show
  1. package/README.md +44 -0
  2. package/bryntum-grid-angular.d.ts +5 -0
  3. package/bundles/bryntum-grid-angular.umd.js +49212 -0
  4. package/bundles/bryntum-grid-angular.umd.js.map +1 -0
  5. package/esm2015/bryntum-grid-angular.js +5 -0
  6. package/esm2015/lib/bryntum-a-i-filter-field.component.js +791 -0
  7. package/esm2015/lib/bryntum-button-group.component.js +725 -0
  8. package/esm2015/lib/bryntum-button.component.js +715 -0
  9. package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
  10. package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
  11. package/esm2015/lib/bryntum-checkbox.component.js +805 -0
  12. package/esm2015/lib/bryntum-checklist-filter-combo.component.js +943 -0
  13. package/esm2015/lib/bryntum-chip-view.component.js +727 -0
  14. package/esm2015/lib/bryntum-code-editor.component.js +818 -0
  15. package/esm2015/lib/bryntum-color-field.component.js +794 -0
  16. package/esm2015/lib/bryntum-combo.component.js +932 -0
  17. package/esm2015/lib/bryntum-container.component.js +681 -0
  18. package/esm2015/lib/bryntum-date-field.component.js +831 -0
  19. package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
  20. package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
  21. package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
  22. package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
  23. package/esm2015/lib/bryntum-demo-header.component.js +171 -0
  24. package/esm2015/lib/bryntum-display-field.component.js +772 -0
  25. package/esm2015/lib/bryntum-duration-field.component.js +815 -0
  26. package/esm2015/lib/bryntum-editor.component.js +823 -0
  27. package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
  28. package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
  29. package/esm2015/lib/bryntum-field-set.component.js +810 -0
  30. package/esm2015/lib/bryntum-file-field.component.js +776 -0
  31. package/esm2015/lib/bryntum-file-picker.component.js +709 -0
  32. package/esm2015/lib/bryntum-filter-field.component.js +803 -0
  33. package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
  34. package/esm2015/lib/bryntum-grid-base.component.js +2099 -0
  35. package/esm2015/lib/bryntum-grid-chart-designer.component.js +588 -0
  36. package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +754 -0
  37. package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +744 -0
  38. package/esm2015/lib/bryntum-grid.component.js +2103 -0
  39. package/esm2015/lib/bryntum-group-bar.component.js +727 -0
  40. package/esm2015/lib/bryntum-hint.component.js +856 -0
  41. package/esm2015/lib/bryntum-label.component.js +584 -0
  42. package/esm2015/lib/bryntum-list.component.js +715 -0
  43. package/esm2015/lib/bryntum-menu.component.js +883 -0
  44. package/esm2015/lib/bryntum-month-picker.component.js +818 -0
  45. package/esm2015/lib/bryntum-number-field.component.js +800 -0
  46. package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
  47. package/esm2015/lib/bryntum-panel.component.js +794 -0
  48. package/esm2015/lib/bryntum-password-field.component.js +768 -0
  49. package/esm2015/lib/bryntum-radio-group.component.js +826 -0
  50. package/esm2015/lib/bryntum-radio.component.js +805 -0
  51. package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
  52. package/esm2015/lib/bryntum-slider.component.js +661 -0
  53. package/esm2015/lib/bryntum-splitter.component.js +618 -0
  54. package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
  55. package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
  56. package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
  57. package/esm2015/lib/bryntum-text-field.component.js +783 -0
  58. package/esm2015/lib/bryntum-time-field.component.js +819 -0
  59. package/esm2015/lib/bryntum-time-picker.component.js +709 -0
  60. package/esm2015/lib/bryntum-toolbar.component.js +732 -0
  61. package/esm2015/lib/bryntum-tree-combo.component.js +932 -0
  62. package/esm2015/lib/bryntum-tree-grid.component.js +2103 -0
  63. package/esm2015/lib/bryntum-widget.component.js +580 -0
  64. package/esm2015/lib/bryntum-year-picker.component.js +827 -0
  65. package/esm2015/lib/grid.module.js +314 -0
  66. package/esm2015/lib/wrapper.helper.js +74 -0
  67. package/esm2015/public-api.js +64 -0
  68. package/fesm2015/bryntum-grid-angular.js +48622 -0
  69. package/fesm2015/bryntum-grid-angular.js.map +1 -0
  70. package/lib/bryntum-a-i-filter-field.component.d.ts +968 -0
  71. package/lib/bryntum-button-group.component.d.ts +860 -0
  72. package/lib/bryntum-button.component.d.ts +845 -0
  73. package/lib/bryntum-chat-panel.component.d.ts +1060 -0
  74. package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
  75. package/lib/bryntum-checkbox.component.d.ts +968 -0
  76. package/lib/bryntum-checklist-filter-combo.component.d.ts +1210 -0
  77. package/lib/bryntum-chip-view.component.d.ts +872 -0
  78. package/lib/bryntum-code-editor.component.d.ts +1045 -0
  79. package/lib/bryntum-color-field.component.d.ts +965 -0
  80. package/lib/bryntum-combo.component.d.ts +1199 -0
  81. package/lib/bryntum-container.component.d.ts +822 -0
  82. package/lib/bryntum-date-field.component.d.ts +1025 -0
  83. package/lib/bryntum-date-picker.component.d.ts +1338 -0
  84. package/lib/bryntum-date-range-field.component.d.ts +1027 -0
  85. package/lib/bryntum-date-time-field.component.d.ts +912 -0
  86. package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
  87. package/lib/bryntum-demo-header.component.d.ts +29 -0
  88. package/lib/bryntum-display-field.component.d.ts +949 -0
  89. package/lib/bryntum-duration-field.component.d.ts +1008 -0
  90. package/lib/bryntum-editor.component.d.ts +969 -0
  91. package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
  92. package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
  93. package/lib/bryntum-field-set.component.d.ts +1038 -0
  94. package/lib/bryntum-file-field.component.d.ts +952 -0
  95. package/lib/bryntum-file-picker.component.d.ts +847 -0
  96. package/lib/bryntum-filter-field.component.d.ts +993 -0
  97. package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
  98. package/lib/bryntum-grid-base.component.d.ts +2271 -0
  99. package/lib/bryntum-grid-chart-designer.component.d.ts +691 -0
  100. package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +929 -0
  101. package/lib/bryntum-grid-field-filter-picker.component.d.ts +916 -0
  102. package/lib/bryntum-grid.component.d.ts +2273 -0
  103. package/lib/bryntum-group-bar.component.d.ts +872 -0
  104. package/lib/bryntum-hint.component.d.ts +1117 -0
  105. package/lib/bryntum-label.component.d.ts +683 -0
  106. package/lib/bryntum-list.component.d.ts +849 -0
  107. package/lib/bryntum-menu.component.d.ts +1129 -0
  108. package/lib/bryntum-month-picker.component.d.ts +1034 -0
  109. package/lib/bryntum-number-field.component.d.ts +995 -0
  110. package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
  111. package/lib/bryntum-panel.component.d.ts +1015 -0
  112. package/lib/bryntum-password-field.component.d.ts +939 -0
  113. package/lib/bryntum-radio-group.component.d.ts +1068 -0
  114. package/lib/bryntum-radio.component.d.ts +968 -0
  115. package/lib/bryntum-slide-toggle.component.d.ts +968 -0
  116. package/lib/bryntum-slider.component.d.ts +776 -0
  117. package/lib/bryntum-splitter.component.d.ts +714 -0
  118. package/lib/bryntum-tab-panel.component.d.ts +1065 -0
  119. package/lib/bryntum-text-area-field.component.d.ts +951 -0
  120. package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
  121. package/lib/bryntum-text-field.component.d.ts +957 -0
  122. package/lib/bryntum-time-field.component.d.ts +1006 -0
  123. package/lib/bryntum-time-picker.component.d.ts +853 -0
  124. package/lib/bryntum-toolbar.component.d.ts +879 -0
  125. package/lib/bryntum-tree-combo.component.d.ts +1199 -0
  126. package/lib/bryntum-tree-grid.component.d.ts +2273 -0
  127. package/lib/bryntum-widget.component.d.ts +678 -0
  128. package/lib/bryntum-year-picker.component.d.ts +1049 -0
  129. package/lib/grid.module.d.ts +65 -0
  130. package/lib/wrapper.helper.d.ts +26 -0
  131. package/package.json +33 -0
  132. package/public-api.d.ts +60 -0
@@ -0,0 +1,818 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum MonthPicker
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { MonthPicker, Widget } from '@bryntum/grid';
8
+ import * as i0 from "@angular/core";
9
+ export class BryntumMonthPickerComponent {
10
+ constructor(element) {
11
+ this.bryntumConfig = {
12
+ adopt: undefined,
13
+ appendTo: undefined,
14
+ href: undefined,
15
+ angularComponent: this,
16
+ features: {},
17
+ listeners: {}
18
+ };
19
+ // Events emitters
20
+ /**
21
+ * Fires before an object is destroyed.
22
+ * @param {object} event Event object
23
+ * @param {Core.Base} event.source The Object that is being destroyed.
24
+ */
25
+ this.onBeforeDestroy = new EventEmitter();
26
+ /**
27
+ * Triggered before a widget is hidden. Return `false` to prevent the action.
28
+ * @param {object} event Event object
29
+ * @param {Core.widget.Widget} event.source The widget being hidden.
30
+ */
31
+ this.onBeforeHide = new EventEmitter();
32
+ /**
33
+ * Fired before this container will load record values into its child fields. This is useful if you
34
+ * want to modify the UI before data is loaded (e.g. set some input field to be readonly)
35
+ * @param {object} event Event object
36
+ * @param {Core.widget.Container} event.source The container
37
+ * @param {Core.data.Model} event.record The record
38
+ */
39
+ this.onBeforeSetRecord = new EventEmitter();
40
+ /**
41
+ * Triggered before a widget is shown. Return `false` to prevent the action.
42
+ * @param {object} event Event object
43
+ * @param {Core.widget.Widget,any} event.source The widget being shown
44
+ */
45
+ this.onBeforeShow = new EventEmitter();
46
+ /**
47
+ * Fired before state is applied to the source. Allows editing the state object or preventing the operation.
48
+ * @param {object} event Event object
49
+ * @param {any} event.state State object config
50
+ */
51
+ this.onBeforeStateApply = new EventEmitter();
52
+ /**
53
+ * Fired before state is saved by the StateProvider. Allows editing the state object or preventing the operation.
54
+ * @param {object} event Event object
55
+ * @param {any} event.state State object config
56
+ */
57
+ this.onBeforeStateSave = new EventEmitter();
58
+ /**
59
+ * Fires when any other event is fired from the object.
60
+ * ...
61
+ * [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/MonthPicker#event-catchAll)
62
+ * @param {object} event Event object
63
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
64
+ * @param {string} event.event.type The type of the event which is caught by the listener
65
+ */
66
+ this.onCatchAll = new EventEmitter();
67
+ /**
68
+ * Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/grid/docs/api/Core/widget/Panel#config-collapsible) setting.
69
+ * @param {object} event Event object
70
+ * @param {Core.widget.Panel} event.source This Panel.
71
+ */
72
+ this.onCollapse = new EventEmitter();
73
+ /**
74
+ * Fires when an object is destroyed.
75
+ * @param {object} event Event object
76
+ * @param {Core.Base} event.source The Object that is being destroyed.
77
+ */
78
+ this.onDestroy = new EventEmitter();
79
+ /**
80
+ * Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/grid/docs/api/Core/widget/Container#property-hasChanges) property changes
81
+ * @param {object} event Event object
82
+ * @param {Core.widget.Container} event.source The container.
83
+ * @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
84
+ */
85
+ this.onDirtyStateChange = new EventEmitter();
86
+ /**
87
+ * Triggered when a widget's [element](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#property-element) is available.
88
+ * @param {object} event Event object
89
+ * @param {HTMLElement} event.element The Widget's element.
90
+ */
91
+ this.onElementCreated = new EventEmitter();
92
+ /**
93
+ * Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/grid/docs/api/Core/widget/Panel#config-collapsible) setting.
94
+ * @param {object} event Event object
95
+ * @param {Core.widget.Panel} event.source This Panel.
96
+ */
97
+ this.onExpand = new EventEmitter();
98
+ /**
99
+ * Fired when focus enters this Widget.
100
+ * @param {object} event Event object
101
+ * @param {Core.widget.Widget} event.source This Widget
102
+ * @param {HTMLElement} event.fromElement The element which lost focus.
103
+ * @param {HTMLElement} event.toElement The element which gained focus.
104
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
105
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
106
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
107
+ */
108
+ this.onFocusIn = new EventEmitter();
109
+ /**
110
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
111
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
112
+ * will not trigger this event. This is when focus exits this widget completely.
113
+ * @param {object} event Event object
114
+ * @param {Core.widget.Widget} event.source This Widget
115
+ * @param {HTMLElement} event.fromElement The element which lost focus.
116
+ * @param {HTMLElement} event.toElement The element which gained focus.
117
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
118
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
119
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
120
+ */
121
+ this.onFocusOut = new EventEmitter();
122
+ /**
123
+ * Triggered after a widget was hidden
124
+ * @param {object} event Event object
125
+ * @param {Core.widget.Widget} event.source The widget
126
+ */
127
+ this.onHide = new EventEmitter();
128
+ /**
129
+ * Triggered when a widget which had been in a non-visible state for any reason
130
+ * achieves visibility.
131
+ * ...
132
+ * [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/MonthPicker#event-paint)
133
+ * @param {object} event Event object
134
+ * @param {Core.widget.Widget} event.source The widget being painted.
135
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
136
+ */
137
+ this.onPaint = new EventEmitter();
138
+ /**
139
+ * Fired when a Widget's read only state is toggled
140
+ * @param {object} event Event object
141
+ * @param {boolean} event.readOnly Read only or not
142
+ */
143
+ this.onReadOnly = new EventEmitter();
144
+ /**
145
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
146
+ * to [recompose](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
147
+ */
148
+ this.onRecompose = new EventEmitter();
149
+ /**
150
+ * Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
151
+ * @param {object} event Event object
152
+ * @param {Core.widget.Widget} event.source This Widget
153
+ * @param {number} event.width The new width
154
+ * @param {number} event.height The new height
155
+ * @param {number} event.oldWidth The old width
156
+ * @param {number} event.oldHeight The old height
157
+ */
158
+ this.onResize = new EventEmitter();
159
+ /**
160
+ * Fired when a month is selected.
161
+ * @param {object} event Event object
162
+ * @param {number} event.value The previously selected month.
163
+ * @param {Core.widget.MonthPicker} event.source This MonthPicker
164
+ */
165
+ this.onSelect = new EventEmitter();
166
+ /**
167
+ * Triggered after a widget is shown.
168
+ * @param {object} event Event object
169
+ * @param {Core.widget.Widget} event.source The widget
170
+ */
171
+ this.onShow = new EventEmitter();
172
+ /**
173
+ * Fires when the month title of this Panel is clicked.
174
+ * @param {object} event Event object
175
+ * @param {Core.widget.Button} event.source The clicked button
176
+ * @param {Event} event.event DOM event
177
+ */
178
+ this.onTitleClick = new EventEmitter();
179
+ /**
180
+ * A header [tool](https://bryntum.com/products/grid/docs/api/Core/widget/Panel#config-tools) has been clicked.
181
+ * @param {object} event Event object
182
+ * @param {Core.widget.Tool} event.source This Panel.
183
+ * @param {Core.widget.Tool} event.tool The tool which is being clicked.
184
+ */
185
+ this.onToolClick = new EventEmitter();
186
+ this.elementRef = element;
187
+ }
188
+ /**
189
+ * Create and append the underlying widget
190
+ */
191
+ ngOnInit() {
192
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumMonthPickerComponent;
193
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
194
+ // @ts-ignore
195
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
196
+ if (['features', 'config'].includes(prop)) {
197
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
198
+ }
199
+ });
200
+ // @ts-ignore
201
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
202
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
203
+ // @ts-ignore
204
+ bryntumConfig.listeners[eventName(event)] = e => {
205
+ // @ts-ignore
206
+ me[event].emit(e);
207
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
208
+ // in Angular listeners
209
+ return e.returnValue;
210
+ };
211
+ });
212
+ // If component has no container specified in config then use adopt to Wrapper's element
213
+ const containerParam = [
214
+ 'adopt',
215
+ 'appendTo',
216
+ 'insertAfter',
217
+ 'insertBefore'
218
+ // @ts-ignore
219
+ ].find(prop => bryntumConfig[prop]);
220
+ if (!containerParam) {
221
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
222
+ // Button should always be <a> or <button> inside owner element
223
+ bryntumConfig.appendTo = elementRef.nativeElement;
224
+ }
225
+ else {
226
+ bryntumConfig.adopt = elementRef.nativeElement;
227
+ }
228
+ }
229
+ else {
230
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
231
+ }
232
+ // @ts-ignore
233
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
234
+ }
235
+ /**
236
+ * Watch for changes
237
+ * @param changes
238
+ */
239
+ ngOnChanges(changes) {
240
+ const { instance } = this, { instanceName } = BryntumMonthPickerComponent;
241
+ if (!instance) {
242
+ return;
243
+ }
244
+ // Iterate over all changes
245
+ Object.entries(changes).forEach(([prop, change]) => {
246
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumMonthPickerComponent;
247
+ if (bryntumProps.includes(prop)) {
248
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
249
+ if (bryntumConfigsOnly.includes(prop)) {
250
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
251
+ }
252
+ }
253
+ });
254
+ }
255
+ /**
256
+ * Destroy the component
257
+ */
258
+ ngOnDestroy() {
259
+ // @ts-ignore
260
+ if (this.instance && this.instance.destroy) {
261
+ this.instance.destroy();
262
+ }
263
+ }
264
+ }
265
+ BryntumMonthPickerComponent.instanceClass = MonthPicker;
266
+ BryntumMonthPickerComponent.instanceName = 'MonthPicker';
267
+ BryntumMonthPickerComponent.bryntumEvents = [
268
+ 'onBeforeDestroy',
269
+ 'onBeforeHide',
270
+ 'onBeforeSetRecord',
271
+ 'onBeforeShow',
272
+ 'onBeforeStateApply',
273
+ 'onBeforeStateSave',
274
+ 'onCatchAll',
275
+ 'onCollapse',
276
+ 'onDestroy',
277
+ 'onDirtyStateChange',
278
+ 'onElementCreated',
279
+ 'onExpand',
280
+ 'onFocusIn',
281
+ 'onFocusOut',
282
+ 'onHide',
283
+ 'onPaint',
284
+ 'onReadOnly',
285
+ 'onRecompose',
286
+ 'onResize',
287
+ 'onSelect',
288
+ 'onShow',
289
+ 'onTitleClick',
290
+ 'onToolClick'
291
+ ];
292
+ BryntumMonthPickerComponent.bryntumFeatureNames = [];
293
+ BryntumMonthPickerComponent.bryntumConfigs = BryntumMonthPickerComponent.bryntumFeatureNames.concat([
294
+ 'adopt',
295
+ 'align',
296
+ 'alignSelf',
297
+ 'anchor',
298
+ 'appendTo',
299
+ 'ariaDescription',
300
+ 'ariaLabel',
301
+ 'autoUpdateRecord',
302
+ 'bbar',
303
+ 'bodyCls',
304
+ 'bubbleEvents',
305
+ 'callOnFunctions',
306
+ 'catchEventHandlerExceptions',
307
+ 'centered',
308
+ 'cls',
309
+ 'collapsed',
310
+ 'collapsible',
311
+ 'color',
312
+ 'column',
313
+ 'config',
314
+ 'constrainTo',
315
+ 'content',
316
+ 'contentElementCls',
317
+ 'dataField',
318
+ 'dataset',
319
+ 'defaultBindProperty',
320
+ 'defaultFocus',
321
+ 'defaults',
322
+ 'detectCSSCompatibilityIssues',
323
+ 'disabled',
324
+ 'dock',
325
+ 'draggable',
326
+ 'drawer',
327
+ 'elementAttributes',
328
+ 'extraData',
329
+ 'flex',
330
+ 'floating',
331
+ 'footer',
332
+ 'header',
333
+ 'height',
334
+ 'hidden',
335
+ 'hideAnimation',
336
+ 'hideWhenEmpty',
337
+ 'html',
338
+ 'htmlCls',
339
+ 'icon',
340
+ 'id',
341
+ 'ignoreParentReadOnly',
342
+ 'inputFieldAlign',
343
+ 'insertBefore',
344
+ 'insertFirst',
345
+ 'itemCls',
346
+ 'items',
347
+ 'keyMap',
348
+ 'labelPosition',
349
+ 'layout',
350
+ 'layoutStyle',
351
+ 'lazyItems',
352
+ 'listeners',
353
+ 'localeClass',
354
+ 'localizable',
355
+ 'localizableProperties',
356
+ 'margin',
357
+ 'maskDefaults',
358
+ 'masked',
359
+ 'maxHeight',
360
+ 'maximizeOnMobile',
361
+ 'maxWidth',
362
+ 'minHeight',
363
+ 'minWidth',
364
+ 'monitorResize',
365
+ 'month',
366
+ 'namedItems',
367
+ 'owner',
368
+ 'positioned',
369
+ 'preventTooltipOnTouch',
370
+ 'readOnly',
371
+ 'record',
372
+ 'relayStoreEvents',
373
+ 'rendition',
374
+ 'ripple',
375
+ 'rootElement',
376
+ 'rtl',
377
+ 'scrollable',
378
+ 'scrollAction',
379
+ 'showAnimation',
380
+ 'showTooltipWhenDisabled',
381
+ 'span',
382
+ 'stateful',
383
+ 'statefulEvents',
384
+ 'stateId',
385
+ 'stateProvider',
386
+ 'strictRecordMapping',
387
+ 'strips',
388
+ 'tab',
389
+ 'tabBarItems',
390
+ 'tag',
391
+ 'tbar',
392
+ 'textAlign',
393
+ 'textContent',
394
+ 'title',
395
+ 'tools',
396
+ 'tooltip',
397
+ 'trapFocus',
398
+ 'type',
399
+ 'ui',
400
+ 'weight',
401
+ 'width',
402
+ 'x',
403
+ 'y'
404
+ ]);
405
+ BryntumMonthPickerComponent.bryntumConfigsOnly = [
406
+ 'adopt',
407
+ 'align',
408
+ 'anchor',
409
+ 'ariaDescription',
410
+ 'ariaLabel',
411
+ 'autoUpdateRecord',
412
+ 'bbar',
413
+ 'bodyCls',
414
+ 'bubbleEvents',
415
+ 'centered',
416
+ 'collapsible',
417
+ 'color',
418
+ 'config',
419
+ 'constrainTo',
420
+ 'contentElementCls',
421
+ 'dataField',
422
+ 'defaultBindProperty',
423
+ 'defaultFocus',
424
+ 'defaults',
425
+ 'detectCSSCompatibilityIssues',
426
+ 'dock',
427
+ 'draggable',
428
+ 'drawer',
429
+ 'elementAttributes',
430
+ 'floating',
431
+ 'footer',
432
+ 'header',
433
+ 'hideAnimation',
434
+ 'hideWhenEmpty',
435
+ 'htmlCls',
436
+ 'icon',
437
+ 'ignoreParentReadOnly',
438
+ 'itemCls',
439
+ 'lazyItems',
440
+ 'listeners',
441
+ 'localeClass',
442
+ 'localizable',
443
+ 'localizableProperties',
444
+ 'maskDefaults',
445
+ 'masked',
446
+ 'monitorResize',
447
+ 'namedItems',
448
+ 'owner',
449
+ 'positioned',
450
+ 'preventTooltipOnTouch',
451
+ 'relayStoreEvents',
452
+ 'ripple',
453
+ 'rootElement',
454
+ 'scrollAction',
455
+ 'showAnimation',
456
+ 'showTooltipWhenDisabled',
457
+ 'stateful',
458
+ 'statefulEvents',
459
+ 'stateId',
460
+ 'stateProvider',
461
+ 'strips',
462
+ 'tab',
463
+ 'tabBarItems',
464
+ 'tag',
465
+ 'tbar',
466
+ 'textAlign',
467
+ 'textContent',
468
+ 'trapFocus',
469
+ 'type',
470
+ 'ui',
471
+ 'weight'
472
+ ];
473
+ BryntumMonthPickerComponent.bryntumProps = BryntumMonthPickerComponent.bryntumFeatureNames.concat([
474
+ 'alignSelf',
475
+ 'anchorSize',
476
+ 'appendTo',
477
+ 'callOnFunctions',
478
+ 'catchEventHandlerExceptions',
479
+ 'cls',
480
+ 'collapsed',
481
+ 'column',
482
+ 'content',
483
+ 'dataset',
484
+ 'disabled',
485
+ 'extraData',
486
+ 'flex',
487
+ 'focusVisible',
488
+ 'hasChanges',
489
+ 'height',
490
+ 'hidden',
491
+ 'html',
492
+ 'id',
493
+ 'inputFieldAlign',
494
+ 'insertBefore',
495
+ 'insertFirst',
496
+ 'isSettingValues',
497
+ 'isValid',
498
+ 'items',
499
+ 'keyMap',
500
+ 'labelPosition',
501
+ 'layout',
502
+ 'layoutStyle',
503
+ 'margin',
504
+ 'maxHeight',
505
+ 'maximizeOnMobile',
506
+ 'maxWidth',
507
+ 'minHeight',
508
+ 'minWidth',
509
+ 'month',
510
+ 'parent',
511
+ 'readOnly',
512
+ 'record',
513
+ 'rendition',
514
+ 'rtl',
515
+ 'scrollable',
516
+ 'span',
517
+ 'state',
518
+ 'strictRecordMapping',
519
+ 'title',
520
+ 'tools',
521
+ 'tooltip',
522
+ 'values',
523
+ 'width',
524
+ 'x',
525
+ 'y'
526
+ ]);
527
+ BryntumMonthPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumMonthPickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
528
+ BryntumMonthPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumMonthPickerComponent, selector: "bryntum-month-picker", inputs: { adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoUpdateRecord: "autoUpdateRecord", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", centered: "centered", collapsible: "collapsible", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", drawer: "drawer", elementAttributes: "elementAttributes", floating: "floating", footer: "footer", header: "header", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", htmlCls: "htmlCls", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", namedItems: "namedItems", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", textContent: "textContent", trapFocus: "trapFocus", type: "type", ui: "ui", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", content: "content", dataset: "dataset", disabled: "disabled", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", html: "html", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", month: "month", readOnly: "readOnly", record: "record", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", span: "span", strictRecordMapping: "strictRecordMapping", title: "title", tools: "tools", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", hasChanges: "hasChanges", isSettingValues: "isSettingValues", isValid: "isValid", parent: "parent", state: "state", values: "values" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onCatchAll: "onCatchAll", onCollapse: "onCollapse", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onSelect: "onSelect", onShow: "onShow", onTitleClick: "onTitleClick", onToolClick: "onToolClick" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumMonthPickerComponent, decorators: [{
530
+ type: Component,
531
+ args: [{
532
+ selector: 'bryntum-month-picker',
533
+ template: ''
534
+ }]
535
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
536
+ type: Input
537
+ }], align: [{
538
+ type: Input
539
+ }], anchor: [{
540
+ type: Input
541
+ }], ariaDescription: [{
542
+ type: Input
543
+ }], ariaLabel: [{
544
+ type: Input
545
+ }], autoUpdateRecord: [{
546
+ type: Input
547
+ }], bbar: [{
548
+ type: Input
549
+ }], bodyCls: [{
550
+ type: Input
551
+ }], bubbleEvents: [{
552
+ type: Input
553
+ }], centered: [{
554
+ type: Input
555
+ }], collapsible: [{
556
+ type: Input
557
+ }], color: [{
558
+ type: Input
559
+ }], config: [{
560
+ type: Input
561
+ }], constrainTo: [{
562
+ type: Input
563
+ }], contentElementCls: [{
564
+ type: Input
565
+ }], dataField: [{
566
+ type: Input
567
+ }], defaultBindProperty: [{
568
+ type: Input
569
+ }], defaultFocus: [{
570
+ type: Input
571
+ }], defaults: [{
572
+ type: Input
573
+ }], detectCSSCompatibilityIssues: [{
574
+ type: Input
575
+ }], dock: [{
576
+ type: Input
577
+ }], draggable: [{
578
+ type: Input
579
+ }], drawer: [{
580
+ type: Input
581
+ }], elementAttributes: [{
582
+ type: Input
583
+ }], floating: [{
584
+ type: Input
585
+ }], footer: [{
586
+ type: Input
587
+ }], header: [{
588
+ type: Input
589
+ }], hideAnimation: [{
590
+ type: Input
591
+ }], hideWhenEmpty: [{
592
+ type: Input
593
+ }], htmlCls: [{
594
+ type: Input
595
+ }], icon: [{
596
+ type: Input
597
+ }], ignoreParentReadOnly: [{
598
+ type: Input
599
+ }], itemCls: [{
600
+ type: Input
601
+ }], lazyItems: [{
602
+ type: Input
603
+ }], listeners: [{
604
+ type: Input
605
+ }], localeClass: [{
606
+ type: Input
607
+ }], localizable: [{
608
+ type: Input
609
+ }], localizableProperties: [{
610
+ type: Input
611
+ }], maskDefaults: [{
612
+ type: Input
613
+ }], masked: [{
614
+ type: Input
615
+ }], monitorResize: [{
616
+ type: Input
617
+ }], namedItems: [{
618
+ type: Input
619
+ }], owner: [{
620
+ type: Input
621
+ }], positioned: [{
622
+ type: Input
623
+ }], preventTooltipOnTouch: [{
624
+ type: Input
625
+ }], relayStoreEvents: [{
626
+ type: Input
627
+ }], ripple: [{
628
+ type: Input
629
+ }], rootElement: [{
630
+ type: Input
631
+ }], scrollAction: [{
632
+ type: Input
633
+ }], showAnimation: [{
634
+ type: Input
635
+ }], showTooltipWhenDisabled: [{
636
+ type: Input
637
+ }], stateful: [{
638
+ type: Input
639
+ }], statefulEvents: [{
640
+ type: Input
641
+ }], stateId: [{
642
+ type: Input
643
+ }], stateProvider: [{
644
+ type: Input
645
+ }], strips: [{
646
+ type: Input
647
+ }], tab: [{
648
+ type: Input
649
+ }], tabBarItems: [{
650
+ type: Input
651
+ }], tag: [{
652
+ type: Input
653
+ }], tbar: [{
654
+ type: Input
655
+ }], textAlign: [{
656
+ type: Input
657
+ }], textContent: [{
658
+ type: Input
659
+ }], trapFocus: [{
660
+ type: Input
661
+ }], type: [{
662
+ type: Input
663
+ }], ui: [{
664
+ type: Input
665
+ }], weight: [{
666
+ type: Input
667
+ }], alignSelf: [{
668
+ type: Input
669
+ }], appendTo: [{
670
+ type: Input
671
+ }], callOnFunctions: [{
672
+ type: Input
673
+ }], catchEventHandlerExceptions: [{
674
+ type: Input
675
+ }], cls: [{
676
+ type: Input
677
+ }], collapsed: [{
678
+ type: Input
679
+ }], column: [{
680
+ type: Input
681
+ }], content: [{
682
+ type: Input
683
+ }], dataset: [{
684
+ type: Input
685
+ }], disabled: [{
686
+ type: Input
687
+ }], extraData: [{
688
+ type: Input
689
+ }], flex: [{
690
+ type: Input
691
+ }], height: [{
692
+ type: Input
693
+ }], hidden: [{
694
+ type: Input
695
+ }], html: [{
696
+ type: Input
697
+ }], id: [{
698
+ type: Input
699
+ }], inputFieldAlign: [{
700
+ type: Input
701
+ }], insertBefore: [{
702
+ type: Input
703
+ }], insertFirst: [{
704
+ type: Input
705
+ }], items: [{
706
+ type: Input
707
+ }], keyMap: [{
708
+ type: Input
709
+ }], labelPosition: [{
710
+ type: Input
711
+ }], layout: [{
712
+ type: Input
713
+ }], layoutStyle: [{
714
+ type: Input
715
+ }], margin: [{
716
+ type: Input
717
+ }], maxHeight: [{
718
+ type: Input
719
+ }], maximizeOnMobile: [{
720
+ type: Input
721
+ }], maxWidth: [{
722
+ type: Input
723
+ }], minHeight: [{
724
+ type: Input
725
+ }], minWidth: [{
726
+ type: Input
727
+ }], month: [{
728
+ type: Input
729
+ }], readOnly: [{
730
+ type: Input
731
+ }], record: [{
732
+ type: Input
733
+ }], rendition: [{
734
+ type: Input
735
+ }], rtl: [{
736
+ type: Input
737
+ }], scrollable: [{
738
+ type: Input
739
+ }], span: [{
740
+ type: Input
741
+ }], strictRecordMapping: [{
742
+ type: Input
743
+ }], title: [{
744
+ type: Input
745
+ }], tools: [{
746
+ type: Input
747
+ }], tooltip: [{
748
+ type: Input
749
+ }], width: [{
750
+ type: Input
751
+ }], x: [{
752
+ type: Input
753
+ }], y: [{
754
+ type: Input
755
+ }], anchorSize: [{
756
+ type: Input
757
+ }], focusVisible: [{
758
+ type: Input
759
+ }], hasChanges: [{
760
+ type: Input
761
+ }], isSettingValues: [{
762
+ type: Input
763
+ }], isValid: [{
764
+ type: Input
765
+ }], parent: [{
766
+ type: Input
767
+ }], state: [{
768
+ type: Input
769
+ }], values: [{
770
+ type: Input
771
+ }], onBeforeDestroy: [{
772
+ type: Output
773
+ }], onBeforeHide: [{
774
+ type: Output
775
+ }], onBeforeSetRecord: [{
776
+ type: Output
777
+ }], onBeforeShow: [{
778
+ type: Output
779
+ }], onBeforeStateApply: [{
780
+ type: Output
781
+ }], onBeforeStateSave: [{
782
+ type: Output
783
+ }], onCatchAll: [{
784
+ type: Output
785
+ }], onCollapse: [{
786
+ type: Output
787
+ }], onDestroy: [{
788
+ type: Output
789
+ }], onDirtyStateChange: [{
790
+ type: Output
791
+ }], onElementCreated: [{
792
+ type: Output
793
+ }], onExpand: [{
794
+ type: Output
795
+ }], onFocusIn: [{
796
+ type: Output
797
+ }], onFocusOut: [{
798
+ type: Output
799
+ }], onHide: [{
800
+ type: Output
801
+ }], onPaint: [{
802
+ type: Output
803
+ }], onReadOnly: [{
804
+ type: Output
805
+ }], onRecompose: [{
806
+ type: Output
807
+ }], onResize: [{
808
+ type: Output
809
+ }], onSelect: [{
810
+ type: Output
811
+ }], onShow: [{
812
+ type: Output
813
+ }], onTitleClick: [{
814
+ type: Output
815
+ }], onToolClick: [{
816
+ type: Output
817
+ }] } });
818
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1tb250aC1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1tb250aC1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBcUssV0FBVyxFQUE0UCxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBc3JCamQsTUFBTSxPQUFPLDJCQUEyQjtJQTZScEMsWUFBWSxPQUFtQjtRQVR2QixrQkFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBYyxTQUFTO1lBQzVCLFFBQVEsRUFBVyxTQUFTO1lBQzVCLElBQUksRUFBZSxTQUFTO1lBQzVCLGdCQUFnQixFQUFHLElBQUk7WUFDdkIsUUFBUSxFQUFXLEVBQUU7WUFDckIsU0FBUyxFQUFVLEVBQUU7U0FDeEIsQ0FBQztRQStJRixrQkFBa0I7UUFDbEI7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQXlFLENBQUM7UUFDeEg7Ozs7OztXQU1HO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQWtFLENBQUM7UUFDdEg7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQTZFLENBQUM7UUFDNUg7Ozs7V0FJRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUFxRSxDQUFDO1FBQzFIOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBcUUsQ0FBQztRQUN6SDs7Ozs7OztXQU9HO1FBQ08sZUFB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S0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFRSSxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFTRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU1HLFFBQVE7c0JBQWpCLE1BQU07Z0JBV0csU0FBUztzQkFBbEIsTUFBTTtnQkFhRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gTW9udGhQaWNrZXJcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBCdXR0b24sIENvbnRhaW5lciwgQ29udGFpbmVySXRlbUNvbmZpZywgQ29udGFpbmVyTGF5b3V0Q29uZmlnLCBEb21Db25maWcsIEtleU1hcENvbmZpZywgTGF5b3V0LCBNYXNrQ29uZmlnLCBNZW51SXRlbUNvbmZpZywgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIE1vbnRoUGlja2VyLCBNb250aFBpY2tlckxpc3RlbmVycywgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBTY3JvbGxlckNvbmZpZywgU3RhdGVQcm92aWRlciwgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2dyaWQnO1xuXG5leHBvcnQgdHlwZSBCcnludHVtTW9udGhQaWNrZXJQcm9wcyA9IHtcbiAgICAvLyBDb25maWdzXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYWRvcHQgYXMgdGhpcyBXaWRnZXQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoZSB3aWRnZXQnc1xuICAgICAqIGNvbnRlbnQgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBhbmQgYmVpbmcgc2hvd24gdGhyb3VnaCBbc2hvd0J5XSgjQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXNob3dCeSkuKlxuICAgICAqIGB0cnVlYCB0byBzaG93IGEgY29ubmVjdG9yIGFycm93IHBvaW50aW5nIHRvIHRoZSBhbGlnbiB0YXJnZXQuXG4gICAgICovXG4gICAgYW5jaG9yID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhc3NpZ25lZCBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1yZWNvcmQpIGF1dG9tYXRpY2FsbHkgb24gZmllbGQgY2hhbmdlc1xuICAgICAqL1xuICAgIGF1dG9VcGRhdGVSZWNvcmQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWJiYXIpXG4gICAgICovXG4gICAgYmJhciA/IDogKENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gY2VudHJlIHRoZSBXaWRnZXQgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBjZW50ZXJlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgcGFuZWwgaXMgY29sbGFwc2VkICh0aGUgYm9keSBvZiB0aGUgcGFuZWwgaXMgaGlkZGVuIHdoaWxlIG9ubHkgdGhlIGhlYWRlciBpc1xuICAgICAqIHZpc2libGUpLiBPbmx5IHZhbGlkIGlmIHRoZSBwYW5lbCBpcyBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpLlxuICAgICAqL1xuICAgIGNvbGxhcHNlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIGVuYWJsZXMgY29sbGFwc2liaWxpdHkgZm9yIHRoZSBwYW5lbC4gU2VlIFtjb2xsYXBzZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgb3IgW3Bvc2l0aW9uZWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXBvc2l0aW9uZWQpLipcbiAgICAgKiBFbGVtZW50LCBXaWRnZXQgb3IgUmVjdGFuZ2xlIHRvIHdoaWNoIHRoaXMgV2lkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICAgICAqL1xuICAgIGNvbnN0cmFpblRvID8gOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgY29udGVudCB0aGF0IGNvZXhpc3RzIHdpdGggc2libGluZyBlbGVtZW50cyB3aGljaCBtYXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZVxuICAgICAqIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkgYnkgcGx1Z2lucyBhbmQgZmVhdHVyZXMuXG4gICAgICogV2hlbiBzcGVjaWZ5aW5nIGh0bWwsIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB3aWxsIGFsc28gaGF2ZSB0aGUgW2h0bWxDbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWh0bWxDbHMpXG4gICAgICogY2xhc3MgYWRkZWQgdG8gaXRzIGNsYXNzTGlzdCwgdG8gYWxsb3cgdGFyZ2V0ZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBbcXVlcnldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjZnVuY3Rpb24tcXVlcnkpIHNlbGVjdG9yIGZ1bmN0aW9uIHdoaWNoIGNhbiBpZGVudGlmeSB0aGUgZGVzY2VuZGFudCB3aWRnZXQgdG8gd2hpY2hcbiAgICAgKiBmb2N1cyBzaG91bGQgYmUgZGlyZWN0ZWQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1kZWZhdWx0Rm9jdXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBXaWRnZXQgcGFzc2VkIHRvIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnV0aHkgdmFsdWUgaWYgd2lkZ2V0IGlzIHRoZSBkZWZhdWx0IG9uZVxuICAgICAqL1xuICAgIGRlZmF1bHRGb2N1cyA/IDogKCh3aWRnZXQ6IFdpZGdldCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzZXR0aW5ncyB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0cyA/IDogQ29udGFpbmVySXRlbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGJlIGFibGUgdG8gZHJhZyBhIHdpZGdldCBmcmVlbHkgb24gdGhlIHBhZ2UuIE9yIHNldCB0byBhbiBvYmplY3Qgd2l0aCBhIMK0aGFuZGxlU2VsZWN0b3LCtFxuICAgICAqIHByb3BlcnR5IHdoaWNoIGNvbnRyb2xzIHdoZW4gYSBkcmFnIHNob3VsZCBzdGFydC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICovXG4gICAgZHJhZ2dhYmxlID8gOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZSB0aGlzIFBhbmVsIGEgZG9ja2VkIGRyYXdlciB3aGljaCBzbGlkZXMgb3V0IGZyb20gb25lIHNpZGUgb2YgdGhlIGJyb3dzZXIgdmlld3BvcnQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1kcmF3ZXIpXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdsZWZ0JywnZW5kJywncmlnaHQnLCd0b3AnLCdib3R0b20nfSBzaWRlIFRoZSBzaWRlIG9mIHRoZSB2aWV3cG9ydCB0byBkb2NrIHRoZSBkcmF3ZXIgdG8uICAqIGAnc3RhcnQnYCBtZWFucyB0aGUgYGlubGluZS1zdGFydGAgc2lkZS4gKiBgJ2VuZCdgIG1lYW5zIHRoZSBgaW5saW5lLWVuZGAgc2lkZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXJ9IHNpemUgVGhlIHNpemUgb2YgdGhlIGRyYXdlciBpbiBpdHMgY29sbGFwc2libGUgYXhpcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlubGluZSBJZiB1c2luZyB0aGUgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgdG8gcGxhY2UgdGhlIGRyYXdlciBpbnNpZGUgYSBob3N0IHdpZGdldCwgdGhpcyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBkcmF3ZXIgaW5saW5lIHdpdGhpbiB0aGF0IGhvc3QuIE5vdGUgdGhhdCwgaWYgdXNpbmcgdGhpcywgdGhlIGxheW91dCBvZiB0aGUgaG9zdCBlbGVtZW50IG11c3QgaGF2ZSBgZmxleC1kaXJlY3Rpb25gIHNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixvYmplY3R9IGF1dG9DbG9zZSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLm1vdXNlZG93biBJZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyBhIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgY2xpY2tzIHdoaWNoIHNob3VsZCBjbG9zZSB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5mb2N1c291dCBJZiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0b0Nsb3NlLm1vdXNlb3V0IEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdXRvQ2xvc2VEZWxheSBXaGVuIHVzaW5nIGBtb3VzZW91dGAsIHRoaXMgaXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGRyYXdlciA/IDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoZSByb290IGVsZW1lbnQgb2YgdGhpcyB3aWRnZXQuXG4gICAgICogU2V0IGBudWxsYCB2YWx1ZSB0byBhdHRyaWJ1dGUgdG8gcmVtb3ZlIGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtb3ZlIHRoZSB3aWRnZXQgb3V0IG9mIHRoZSBkb2N1bWVudCBmbG93IGFuZCBwb3NpdGlvbiBpdFxuICAgICAqIGFic29sdXRlbHkgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBmbG9hdGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWZvb3RlcilcbiAgICAgKi9cbiAgICBmb290ZXIgPyA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCN0eXBlZGVmLVBhbmVsSGVhZGVyKSBmb3IgdGhlIHBhbmVsJ3MgaGVhZGVyIG9yIGEgc3RyaW5nIGluIHBsYWNlIG9mIGEgYHRpdGxlYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1oZWFkZXIpXG4gICAgICovXG4gICAgaGVhZGVyID8gOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIGhlaWdodCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUuaGVpZ2h0YC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCBoZWlnaHQgc3RyaW5nIG9yIGEgbnVtYmVyLFxuICAgICAqIHdoaWNoIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgaGVpZ2h0LCBidXQgaW4gc29tZVxuICAgICAqIGNhc2VzIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgaGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHdpdGggdHJ1ZSB0byBtYWtlIHdpZGdldCBpbml0aWFsbHkgaGlkZGVuLlxuICAgICAqL1xuICAgIGhpZGRlbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1oaWRlQW5pbWF0aW9uKVxuICAgICAqL1xuICAgIGhpZGVBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWFrZSB0aGlzIGNvbnRhaW5lciBoaWRlIHdoZW4gaXQgaGFzIG5vIHZpc2libGUgY2hpbGRyZW4gKEVpdGhlciBlbXB0eVxuICAgICAqIG9yIGFsbCBjaGlsZHJlbiBoaWRkZW4pLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWhpZGVXaGVuRW1wdHkpXG4gICAgICovXG4gICAgaGlkZVdoZW5FbXB0eSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBIVE1MIHRvIGRpc3BsYXkgaW5pdGlhbGx5IG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBtYXJrdXAgKGNhbGxlZCBhdCB3aWRnZXQgY29uc3RydWN0aW9uIHRpbWUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWh0bWwpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBUaGUgY2FsbGluZyBXaWRnZXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGh0bWwgPyA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzKGVzKSB0byBhZGQgd2hlbiBIVE1MIGNvbnRlbnQgaXMgYmVpbmcgYXBwbGllZCB0byB0aGlzIHdpZGdldC5cbiAgICAgKi9cbiAgICBodG1sQ2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gaWNvbiB0byBzaG93IGJlZm9yZSB0aGUgW3RpdGxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRpdGxlKS4gRWl0aGVyIHBhc3MgYSBDU1MgY2xhc3MgYXMgYSBzdHJpbmcsIG9yIHBhc3MgYVxuICAgICAqIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCBkZXNjcmliaW5nIGFuIGVsZW1lbnQgdG8gcmVwcmVzZW50IHRoZSBpY29uLlxuICAgICAqL1xuICAgIGljb24gPyA6IHN0cmluZ3xEb21Db25maWdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQgaWQsIGlmIG5vdCBzcGVjaWZpZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiBBbHNvIHVzZWQgZm9yIGxvb2t1cHMgdGhyb3VnaCBXaWRnZXQuZ2V0QnlJZFxuICAgICAqL1xuICAgIGlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3aWRnZXRzIHJlYWQtb25seSBzdGF0ZSBzaG91bGQgYmUgY29udHJvbGxlZCBieSBpdHMgcGFyZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgQ1NTIGNsYXNzIHRvIGFkZCB0byBjaGlsZCBpdGVtcyBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBpdGVtQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0eXBlZCBjaGlsZCB3aWRnZXQgY29uZmlnIG9iamVjdHMgb3IgV2lkZ2V0cy4gTWF5IGFsc28gYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctaXRlbXMpXG4gICAgICovXG4gICAgaXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW11cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIHNob3J0IG5hbWUgb2YgYSBoZWxwZXIgY2xhc3Mgd2hpY2ggbWFuYWdlcyByZW5kZXJpbmcgYW5kIHN0eWxpbmcgb2YgY2hpbGQgaXRlbXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctbGF5b3V0KVxuICAgICAqL1xuICAgIGxheW91dCA/IDogc3RyaW5nfENvbnRhaW5lckxheW91dENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBDU1Mgc3R5bGUgcHJvcGVydGllcyB0byBhcHBseSB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1sYXlvdXRTdHlsZSlcbiAgICAgKi9cbiAgICBsYXlvdXRTdHlsZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgW2NoaWxkIGl0ZW1dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKSAqY29uZmlnIG9iamVjdHMqIHdoaWNoIGlzIHRvIGJlIGNvbnZlcnRlZCBpbnRvXG4gICAgICogaW5zdGFuY2VzIG9ubHkgd2hlbiB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCwgcmF0aGVyIHRoYW4gZWFnZXJseSBhdCBjb25zdHJ1Y3QgdGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1sYXp5SXRlbXMpXG4gICAgICovXG4gICAgbGF6eUl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBDb250YWluZXJJdGVtQ29uZmlnPnxDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBNb250aFBpY2tlckxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrZWQpIGNvbmZpZy4gQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHRoZSBgbWFza2VkYCBjb25maWcgd2lsbCBvdmVycmlkZSB0aGVzZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGlzIGNvbmZpZ3VyZWQgYXMgYHRydWVgIGEgW1Jlc2l6ZU9ic2VydmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXIpXG4gICAgICogaXMgdXNlZCB0byBtb25pdG9yIHRoaXMgZWxlbWVudCBmb3Igc2l6ZSBjaGFuZ2VzIGNhdXNlZCBieSBlaXRoZXIgc3R5bGUgbWFuaXB1bGF0aW9uLCBvciBieSBDU1NcbiAgICAgKiBsYXlvdXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbW9udGggdG8gdXNlIGFzIHRoZSBzZWxlY3RlZCBtb250aCAoemVyby1iYXNlZCwgMC0xMSkuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgICAqL1xuICAgIG1vbnRoID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IGNvbmZpZyBvYmplY3RzIHdoaWNoIG1heSBiZSByZWZlcmVuY2VkIGJ5IG5hbWUgaW4gdGhlIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpXG4gICAgICogY29uZmlnLiBGb3IgZXhhbXBsZSwgYSBzcGVjaWFsaXplZCBbTWVudV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01lbnUpIHN1YmNsYXNzIG1heSBoYXZlIGEgYG5hbWVkSXRlbXNgIGRlZmF1bHRcbiAgICAgKiB2YWx1ZSBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+XG4gICAgLyoqXG4gICAgICogVGhlIG93bmluZyBXaWRnZXQgb2YgdGhpcyBXaWRnZXQuIElmIHRoaXMgV2lkZ2V0IGlzIGRpcmVjdGx5IGNvbnRhaW5lZCAodGhhdCBpcywgaXQgaXMgb25lIG9mIHRoZVxuICAgICAqIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1pdGVtcykgb2YgYSBDb250YWluZXIpLCB0aGlzIGNvbmZpZyB3aWxsIGJlIGlnbm9yZWQuIEluIHRoaXMgY2FzZVxuICAgICAqIHRoZSBvd25lciBpcyA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0aGUgZW5jYXBzdWxhdGluZyBDb250YWluZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctb3duZXIpXG4gICAgICovXG4gICAgb3duZXIgPyA6IFdpZGdldHxhbnlcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCksIGJ1dCBtdXN0XG4gICAgICogbm90IHBhcnRpY2lwYXRlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQgb2YgdGhhdCB3aWRnZXQsIGFuZCBtdXN0IGJlIHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGF0XG4gICAgICogd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1wb3NpdGlvbmVkKVxuICAgICAqL1xuICAgIHBvc2l0aW9uZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyB3aWRnZXQgaXMgcmVhZC1vbmx5LiAgVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSB3aWRnZXQgaXMgYW4gaW5wdXRcbiAgICAgKiBmaWVsZCwgPHN0cm9uZz5vciBjb250YWlucyBpbnB1dCBmaWVsZHMgYXQgYW55IGRlcHRoPC9zdHJvbmc+LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXJlYWRPbmx5KVxuICAgICAqL1xuICAgIHJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogW1JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9Nb2RlbCkgd2hvc2UgdmFsdWVzIHdpbGwgYmUgdXNlZCB0byBwb3B1bGF0ZSBmaWVsZHMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1yZWNvcmQpXG4gICAgICovXG4gICAgcmVjb3JkID8gOiBNb2RlbFxuICAgIHJlbGF5U3RvcmVFdmVudHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFaXRoZXIgYSBkZWZhdWx0IGByZW5kaXRpb25gIHRvIGFwcGx5IHRvIGFsbCBjaGlsZCB3aWRnZXRzLCBvciBhIG1hcCBvZiByZW5kaXRpb25zIGtleWVkIGJ5IGNoaWxkIHdpZGdldFxuICAgICAqIGB0eXBlYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGF0IHRvIGRvIGlmIGRvY3VtZW50IGlzIHNjcm9sbGVkIHdoaWxlIFdpZGdldCBpcyB2aXNpYmxlIChvbmx5IHJlbGV2YW50IHdoZW4gZmxvYXRpbmcgaXMgc2V0IHRvIGB0cnVlYCkuXG4gICAgICogVmFsaWQgdmFsdWVzOiDCtG51bGzCtDogZG8gbm90aGluZywgwrRoaWRlwrQ6IGhpZGUgdGhlIHdpZGdldCBvciDCtHJlYWxpZ27CtDogcmVhbGlnbiB0byB0aGUgdGFyZ2V0IGlmIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHNjcm9sbEFjdGlvbiA/IDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXNob3dBbmltYXRpb24pXG4gICAgICovXG4gICAgc2hvd0FuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyB0aGUgdG9vbHRpcCB3aGVuIHRoaXMgd2lkZ2V0IGlzIFtkaXNhYmxlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXN0YXRlZnVsKVxuICAgICAqL1xuICAgIHN0YXRlZnVsID8gOiBib29sZWFufG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudHMgdGhhdCwgd2hlbiBmaXJlZCBieSB0aGlzIGNvbXBvbmVudCwgc2hvdWxkIHRyaWdnZXIgaXQgdG8gc2F2ZSBpdHMgc3RhdGUgYnkgY2FsbGluZ1xuICAgICAqIFtzYXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2Z1bmN0aW9uLXNhdmVTdGF0ZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctc3RhdGVmdWxFdmVudHMpXG4gICAgICovXG4gICAgc3RhdGVmdWxFdmVudHMgPyA6IG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gdXNlIHdoZW4gc2F2aW5nIHRoaXMgb2JqZWN0J3Mgc3RhdGUgaW4gdGhlIFtzdGF0ZVByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI3Byb3BlcnR5LXN0YXRlKS4gQnkgZGVmYXVsdCwgYHN0YXRlYFxuICAgICAqIHdpbGwgYmUgc2F2ZWQgdXNpbmcgdGhlIFtkZWZhdWx0IHN0YXRlIHByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9zdGF0ZS9TdGF0ZVByb3ZpZGVyI3Byb3BlcnR5LWluc3RhbmNlLXN0YXRpYykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWctc3RhdGVQcm92aWRlcilcbiAgICAgKi9cbiAgICBzdGF0ZVByb3ZpZGVyID8gOiBTdGF0ZVByb3ZpZGVyXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWF0Y2ggZmllbGRzIGJ5IHRoZWlyIGBuYW1lYCBwcm9wZXJ0eSBvbmx5IHdoZW4gYXNzaWduaW5nIGEgW3JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctcmVjb3JkKSxcbiAgICAgKiB3aXRob3V0IGZhbGxpbmcgYmFjayB0byBgcmVmYC5cbiAgICAgKi9cbiAgICBzdHJpY3RSZWNvcmRNYXBwaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0cyBrZXllZCBieSBuYW1lLiBCeSBkZWZhdWx0ICh3aGVuIG5vIGB0eXBlYCBpcyBnaXZlbiksIHN0cmlwcyBhcmVcbiAgICAgKiBbdG9vbGJhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKS4gSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBhcnJheSwgeW91IGNhbiB1c2VcbiAgICAgKiB0aGUgdG9vbGJhcidzIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+XG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYlBhbmVsKS4gRm9yIGV4YW1wbGUsIHRoaXMgY29uZmlnIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGljb24gb2YgdGhlIGB0YWJgIGZvclxuICAgICAqIHRoaXMgd2lkZ2V0OlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGNvbnRhaW5lciBpcyB1c2VkIGFzIGEgdGFiIGluIGEgVGFiUGFuZWwsIHRoZXNlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgKiBbVGFiQmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuXG4gICAgICogVGhpcyBjcmVhdGVzIGEgdG9vbGJhciBkb2NrZWQgdG8gdGhlIHRvcCBvZiB0aGUgcGFuZWwgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGhlYWRlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50OiAnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcuIEFsc28gYWNjZXB0cyBkaXJlY3Rpb24gbmV1dHJhbCAnc3RhcnQnIGFuZCAnZW5kJy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgZm9yIGEgY29udGFpbmVyIHVzZWQgdG8gc2hvdyB0ZXh0IG1hcmt1cC4gSXQgd2lsbCBhcHBseSB0aGUgQ1NTIGNsYXNzIGBiLXRleHQtY29udGVudGBcbiAgICAgKiB3aGljaCBzcGVjaWZpZXMgYSBkZWZhdWx0IG1heC13aWR0aCB0aGF0IG1ha2VzIGxvbmcgdGV4dCBtb3JlIHJlYWRhYmxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXRleHRDb250ZW50KVxuICAgICAqL1xuICAgIHRleHRDb250ZW50ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgb3Igb3duaW5nIFRhYlBhbmVsLiBDYXVzZXMgY3JlYXRpb24gYW5kIGRvY2tpbmcgb2YgYSBoZWFkZXJcbiAgICAgKiB0byB0aGUgdG9wIGlmIG5vIGhlYWRlciBpcyBjb25maWd1cmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXRpdGxlKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbCkgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGB0aXRsZWAgaW4gdGhlIFBhbmVsIGhlYWRlci4gRWFjaFxuICAgICAqIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaCBhbiBpbnN0YW50aWF0ZWQgdG9vbCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmVcbiAgICAgKiBgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vVG9vbGFibGUjcHJvcGVydHktdG9vbHMpYCBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy10b29scylcbiAgICAgKi9cbiAgICB0b29scyA/IDogUmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz58bnVsbFxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgZm9yIHRoZSB3aWRnZXQsIGVpdGhlciBhcyBhIHN0cmluZyBvciBhcyBhIFRvb2x0aXAgY29uZmlnIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0YWJiaW5nIHdpdGhpbiBhIFBhbmVsIGlzIG5vdCBjb250YWluZWQsIGllIHlvdSBjYW4gVEFCIG91dCBvZiB0aGUgUGFuZWxcbiAgICAgKiBmb3J3YXJkcyBvciBiYWNrd2FyZHMuXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYHRydWVgIHRvIGRpc2FsbG93IHRhYmJpbmcgb3V0IG9mIHRoZSBQYW5lbCwgYW5kIG1ha2UgdGFiYmluZyBjaXJjdWxhciB3aXRoaW4gdGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICB0cmFwRm9jdXMgPyA6IGJvb2xlYW5cbiAgICB0eXBlID8gOiAnbW9udGhwaWNrZXInXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzcyBuYW1lIHN1ZmZpeGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50cyByZW5kZXJlZCBieSB0aGlzIHdpZGdldC4gVGhpcyBtYXkgYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBhbiBhcnJheSBvZiBzdHJpbmdzLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXMgd2l0aCB0cnV0aHlcbiAgICAgKiB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjY29uZmlnLXVpKVxuICAgICAqL1xuICAgIHVpID8gOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lcikuXG4gICAgICogSGlnaGVyIHdlaWdodHMgZ28gZnVydGhlciBkb3duLlxuICAgICAqL1xuICAgIHdlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3Mgd2lkdGgsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLndpZHRoYC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCB3aWR0aCBzdHJpbmcgb3IgYSBudW1iZXIsIHdoaWNoXG4gICAgICogd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCB3aWR0aCwgYnV0IGluIHNvbWUgY2FzZXNcbiAgICAgKiB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIHdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHggcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNjb25maWcteClcbiAgICAgKi9cbiAgICB4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01vbnRoUGlja2VyI2NvbmZpZy15KVxuICAgICAqL1xuICAgIHkgPyA6IG51bWJlclxuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tbW9udGgtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1Nb250aFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IE1vbnRoUGlja2VyO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnTW9udGhQaWNrZXInO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUV2ZW50czogc3RyaW5nW10gPSBbXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZVNhdmUnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNvbGxhcHNlJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uU2VsZWN0JyxcbiAgICAgICAgJ29uU2hvdycsXG4gICAgICAgICdvblRpdGxlQ2xpY2snLFxuICAgICAgICAnb25Ub29sQ2xpY2snXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1Nb250aFBpY2tlckNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b1VwZGF0ZVJlY29yZCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnQnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZWZhdWx0Rm9jdXMnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2h0bWxDbHMnLFxuICAgICAgICAnaWNvbicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ2xhenlJdGVtcycsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ25hbWVkSXRlbXMnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RleHRDb250ZW50JyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJhcEZvY3VzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzT25seTogc3RyaW5nW10gPSBbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvVXBkYXRlUmVjb3JkJyxcbiAgICAgICAgJ2JiYXInLFxuICAgICAgICAnYm9keUNscycsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY29sbGFwc2libGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdodG1sQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaXRlbUNscycsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZWRJdGVtcycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGV4dENvbnRlbnQnLFxuICAgICAgICAndHJhcEZvY3VzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bU1vbnRoUGlja2VyQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2ZvY3VzVmlzaWJsZScsXG4gICAgICAgICdoYXNDaGFuZ2VzJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2lzU2V0dGluZ1ZhbHVlcycsXG4gICAgICAgICdpc1ZhbGlkJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWNvcmQnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b29scycsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogTW9udGhQaWNrZXI7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWduICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFsaWduU3BlY3xzdHJpbmc7XG4gICAgQElucHV0KCkgYW5jaG9yICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dG9VcGRhdGVSZWNvcmQgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYmJhciAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRCaW5kUHJvcGVydHkgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0Rm9jdXMgICAgICAgICAgICAgICAgICEgOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdHMgICAgICAgICAgICAgICAgICAgICAhIDogQ29udGFpbmVySXRlbUNvbmZpZztcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmFnZ2FibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZm9vdGVyICAgICAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBkb2NrPzogJ3RvcCd8J3JpZ2h0J3wnYm90dG9tJ3wnbGVmdCd8J3N0YXJ0J3wnZW5kJ1xuICAgICAgICBodG1sPzogc3RyaW5nXG4gICAgICAgIGNscz86IHN0cmluZ1xuICAgIH18c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyO1xuICAgIEBJbnB1dCgpIGhpZGVBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGhpZGVXaGVuRW1wdHkgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHRtbENscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBpY29uICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXRlbUNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhenlJdGVtcyAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+fENvbnRhaW5lckl0ZW1Db25maWdbXXxXaWRnZXRbXTtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICEgOiBNb250aFBpY2tlckxpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2NhbGVDbGFzcyAgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgQmFzZTtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlUHJvcGVydGllcyAgICAgICAgISA6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIG1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgb3duZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogV2lkZ2V0fGFueTtcbiAgICBASW5wdXQoKSBwb3NpdGlvbmVkICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXZlbnRUb29sdGlwT25Ub3VjaCAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByaXBwbGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNob3dBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwV2hlbkRpc2FibGVkICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVmdWxFdmVudHMgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0ZVByb3ZpZGVyICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+O1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdGV4dEFsaWduICAgICAgICAgICAgICAgICAgICAhIDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSB0ZXh0Q29udGVudCAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRyYXBGb2N1cyAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ21vbnRocGlja2VyJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY29udGVudCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBodG1sICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWc7XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICEgOiAnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAhIDogKENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWd8V2lkZ2V0KVtdfFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWc+fFdpZGdldFtdfFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW107XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXQgICAgICAgICAgICAgICAgICAgICAgISA6IExheW91dHxzdHJpbmd8Q29udGFpbmVyTGF5b3V0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxheW91dFN0eWxlICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4aW1pemVPbk1vYmlsZSAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluV2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1vbnRoICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWNvcmQgICAgICAgICAgICAgICAgICAgICAgISA6IE1vZGVsO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbDtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHN0cmljdFJlY29yZE1hcHBpbmcgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b29scyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHggICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYW5jaG9yU2l6ZSAgICAgICEgOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBmb2N1c1Zpc2libGUgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGFzQ2hhbmdlcyAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzU2V0dGluZ1ZhbHVlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc1ZhbGlkICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgc3RhdGUgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgdmFsdWVzICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGlzIGNvbnRhaW5lciB3aWxsIGxvYWQgcmVjb3JkIHZhbHVlcyBpbnRvIGl0cyBjaGlsZCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBVSSBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIGFwcGxpZWQgdG8gdGhlIHNvdXJjZS4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7YW55fSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlU2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Nb250aFBpY2tlciNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgZmllbGQgaXMgbXV0YXRlZCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBbaGFzQ2hhbmdlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTW9udGhQaWNrZXIjZXZlbnQtcGFpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBwYWludGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZmlyc3RQYWludCBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFpbnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZmlyc3RQYWludDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgb2YgYSBXaWRnZXQgcmVzaXplcyAqb25seSB3aGVuIFttb25pdG9yUmVzaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG1vbnRoIGlzIHNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQudmFsdWUgVGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgbW9udGguXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Nb250aFBpY2tlcn0gZXZlbnQuc291cmNlIFRoaXMgTW9udGhQaWNrZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyB2YWx1ZTogbnVtYmVyLCBzb3VyY2U6IE1vbnRoUGlja2VyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgbW9udGggdGl0bGUgb2YgdGhpcyBQYW5lbCBpcyBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkJ1dHRvbn0gZXZlbnQuc291cmNlIFRoZSBjbGlja2VkIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpdGxlQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJ1dHRvbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBBIGhlYWRlciBbdG9vbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10b29scykgaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnRvb2wgVGhlIHRvb2wgd2hpY2ggaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub29sQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRvb2wsIHRvb2w6IFRvb2wgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1Nb250aFBpY2tlckNvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtTW9udGhQaWNrZXJDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bU1vbnRoUGlja2VyQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19