@angular/core 18.0.0-rc.0 → 18.0.0-rc.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 (57) hide show
  1. package/esm2022/primitives/event-dispatch/index.mjs +2 -2
  2. package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +234 -0
  3. package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +6 -8
  4. package/esm2022/primitives/event-dispatch/src/custom_events.mjs +40 -1
  5. package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +22 -15
  6. package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +14 -8
  7. package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -14
  8. package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +23 -344
  9. package/esm2022/primitives/event-dispatch/src/register_events.mjs +29 -10
  10. package/esm2022/src/application/application_ref.mjs +6 -3
  11. package/esm2022/src/application/create_application.mjs +3 -3
  12. package/esm2022/src/change_detection/scheduling/exhaustive_check_no_changes.mjs +150 -0
  13. package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +17 -3
  14. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +5 -5
  15. package/esm2022/src/core.mjs +2 -1
  16. package/esm2022/src/core_private_export.mjs +2 -1
  17. package/esm2022/src/defer/instructions.mjs +20 -12
  18. package/esm2022/src/defer/interfaces.mjs +1 -3
  19. package/esm2022/src/errors.mjs +1 -1
  20. package/esm2022/src/hydration/event_replay.mjs +23 -3
  21. package/esm2022/src/platform/platform_ref.mjs +8 -1
  22. package/esm2022/src/render3/after_render_hooks.mjs +4 -2
  23. package/esm2022/src/render3/component_ref.mjs +1 -1
  24. package/esm2022/src/render3/instructions/change_detection.mjs +13 -10
  25. package/esm2022/src/render3/instructions/listener.mjs +12 -1
  26. package/esm2022/src/render3/state.mjs +14 -4
  27. package/esm2022/src/render3/view_ref.mjs +3 -2
  28. package/esm2022/src/util/callback_scheduler.mjs +12 -26
  29. package/esm2022/src/version.mjs +1 -1
  30. package/esm2022/src/zone/ng_zone.mjs +9 -23
  31. package/esm2022/testing/src/component_fixture.mjs +1 -3
  32. package/esm2022/testing/src/defer.mjs +1 -2
  33. package/esm2022/testing/src/logger.mjs +3 -3
  34. package/esm2022/testing/src/test_bed_compiler.mjs +3 -4
  35. package/event-dispatch-contract.min.js +1 -1
  36. package/fesm2022/core.mjs +752 -574
  37. package/fesm2022/core.mjs.map +1 -1
  38. package/fesm2022/primitives/event-dispatch.mjs +315 -369
  39. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  40. package/fesm2022/primitives/signals.mjs +1 -1
  41. package/fesm2022/rxjs-interop.mjs +1 -1
  42. package/fesm2022/testing.mjs +3 -7
  43. package/fesm2022/testing.mjs.map +1 -1
  44. package/index.d.ts +34 -4
  45. package/package.json +1 -1
  46. package/primitives/event-dispatch/index.d.ts +41 -44
  47. package/primitives/signals/index.d.ts +1 -1
  48. package/rxjs-interop/index.d.ts +1 -1
  49. package/schematics/migrations/http-providers/bundle.js +66 -44
  50. package/schematics/migrations/http-providers/bundle.js.map +2 -2
  51. package/schematics/migrations/invalid-two-way-bindings/bundle.js +39 -9
  52. package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
  53. package/schematics/ng-generate/control-flow-migration/bundle.js +39 -9
  54. package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
  55. package/schematics/ng-generate/standalone-migration/bundle.js +48 -18
  56. package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
  57. package/testing/index.d.ts +1 -4
@@ -8,6 +8,6 @@
8
8
  export { Dispatcher, registerDispatcher } from './src/dispatcher';
9
9
  export { EventContractContainer } from './src/event_contract_container';
10
10
  export { EventContract } from './src/eventcontract';
11
- export { bootstrapEventContract } from './src/register_events';
11
+ export { bootstrapEventContract, bootstrapEarlyEventContract } from './src/register_events';
12
12
  export { EventInfoWrapper } from './src/event_info';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0Rpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9zcmMvZGlzcGF0Y2hlcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3RDb250YWluZXJ9IGZyb20gJy4vc3JjL2V2ZW50X2NvbnRyYWN0X2NvbnRhaW5lcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL2V2ZW50Y29udHJhY3QnO1xuZXhwb3J0IHtib290c3RyYXBFdmVudENvbnRyYWN0fSBmcm9tICcuL3NyYy9yZWdpc3Rlcl9ldmVudHMnO1xuZXhwb3J0IHtFdmVudEluZm9XcmFwcGVyfSBmcm9tICcuL3NyYy9ldmVudF9pbmZvJztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0Rpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9zcmMvZGlzcGF0Y2hlcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3RDb250YWluZXJ9IGZyb20gJy4vc3JjL2V2ZW50X2NvbnRyYWN0X2NvbnRhaW5lcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL2V2ZW50Y29udHJhY3QnO1xuZXhwb3J0IHtib290c3RyYXBFdmVudENvbnRyYWN0LCBib290c3RyYXBFYXJseUV2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL3JlZ2lzdGVyX2V2ZW50cyc7XG5cbmV4cG9ydCB0eXBlIHtFdmVudENvbnRyYWN0VHJhY2tlcn0gZnJvbSAnLi9zcmMvcmVnaXN0ZXJfZXZlbnRzJztcbmV4cG9ydCB7RXZlbnRJbmZvV3JhcHBlcn0gZnJvbSAnLi9zcmMvZXZlbnRfaW5mbyc7XG4iXX0=
@@ -0,0 +1,234 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Attribute } from './attribute';
9
+ import { Char } from './char';
10
+ import { EventType } from './event_type';
11
+ import { Property } from './property';
12
+ import * as cache from './cache';
13
+ import * as eventInfoLib from './event_info';
14
+ import * as eventLib from './event';
15
+ /**
16
+ * Since maps from event to action are immutable we can use a single map
17
+ * to represent the empty map.
18
+ */
19
+ const EMPTY_ACTION_MAP = {};
20
+ /**
21
+ * This regular expression matches a semicolon.
22
+ */
23
+ const REGEXP_SEMICOLON = /\s*;\s*/;
24
+ /** If no event type is defined, defaults to `click`. */
25
+ const DEFAULT_EVENT_TYPE = EventType.CLICK;
26
+ /** Resolves actions for Events. */
27
+ export class ActionResolver {
28
+ constructor({ customEventSupport = false, syntheticMouseEventSupport = false, } = {}) {
29
+ this.a11yClickSupport = false;
30
+ this.updateEventInfoForA11yClick = undefined;
31
+ this.preventDefaultForA11yClick = undefined;
32
+ this.populateClickOnlyAction = undefined;
33
+ this.customEventSupport = customEventSupport;
34
+ this.syntheticMouseEventSupport = syntheticMouseEventSupport;
35
+ }
36
+ resolve(eventInfo) {
37
+ if (this.customEventSupport) {
38
+ if (eventInfoLib.getEventType(eventInfo) === EventType.CUSTOM) {
39
+ const detail = eventInfoLib.getEvent(eventInfo).detail;
40
+ // For custom events, use a secondary dispatch based on the internal
41
+ // custom type of the event.
42
+ if (!detail || !detail['_type']) {
43
+ // This should never happen.
44
+ return;
45
+ }
46
+ eventInfoLib.setEventType(eventInfo, detail['_type']);
47
+ }
48
+ }
49
+ this.populateAction(eventInfo);
50
+ }
51
+ /**
52
+ * Searches for a jsaction that the DOM event maps to and creates an
53
+ * object containing event information used for dispatching by
54
+ * jsaction.Dispatcher. This method populates the `action` and `actionElement`
55
+ * fields of the EventInfo object passed in by finding the first
56
+ * jsaction attribute above the target Node of the event, and below
57
+ * the container Node, that specifies a jsaction for the event
58
+ * type. If no such jsaction is found, then action is undefined.
59
+ *
60
+ * @param eventInfo `EventInfo` to set `action` and `actionElement` if an
61
+ * action is found on any `Element` in the path of the `Event`.
62
+ */
63
+ populateAction(eventInfo) {
64
+ // We distinguish modified and plain clicks in order to support the
65
+ // default browser behavior of modified clicks on links; usually to
66
+ // open the URL of the link in new tab or new window on ctrl/cmd
67
+ // click. A DOM 'click' event is mapped to the jsaction 'click'
68
+ // event iff there is no modifier present on the event. If there is
69
+ // a modifier, it's mapped to 'clickmod' instead.
70
+ //
71
+ // It's allowed to omit the event in the jsaction attribute. In that
72
+ // case, 'click' is assumed. Thus the following two are equivalent:
73
+ //
74
+ // <a href="someurl" jsaction="gna.fu">
75
+ // <a href="someurl" jsaction="click:gna.fu">
76
+ //
77
+ // For unmodified clicks, EventContract invokes the jsaction
78
+ // 'gna.fu'. For modified clicks, EventContract won't find a
79
+ // suitable action and leave the event to be handled by the
80
+ // browser.
81
+ //
82
+ // In order to also invoke a jsaction handler for a modifier click,
83
+ // 'clickmod' needs to be used:
84
+ //
85
+ // <a href="someurl" jsaction="clickmod:gna.fu">
86
+ //
87
+ // EventContract invokes the jsaction 'gna.fu' for modified
88
+ // clicks. Unmodified clicks are left to the browser.
89
+ //
90
+ // In order to set up the event contract to handle both clickonly and
91
+ // clickmod, only addEvent(EventType.CLICK) is necessary.
92
+ //
93
+ // In order to set up the event contract to handle click,
94
+ // addEvent() is necessary for CLICK, KEYDOWN, and KEYPRESS event types. If
95
+ // a11y click support is enabled, addEvent() will set up the appropriate key
96
+ // event handler automatically.
97
+ if (eventInfoLib.getEventType(eventInfo) === EventType.CLICK &&
98
+ eventLib.isModifiedClickEvent(eventInfoLib.getEvent(eventInfo))) {
99
+ eventInfoLib.setEventType(eventInfo, EventType.CLICKMOD);
100
+ }
101
+ else if (this.a11yClickSupport) {
102
+ this.updateEventInfoForA11yClick(eventInfo);
103
+ }
104
+ // Walk to the parent node, unless the node has a different owner in
105
+ // which case we walk to the owner. Attempt to walk to host of a
106
+ // shadow root if needed.
107
+ let actionElement = eventInfoLib.getTargetElement(eventInfo);
108
+ while (actionElement && actionElement !== eventInfoLib.getContainer(eventInfo)) {
109
+ if (actionElement.nodeType === Node.ELEMENT_NODE) {
110
+ this.populateActionOnElement(actionElement, eventInfo);
111
+ }
112
+ if (eventInfoLib.getAction(eventInfo)) {
113
+ // An event is handled by at most one jsaction. Thus we stop at the
114
+ // first matching jsaction specified in a jsaction attribute up the
115
+ // ancestor chain of the event target node.
116
+ break;
117
+ }
118
+ if (actionElement[Property.OWNER]) {
119
+ actionElement = actionElement[Property.OWNER];
120
+ continue;
121
+ }
122
+ if (actionElement.parentNode?.nodeName !== '#document-fragment') {
123
+ actionElement = actionElement.parentNode;
124
+ }
125
+ else {
126
+ actionElement = actionElement.parentNode?.host ?? null;
127
+ }
128
+ }
129
+ const action = eventInfoLib.getAction(eventInfo);
130
+ if (!action) {
131
+ // No action found.
132
+ return;
133
+ }
134
+ if (this.a11yClickSupport) {
135
+ this.preventDefaultForA11yClick(eventInfo);
136
+ }
137
+ // We attempt to handle the mouseenter/mouseleave events here by
138
+ // detecting whether the mouseover/mouseout events correspond to
139
+ // entering/leaving an element.
140
+ if (this.syntheticMouseEventSupport) {
141
+ if (eventInfoLib.getEventType(eventInfo) === EventType.MOUSEENTER ||
142
+ eventInfoLib.getEventType(eventInfo) === EventType.MOUSELEAVE ||
143
+ eventInfoLib.getEventType(eventInfo) === EventType.POINTERENTER ||
144
+ eventInfoLib.getEventType(eventInfo) === EventType.POINTERLEAVE) {
145
+ // We attempt to handle the mouseenter/mouseleave events here by
146
+ // detecting whether the mouseover/mouseout events correspond to
147
+ // entering/leaving an element.
148
+ if (eventLib.isMouseSpecialEvent(eventInfoLib.getEvent(eventInfo), eventInfoLib.getEventType(eventInfo), eventInfoLib.getActionElement(action))) {
149
+ // If both mouseover/mouseout and mouseenter/mouseleave events are
150
+ // enabled, two separate handlers for mouseover/mouseout are
151
+ // registered. Both handlers will see the same event instance
152
+ // so we create a copy to avoid interfering with the dispatching of
153
+ // the mouseover/mouseout event.
154
+ const copiedEvent = eventLib.createMouseSpecialEvent(eventInfoLib.getEvent(eventInfo), eventInfoLib.getActionElement(action));
155
+ eventInfoLib.setEvent(eventInfo, copiedEvent);
156
+ // Since the mouseenter/mouseleave events do not bubble, the target
157
+ // of the event is technically the `actionElement` (the node with the
158
+ // `jsaction` attribute)
159
+ eventInfoLib.setTargetElement(eventInfo, eventInfoLib.getActionElement(action));
160
+ }
161
+ else {
162
+ eventInfoLib.unsetAction(eventInfo);
163
+ }
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Accesses the jsaction map on a node and retrieves the name of the
169
+ * action the given event is mapped to, if any. It parses the
170
+ * attribute value and stores it in a property on the node for
171
+ * subsequent retrieval without re-parsing and re-accessing the
172
+ * attribute.
173
+ *
174
+ * @param actionElement The DOM node to retrieve the jsaction map from.
175
+ * @param eventInfo `EventInfo` to set `action` and `actionElement` if an
176
+ * action is found on the `actionElement`.
177
+ */
178
+ populateActionOnElement(actionElement, eventInfo) {
179
+ const actionMap = this.parseActions(actionElement);
180
+ const actionName = actionMap[eventInfoLib.getEventType(eventInfo)];
181
+ if (actionName !== undefined) {
182
+ eventInfoLib.setAction(eventInfo, actionName, actionElement);
183
+ }
184
+ if (this.a11yClickSupport) {
185
+ this.populateClickOnlyAction(actionElement, eventInfo, actionMap);
186
+ }
187
+ }
188
+ /**
189
+ * Parses and caches an element's jsaction element into a map.
190
+ *
191
+ * This is primarily for internal use.
192
+ *
193
+ * @param actionElement The DOM node to retrieve the jsaction map from.
194
+ * @return Map from event to qualified name of the jsaction bound to it.
195
+ */
196
+ parseActions(actionElement) {
197
+ let actionMap = cache.get(actionElement);
198
+ if (!actionMap) {
199
+ const jsactionAttribute = actionElement.getAttribute(Attribute.JSACTION);
200
+ if (!jsactionAttribute) {
201
+ actionMap = EMPTY_ACTION_MAP;
202
+ cache.set(actionElement, actionMap);
203
+ }
204
+ else {
205
+ actionMap = cache.getParsed(jsactionAttribute);
206
+ if (!actionMap) {
207
+ actionMap = {};
208
+ const values = jsactionAttribute.split(REGEXP_SEMICOLON);
209
+ for (let idx = 0; idx < values.length; idx++) {
210
+ const value = values[idx];
211
+ if (!value) {
212
+ continue;
213
+ }
214
+ const colon = value.indexOf(Char.EVENT_ACTION_SEPARATOR);
215
+ const hasColon = colon !== -1;
216
+ const type = hasColon ? value.substr(0, colon).trim() : DEFAULT_EVENT_TYPE;
217
+ const action = hasColon ? value.substr(colon + 1).trim() : value;
218
+ actionMap[type] = action;
219
+ }
220
+ cache.setParsed(jsactionAttribute, actionMap);
221
+ }
222
+ cache.set(actionElement, actionMap);
223
+ }
224
+ }
225
+ return actionMap;
226
+ }
227
+ addA11yClickSupport(updateEventInfoForA11yClick, preventDefaultForA11yClick, populateClickOnlyAction) {
228
+ this.a11yClickSupport = true;
229
+ this.updateEventInfoForA11yClick = updateEventInfoForA11yClick;
230
+ this.preventDefaultForA11yClick = preventDefaultForA11yClick;
231
+ this.populateClickOnlyAction = populateClickOnlyAction;
232
+ }
233
+ }
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uX3Jlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hY3Rpb25fcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEtBQUssWUFBWSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUVwQzs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUE0QixFQUFFLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUVuQyx3REFBd0Q7QUFDeEQsTUFBTSxrQkFBa0IsR0FBVyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBRW5ELG1DQUFtQztBQUNuQyxNQUFNLE9BQU8sY0FBYztJQWV6QixZQUFZLEVBQ1Ysa0JBQWtCLEdBQUcsS0FBSyxFQUMxQiwwQkFBMEIsR0FBRyxLQUFLLE1BSWhDLEVBQUU7UUFwQkUscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBSWxDLGdDQUEyQixHQUFpRCxTQUFTLENBQUM7UUFFdEYsK0JBQTBCLEdBQWlELFNBQVMsQ0FBQztRQUVyRiw0QkFBdUIsR0FJbkIsU0FBUyxDQUFDO1FBU3BCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJB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UUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3dCQUNqRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUMzQixDQUFDO29CQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLDJCQUF5RSxFQUN6RSwwQkFBdUUsRUFDdkUsdUJBQWlFO1FBRWpFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO1FBQy9ELElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztRQUM3RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QXR0cmlidXRlfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQge0NoYXJ9IGZyb20gJy4vY2hhcic7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gJy4vcHJvcGVydHknO1xuaW1wb3J0ICogYXMgYTExeUNsaWNrIGZyb20gJy4vYTExeV9jbGljayc7XG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCAqIGFzIGV2ZW50SW5mb0xpYiBmcm9tICcuL2V2ZW50X2luZm8nO1xuaW1wb3J0ICogYXMgZXZlbnRMaWIgZnJvbSAnLi9ldmVudCc7XG5cbi8qKlxuICogU2luY2UgbWFwcyBmcm9tIGV2ZW50IHRvIGFjdGlvbiBhcmUgaW1tdXRhYmxlIHdlIGNhbiB1c2UgYSBzaW5nbGUgbWFwXG4gKiB0byByZXByZXNlbnQgdGhlIGVtcHR5IG1hcC5cbiAqL1xuY29uc3QgRU1QVFlfQUNUSU9OX01BUDoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuLyoqXG4gKiBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIGEgc2VtaWNvbG9uLlxuICovXG5jb25zdCBSRUdFWFBfU0VNSUNPTE9OID0gL1xccyo7XFxzKi87XG5cbi8qKiBJZiBubyBldmVudCB0eXBlIGlzIGRlZmluZWQsIGRlZmF1bHRzIHRvIGBjbGlja2AuICovXG5jb25zdCBERUZBVUxUX0VWRU5UX1RZUEU6IHN0cmluZyA9IEV2ZW50VHlwZS5DTElDSztcblxuLyoqIFJlc29sdmVzIGFjdGlvbnMgZm9yIEV2ZW50cy4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25SZXNvbHZlciB7XG4gIHByaXZhdGUgYTExeUNsaWNrU3VwcG9ydDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUV2ZW50U3VwcG9ydDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljaz86IChldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdEZvckExMXlDbGljaz86IChldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUNsaWNrT25seUFjdGlvbj86IChcbiAgICBhY3Rpb25FbGVtZW50OiBFbGVtZW50LFxuICAgIGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbyxcbiAgICBhY3Rpb25NYXA6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LFxuICApID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGN1c3RvbUV2ZW50U3VwcG9ydCA9IGZhbHNlLFxuICAgIHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0ID0gZmFsc2UsXG4gIH06IHtcbiAgICBjdXN0b21FdmVudFN1cHBvcnQ/OiBib29sZWFuO1xuICAgIHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0PzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5jdXN0b21FdmVudFN1cHBvcnQgPSBjdXN0b21FdmVudFN1cHBvcnQ7XG4gICAgdGhpcy5zeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydCA9IHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0O1xuICB9XG5cbiAgcmVzb2x2ZShldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pIHtcbiAgICBpZiAodGhpcy5jdXN0b21FdmVudFN1cHBvcnQpIHtcbiAgICAgIGlmIChldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5DVVNUT00pIHtcbiAgICAgICAgY29uc3QgZGV0YWlsID0gKGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWw7XG4gICAgICAgIC8vIEZvciBjdXN0b20gZXZlbnRzLCB1c2UgYSBzZWNvbmRhcnkgZGlzcGF0Y2ggYmFzZWQgb24gdGhlIGludGVybmFsXG4gICAgICAgIC8vIGN1c3RvbSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICAgICAgaWYgKCFkZXRhaWwgfHwgIWRldGFpbFsnX3R5cGUnXSkge1xuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRJbmZvTGliLnNldEV2ZW50VHlwZShldmVudEluZm8sIGRldGFpbFsnX3R5cGUnXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wb3B1bGF0ZUFjdGlvbihldmVudEluZm8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGZvciBhIGpzYWN0aW9uIHRoYXQgdGhlIERPTSBldmVudCBtYXBzIHRvIGFuZCBjcmVhdGVzIGFuXG4gICAqIG9iamVjdCBjb250YWluaW5nIGV2ZW50IGluZm9ybWF0aW9uIHVzZWQgZm9yIGRpc3BhdGNoaW5nIGJ5XG4gICAqIGpzYWN0aW9uLkRpc3BhdGNoZXIuIFRoaXMgbWV0aG9kIHBvcHVsYXRlcyB0aGUgYGFjdGlvbmAgYW5kIGBhY3Rpb25FbGVtZW50YFxuICAgKiBmaWVsZHMgb2YgdGhlIEV2ZW50SW5mbyBvYmplY3QgcGFzc2VkIGluIGJ5IGZpbmRpbmcgdGhlIGZpcnN0XG4gICAqIGpzYWN0aW9uIGF0dHJpYnV0ZSBhYm92ZSB0aGUgdGFyZ2V0IE5vZGUgb2YgdGhlIGV2ZW50LCBhbmQgYmVsb3dcbiAgICogdGhlIGNvbnRhaW5lciBOb2RlLCB0aGF0IHNwZWNpZmllcyBhIGpzYWN0aW9uIGZvciB0aGUgZXZlbnRcbiAgICogdHlwZS4gSWYgbm8gc3VjaCBqc2FjdGlvbiBpcyBmb3VuZCwgdGhlbiBhY3Rpb24gaXMgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRJbmZvIGBFdmVudEluZm9gIHRvIHNldCBgYWN0aW9uYCBhbmQgYGFjdGlvbkVsZW1lbnRgIGlmIGFuXG4gICAqICAgIGFjdGlvbiBpcyBmb3VuZCBvbiBhbnkgYEVsZW1lbnRgIGluIHRoZSBwYXRoIG9mIHRoZSBgRXZlbnRgLlxuICAgKi9cbiAgcHJpdmF0ZSBwb3B1bGF0ZUFjdGlvbihldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pIHtcbiAgICAvLyBXZSBkaXN0aW5ndWlzaCBtb2RpZmllZCBhbmQgcGxhaW4gY2xpY2tzIGluIG9yZGVyIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yIG9mIG1vZGlmaWVkIGNsaWNrcyBvbiBsaW5rczsgdXN1YWxseSB0b1xuICAgIC8vIG9wZW4gdGhlIFVSTCBvZiB0aGUgbGluayBpbiBuZXcgdGFiIG9yIG5ldyB3aW5kb3cgb24gY3RybC9jbWRcbiAgICAvLyBjbGljay4gQSBET00gJ2NsaWNrJyBldmVudCBpcyBtYXBwZWQgdG8gdGhlIGpzYWN0aW9uICdjbGljaydcbiAgICAvLyBldmVudCBpZmYgdGhlcmUgaXMgbm8gbW9kaWZpZXIgcHJlc2VudCBvbiB0aGUgZXZlbnQuIElmIHRoZXJlIGlzXG4gICAgLy8gYSBtb2RpZmllciwgaXQncyBtYXBwZWQgdG8gJ2NsaWNrbW9kJyBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gSXQncyBhbGxvd2VkIHRvIG9taXQgdGhlIGV2ZW50IGluIHRoZSBqc2FjdGlvbiBhdHRyaWJ1dGUuIEluIHRoYXRcbiAgICAvLyBjYXNlLCAnY2xpY2snIGlzIGFzc3VtZWQuIFRodXMgdGhlIGZvbGxvd2luZyB0d28gYXJlIGVxdWl2YWxlbnQ6XG4gICAgLy9cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJnbmEuZnVcIj5cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJjbGljazpnbmEuZnVcIj5cbiAgICAvL1xuICAgIC8vIEZvciB1bm1vZGlmaWVkIGNsaWNrcywgRXZlbnRDb250cmFjdCBpbnZva2VzIHRoZSBqc2FjdGlvblxuICAgIC8vICdnbmEuZnUnLiBGb3IgbW9kaWZpZWQgY2xpY2tzLCBFdmVudENvbnRyYWN0IHdvbid0IGZpbmQgYVxuICAgIC8vIHN1aXRhYmxlIGFjdGlvbiBhbmQgbGVhdmUgdGhlIGV2ZW50IHRvIGJlIGhhbmRsZWQgYnkgdGhlXG4gICAgLy8gYnJvd3Nlci5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIGFsc28gaW52b2tlIGEganNhY3Rpb24gaGFuZGxlciBmb3IgYSBtb2RpZmllciBjbGljayxcbiAgICAvLyAnY2xpY2ttb2QnIG5lZWRzIHRvIGJlIHVzZWQ6XG4gICAgLy9cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJjbGlja21vZDpnbmEuZnVcIj5cbiAgICAvL1xuICAgIC8vIEV2ZW50Q29udHJhY3QgaW52b2tlcyB0aGUganNhY3Rpb24gJ2duYS5mdScgZm9yIG1vZGlmaWVkXG4gICAgLy8gY2xpY2tzLiBVbm1vZGlmaWVkIGNsaWNrcyBhcmUgbGVmdCB0byB0aGUgYnJvd3Nlci5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIHNldCB1cCB0aGUgZXZlbnQgY29udHJhY3QgdG8gaGFuZGxlIGJvdGggY2xpY2tvbmx5IGFuZFxuICAgIC8vIGNsaWNrbW9kLCBvbmx5IGFkZEV2ZW50KEV2ZW50VHlwZS5DTElDSykgaXMgbmVjZXNzYXJ5LlxuICAgIC8vXG4gICAgLy8gSW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBldmVudCBjb250cmFjdCB0byBoYW5kbGUgY2xpY2ssXG4gICAgLy8gYWRkRXZlbnQoKSBpcyBuZWNlc3NhcnkgZm9yIENMSUNLLCBLRVlET1dOLCBhbmQgS0VZUFJFU1MgZXZlbnQgdHlwZXMuICBJZlxuICAgIC8vIGExMXkgY2xpY2sgc3VwcG9ydCBpcyBlbmFibGVkLCBhZGRFdmVudCgpIHdpbGwgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBrZXlcbiAgICAvLyBldmVudCBoYW5kbGVyIGF1dG9tYXRpY2FsbHkuXG4gICAgaWYgKFxuICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuQ0xJQ0sgJiZcbiAgICAgIGV2ZW50TGliLmlzTW9kaWZpZWRDbGlja0V2ZW50KGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pKVxuICAgICkge1xuICAgICAgZXZlbnRJbmZvTGliLnNldEV2ZW50VHlwZShldmVudEluZm8sIEV2ZW50VHlwZS5DTElDS01PRCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMudXBkYXRlRXZlbnRJbmZvRm9yQTExeUNsaWNrIShldmVudEluZm8pO1xuICAgIH1cblxuICAgIC8vIFdhbGsgdG8gdGhlIHBhcmVudCBub2RlLCB1bmxlc3MgdGhlIG5vZGUgaGFzIGEgZGlmZmVyZW50IG93bmVyIGluXG4gICAgLy8gd2hpY2ggY2FzZSB3ZSB3YWxrIHRvIHRoZSBvd25lci4gQXR0ZW1wdCB0byB3YWxrIHRvIGhvc3Qgb2YgYVxuICAgIC8vIHNoYWRvdyByb290IGlmIG5lZWRlZC5cbiAgICBsZXQgYWN0aW9uRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBldmVudEluZm9MaWIuZ2V0VGFyZ2V0RWxlbWVudChldmVudEluZm8pO1xuICAgIHdoaWxlIChhY3Rpb25FbGVtZW50ICYmIGFjdGlvbkVsZW1lbnQgIT09IGV2ZW50SW5mb0xpYi5nZXRDb250YWluZXIoZXZlbnRJbmZvKSkge1xuICAgICAgaWYgKGFjdGlvbkVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3Rpb25PbkVsZW1lbnQoYWN0aW9uRWxlbWVudCwgZXZlbnRJbmZvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50SW5mb0xpYi5nZXRBY3Rpb24oZXZlbnRJbmZvKSkge1xuICAgICAgICAvLyBBbiBldmVudCBpcyBoYW5kbGVkIGJ5IGF0IG1vc3Qgb25lIGpzYWN0aW9uLiBUaHVzIHdlIHN0b3AgYXQgdGhlXG4gICAgICAgIC8vIGZpcnN0IG1hdGNoaW5nIGpzYWN0aW9uIHNwZWNpZmllZCBpbiBhIGpzYWN0aW9uIGF0dHJpYnV0ZSB1cCB0aGVcbiAgICAgICAgLy8gYW5jZXN0b3IgY2hhaW4gb2YgdGhlIGV2ZW50IHRhcmdldCBub2RlLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25FbGVtZW50W1Byb3BlcnR5Lk9XTkVSXSkge1xuICAgICAgICBhY3Rpb25FbGVtZW50ID0gYWN0aW9uRWxlbWVudFtQcm9wZXJ0eS5PV05FUl0gYXMgRWxlbWVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uRWxlbWVudC5wYXJlbnROb2RlPy5ub2RlTmFtZSAhPT0gJyNkb2N1bWVudC1mcmFnbWVudCcpIHtcbiAgICAgICAgYWN0aW9uRWxlbWVudCA9IGFjdGlvbkVsZW1lbnQucGFyZW50Tm9kZSBhcyBFbGVtZW50IHwgbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbkVsZW1lbnQgPSAoYWN0aW9uRWxlbWVudC5wYXJlbnROb2RlIGFzIFNoYWRvd1Jvb3QgfCBudWxsKT8uaG9zdCA/PyBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50SW5mb0xpYi5nZXRBY3Rpb24oZXZlbnRJbmZvKTtcbiAgICBpZiAoIWFjdGlvbikge1xuICAgICAgLy8gTm8gYWN0aW9uIGZvdW5kLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2shKGV2ZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLy8gV2UgYXR0ZW1wdCB0byBoYW5kbGUgdGhlIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudHMgaGVyZSBieVxuICAgIC8vIGRldGVjdGluZyB3aGV0aGVyIHRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzIGNvcnJlc3BvbmQgdG9cbiAgICAvLyBlbnRlcmluZy9sZWF2aW5nIGFuIGVsZW1lbnQuXG4gICAgaWYgKHRoaXMuc3ludGhldGljTW91c2VFdmVudFN1cHBvcnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuTU9VU0VFTlRFUiB8fFxuICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5NT1VTRUxFQVZFIHx8XG4gICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSA9PT0gRXZlbnRUeXBlLlBPSU5URVJFTlRFUiB8fFxuICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5QT0lOVEVSTEVBVkVcbiAgICAgICkge1xuICAgICAgICAvLyBXZSBhdHRlbXB0IHRvIGhhbmRsZSB0aGUgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50cyBoZXJlIGJ5XG4gICAgICAgIC8vIGRldGVjdGluZyB3aGV0aGVyIHRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzIGNvcnJlc3BvbmQgdG9cbiAgICAgICAgLy8gZW50ZXJpbmcvbGVhdmluZyBhbiBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnRMaWIuaXNNb3VzZVNwZWNpYWxFdmVudChcbiAgICAgICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pLFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pLFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEFjdGlvbkVsZW1lbnQoYWN0aW9uKSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGJvdGggbW91c2VvdmVyL21vdXNlb3V0IGFuZCBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzIGFyZVxuICAgICAgICAgIC8vIGVuYWJsZWQsIHR3byBzZXBhcmF0ZSBoYW5kbGVycyBmb3IgbW91c2VvdmVyL21vdXNlb3V0IGFyZVxuICAgICAgICAgIC8vIHJlZ2lzdGVyZWQuIEJvdGggaGFuZGxlcnMgd2lsbCBzZWUgdGhlIHNhbWUgZXZlbnQgaW5zdGFuY2VcbiAgICAgICAgICAvLyBzbyB3ZSBjcmVhdGUgYSBjb3B5IHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggdGhlIGRpc3BhdGNoaW5nIG9mXG4gICAgICAgICAgLy8gdGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudC5cbiAgICAgICAgICBjb25zdCBjb3BpZWRFdmVudCA9IGV2ZW50TGliLmNyZWF0ZU1vdXNlU3BlY2lhbEV2ZW50KFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50KGV2ZW50SW5mbyksXG4gICAgICAgICAgICBldmVudEluZm9MaWIuZ2V0QWN0aW9uRWxlbWVudChhY3Rpb24pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZXZlbnRJbmZvTGliLnNldEV2ZW50KGV2ZW50SW5mbywgY29waWVkRXZlbnQpO1xuICAgICAgICAgIC8vIFNpbmNlIHRoZSBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzIGRvIG5vdCBidWJibGUsIHRoZSB0YXJnZXRcbiAgICAgICAgICAvLyBvZiB0aGUgZXZlbnQgaXMgdGVjaG5pY2FsbHkgdGhlIGBhY3Rpb25FbGVtZW50YCAodGhlIG5vZGUgd2l0aCB0aGVcbiAgICAgICAgICAvLyBganNhY3Rpb25gIGF0dHJpYnV0ZSlcbiAgICAgICAgICBldmVudEluZm9MaWIuc2V0VGFyZ2V0RWxlbWVudChldmVudEluZm8sIGV2ZW50SW5mb0xpYi5nZXRBY3Rpb25FbGVtZW50KGFjdGlvbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50SW5mb0xpYi51bnNldEFjdGlvbihldmVudEluZm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2Vzc2VzIHRoZSBqc2FjdGlvbiBtYXAgb24gYSBub2RlIGFuZCByZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlXG4gICAqIGFjdGlvbiB0aGUgZ2l2ZW4gZXZlbnQgaXMgbWFwcGVkIHRvLCBpZiBhbnkuIEl0IHBhcnNlcyB0aGVcbiAgICogYXR0cmlidXRlIHZhbHVlIGFuZCBzdG9yZXMgaXQgaW4gYSBwcm9wZXJ0eSBvbiB0aGUgbm9kZSBmb3JcbiAgICogc3Vic2VxdWVudCByZXRyaWV2YWwgd2l0aG91dCByZS1wYXJzaW5nIGFuZCByZS1hY2Nlc3NpbmcgdGhlXG4gICAqIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkVsZW1lbnQgVGhlIERPTSBub2RlIHRvIHJldHJpZXZlIHRoZSBqc2FjdGlvbiBtYXAgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SW5mbyBgRXZlbnRJbmZvYCB0byBzZXQgYGFjdGlvbmAgYW5kIGBhY3Rpb25FbGVtZW50YCBpZiBhblxuICAgKiAgICBhY3Rpb24gaXMgZm91bmQgb24gdGhlIGBhY3Rpb25FbGVtZW50YC5cbiAgICovXG4gIHByaXZhdGUgcG9wdWxhdGVBY3Rpb25PbkVsZW1lbnQoYWN0aW9uRWxlbWVudDogRWxlbWVudCwgZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gICAgY29uc3QgYWN0aW9uTWFwID0gdGhpcy5wYXJzZUFjdGlvbnMoYWN0aW9uRWxlbWVudCk7XG5cbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uTWFwW2V2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKV07XG4gICAgaWYgKGFjdGlvbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXZlbnRJbmZvTGliLnNldEFjdGlvbihldmVudEluZm8sIGFjdGlvbk5hbWUsIGFjdGlvbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVDbGlja09ubHlBY3Rpb24hKGFjdGlvbkVsZW1lbnQsIGV2ZW50SW5mbywgYWN0aW9uTWFwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgYW4gZWxlbWVudCdzIGpzYWN0aW9uIGVsZW1lbnQgaW50byBhIG1hcC5cbiAgICpcbiAgICogVGhpcyBpcyBwcmltYXJpbHkgZm9yIGludGVybmFsIHVzZS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkVsZW1lbnQgVGhlIERPTSBub2RlIHRvIHJldHJpZXZlIHRoZSBqc2FjdGlvbiBtYXAgZnJvbS5cbiAgICogQHJldHVybiBNYXAgZnJvbSBldmVudCB0byBxdWFsaWZpZWQgbmFtZSBvZiB0aGUganNhY3Rpb24gYm91bmQgdG8gaXQuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlQWN0aW9ucyhhY3Rpb25FbGVtZW50OiBFbGVtZW50KToge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIGxldCBhY3Rpb25NYXA6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkID0gY2FjaGUuZ2V0KGFjdGlvbkVsZW1lbnQpO1xuICAgIGlmICghYWN0aW9uTWFwKSB7XG4gICAgICBjb25zdCBqc2FjdGlvbkF0dHJpYnV0ZSA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKEF0dHJpYnV0ZS5KU0FDVElPTik7XG4gICAgICBpZiAoIWpzYWN0aW9uQXR0cmlidXRlKSB7XG4gICAgICAgIGFjdGlvbk1hcCA9IEVNUFRZX0FDVElPTl9NQVA7XG4gICAgICAgIGNhY2hlLnNldChhY3Rpb25FbGVtZW50LCBhY3Rpb25NYXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uTWFwID0gY2FjaGUuZ2V0UGFyc2VkKGpzYWN0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgaWYgKCFhY3Rpb25NYXApIHtcbiAgICAgICAgICBhY3Rpb25NYXAgPSB7fTtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBqc2FjdGlvbkF0dHJpYnV0ZS5zcGxpdChSRUdFWFBfU0VNSUNPTE9OKTtcbiAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB2YWx1ZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaWR4XTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xvbiA9IHZhbHVlLmluZGV4T2YoQ2hhci5FVkVOVF9BQ1RJT05fU0VQQVJBVE9SKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NvbG9uID0gY29sb24gIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGhhc0NvbG9uID8gdmFsdWUuc3Vic3RyKDAsIGNvbG9uKS50cmltKCkgOiBERUZBVUxUX0VWRU5UX1RZUEU7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBoYXNDb2xvbiA/IHZhbHVlLnN1YnN0cihjb2xvbiArIDEpLnRyaW0oKSA6IHZhbHVlO1xuICAgICAgICAgICAgYWN0aW9uTWFwW3R5cGVdID0gYWN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWNoZS5zZXRQYXJzZWQoanNhY3Rpb25BdHRyaWJ1dGUsIGFjdGlvbk1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUuc2V0KGFjdGlvbkVsZW1lbnQsIGFjdGlvbk1hcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25NYXA7XG4gIH1cblxuICBhZGRBMTF5Q2xpY2tTdXBwb3J0KFxuICAgIHVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljazogdHlwZW9mIGExMXlDbGljay51cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2ssXG4gICAgcHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2s6IHR5cGVvZiBhMTF5Q2xpY2sucHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2ssXG4gICAgcG9wdWxhdGVDbGlja09ubHlBY3Rpb246IHR5cGVvZiBhMTF5Q2xpY2sucG9wdWxhdGVDbGlja09ubHlBY3Rpb24sXG4gICkge1xuICAgIHRoaXMuYTExeUNsaWNrU3VwcG9ydCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2sgPSB1cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2s7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEZvckExMXlDbGljayA9IHByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrO1xuICAgIHRoaXMucG9wdWxhdGVDbGlja09ubHlBY3Rpb24gPSBwb3B1bGF0ZUNsaWNrT25seUFjdGlvbjtcbiAgfVxufVxuIl19
@@ -47,20 +47,18 @@ export class BaseDispatcher {
47
47
  *
48
48
  * @param eventInfo The info for the event that triggered this call or the
49
49
  * queue of events from EventContract.
50
- * @param isGlobalDispatch If true, dispatches a global event instead of a
51
- * regular jsaction handler.
52
50
  */
53
- dispatch(eventInfo, isGlobalDispatch) {
51
+ dispatch(eventInfo) {
54
52
  const eventInfoWrapper = new EventInfoWrapper(eventInfo);
55
53
  if (eventInfoWrapper.getIsReplay()) {
56
- if (isGlobalDispatch || !this.eventReplayer) {
54
+ if (!this.eventReplayer) {
57
55
  return;
58
56
  }
59
57
  this.queueEventInfoWrapper(eventInfoWrapper);
60
58
  this.scheduleEventReplay();
61
59
  return;
62
60
  }
63
- this.dispatchDelegate(eventInfoWrapper, isGlobalDispatch);
61
+ this.dispatchDelegate(eventInfoWrapper);
64
62
  }
65
63
  /** Queue an `EventInfoWrapper` for replay. */
66
64
  queueEventInfoWrapper(eventInfoWrapper) {
@@ -89,8 +87,8 @@ export class BaseDispatcher {
89
87
  * Dispatcher.
90
88
  */
91
89
  export function registerDispatcher(eventContract, dispatcher) {
92
- eventContract.ecrd((eventInfo, globalDispatch) => {
93
- dispatcher.dispatch(eventInfo, globalDispatch);
90
+ eventContract.ecrd((eventInfo) => {
91
+ dispatcher.dispatch(eventInfo);
94
92
  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);
95
93
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9kaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9iYXNlX2Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFZLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXpELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFVMUM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBUXpCOzs7Ozs7T0FNRztJQUNILFlBQ21CLGdCQUdSLEVBQ1QsRUFBQyxhQUFhLEdBQUcsU0FBUyxLQUFnQyxFQUFFO1FBSjNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FHeEI7UUFsQlgsMkJBQTJCO1FBQ1YsNEJBQXVCLEdBQXVCLEVBQUUsQ0FBQztRQUdsRSw2Q0FBNkM7UUFDckMseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBZ0JuQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILFFBQVEsQ0FBQyxTQUFvQixFQUFFLGdCQUEwQjtRQUN2RCxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzVDLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLHFCQUFxQixDQUFDLGdCQUFrQztRQUN0RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUI7UUFDakIsSUFDRSxJQUFJLENBQUMsb0JBQW9CO1lBQ3pCLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDbkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ3pDLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxhQUFxQyxFQUNyQyxVQUEwQjtJQUUxQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBb0IsRUFBRSxjQUF3QixFQUFFLEVBQUU7UUFDcEUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQyxFQUFFLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtFdmVudEluZm8sIEV2ZW50SW5mb1dyYXBwZXJ9IGZyb20gJy4vZXZlbnRfaW5mbyc7XG5pbXBvcnQge1VucmVuYW1lZEV2ZW50Q29udHJhY3R9IGZyb20gJy4vZXZlbnRjb250cmFjdCc7XG5pbXBvcnQge1Jlc3RyaWN0aW9ufSBmcm9tICcuL3Jlc3RyaWN0aW9uJztcbi8qKlxuICogQSByZXBsYXllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIHF1ZXVlZCBldmVudHMsXG4gKiBlaXRoZXIgZnJvbSB0aGUgYEV2ZW50Q29udHJhY3RgIG9yIHdoZW4gdGhlcmUgYXJlIG5vIGRldGVjdGVkIGhhbmRsZXJzLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYXllciA9IChldmVudEluZm9XcmFwcGVyczogRXZlbnRJbmZvV3JhcHBlcltdKSA9PiB2b2lkO1xuLyoqXG4gKiBBIGhhbmRsZXIgaXMgZGlzcGF0Y2hlZCB0byBkdXJpbmcgbm9ybWFsIGhhbmRsaW5nLlxuICovXG5leHBvcnQgdHlwZSBFdmVudEluZm9XcmFwcGVySGFuZGxlciA9IChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSA9PiB2b2lkO1xuLyoqXG4gKiBSZWNlaXZlcyBhIERPTSBldmVudCwgZGV0ZXJtaW5lcyB0aGUganNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2VcbiAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICoganNhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlRGlzcGF0Y2hlciB7XG4gIC8qKiBUaGUgcXVldWUgb2YgZXZlbnRzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXVlZEV2ZW50SW5mb1dyYXBwZXJzOiBFdmVudEluZm9XcmFwcGVyW10gPSBbXTtcbiAgLyoqIFRoZSByZXBsYXllciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgcXVldWVkIGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBldmVudFJlcGxheWVyPzogUmVwbGF5ZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBldmVudCByZXBsYXkgaXMgc2NoZWR1bGVkLiAqL1xuICBwcml2YXRlIGV2ZW50UmVwbGF5U2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYXJlOlxuICAgKiAgIDEuIGBldmVudFJlcGxheWVyYDogV2hlbiB0aGUgZXZlbnQgY29udHJhY3QgZGlzcGF0Y2hlcyByZXBsYXkgZXZlbnRzXG4gICAqICAgICAgdG8gdGhlIERpc3BhdGNoZXIsIHRoZSBEaXNwYXRjaGVyIGNvbGxlY3RzIHRoZW0gYW5kIGluIHRoZSBuZXh0IHRpY2tcbiAgICogICAgICBkaXNwYXRjaGVzIHRoZW0gdG8gdGhlIGBldmVudFJlcGxheWVyYC5cbiAgICogQHBhcmFtIGRpc3BhdGNoRGVsZWdhdGUgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBoYW5kbGUgZGlzcGF0Y2hpbmcgYW4gYEV2ZW50SW5mb1dyYXBwZXJgIHRvIGhhbmRsZXJzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwYXRjaERlbGVnYXRlOiAoXG4gICAgICBldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLFxuICAgICAgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4sXG4gICAgKSA9PiB2b2lkLFxuICAgIHtldmVudFJlcGxheWVyID0gdW5kZWZpbmVkfToge2V2ZW50UmVwbGF5ZXI/OiBSZXBsYXllcn0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFJlcGxheWVyID0gZXZlbnRSZXBsYXllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBldmVudCBvciB0aGUgZXZlbnQgcXVldWUgZnJvbSB0aGUgRXZlbnRDb250cmFjdC4gVGhlIGV2ZW50XG4gICAqIHF1ZXVlIGlzIGNvcGllZCBhbmQgaXQgYXR0ZW1wdHMgdG8gcmVwbGF5LlxuICAgKiBJZiBldmVudCBpbmZvIGlzIHBhc3NlZCBpbiBpdCBsb29rcyBmb3IgYW4gYWN0aW9uIGhhbmRsZXIgdGhhdCBjYW4gaGFuZGxlXG4gICAqIHRoZSBnaXZlbiBldmVudC4gIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBxdWV1ZXMgdGhlIGV2ZW50IGFuZFxuICAgKiBjaGVja3MgaWYgYSBsb2FkZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4gSWYgc28sIGNhbGxzIGl0LlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCBpZiBpbiBnbG9iYWwgZGlzcGF0Y2ggbW9kZSwgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgZ2xvYmFsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogVGhlIHRocmVlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGNhbGwgYXJlIGRlbGliZXJhdGVseSBub3Qgc3BsaXQgaW50b1xuICAgKiB0aHJlZSBtZXRob2RzIChhbmQgdGhlbiBkZWNsYXJlZCBhcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UpLCBiZWNhdXNlIHRoZVxuICAgKiBpbnRlcmZhY2UgaXMgdXNlZCBieSBFdmVudENvbnRyYWN0LCB3aGljaCBsaXZlcyBpbiBhIGRpZmZlcmVudCBqc2JpbmFyeS5cbiAgICogVGhlcmVmb3JlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgdGhyZWUgaXMgZGVmaW5lZCBlbnRpcmVseSBpbiB0ZXJtcyB0aGF0XG4gICAqIGFyZSBpbnZhcmlhbnQgdW5kZXIganNjb21waWxlciBwcm9jZXNzaW5nIChGdW5jdGlvbiBhbmQgQXJyYXksIGFzIG9wcG9zZWRcbiAgICogdG8gYSBjdXN0b20gdHlwZSB3aXRoIG1ldGhvZCBuYW1lcykuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZm8gVGhlIGluZm8gZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwgb3IgdGhlXG4gICAqICAgICBxdWV1ZSBvZiBldmVudHMgZnJvbSBFdmVudENvbnRyYWN0LlxuICAgKiBAcGFyYW0gaXNHbG9iYWxEaXNwYXRjaCBJZiB0cnVlLCBkaXNwYXRjaGVzIGEgZ2xvYmFsIGV2ZW50IGluc3RlYWQgb2YgYVxuICAgKiAgICAgcmVndWxhciBqc2FjdGlvbiBoYW5kbGVyLlxuICAgKi9cbiAgZGlzcGF0Y2goZXZlbnRJbmZvOiBFdmVudEluZm8sIGlzR2xvYmFsRGlzcGF0Y2g/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRJbmZvV3JhcHBlciA9IG5ldyBFdmVudEluZm9XcmFwcGVyKGV2ZW50SW5mbyk7XG4gICAgaWYgKGV2ZW50SW5mb1dyYXBwZXIuZ2V0SXNSZXBsYXkoKSkge1xuICAgICAgaWYgKGlzR2xvYmFsRGlzcGF0Y2ggfHwgIXRoaXMuZXZlbnRSZXBsYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnF1ZXVlRXZlbnRJbmZvV3JhcHBlcihldmVudEluZm9XcmFwcGVyKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVFdmVudFJlcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRGVsZWdhdGUoZXZlbnRJbmZvV3JhcHBlciwgaXNHbG9iYWxEaXNwYXRjaCk7XG4gIH1cblxuICAvKiogUXVldWUgYW4gYEV2ZW50SW5mb1dyYXBwZXJgIGZvciByZXBsYXkuICovXG4gIHF1ZXVlRXZlbnRJbmZvV3JhcHBlcihldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSB7XG4gICAgdGhpcy5xdWV1ZWRFdmVudEluZm9XcmFwcGVycy5wdXNoKGV2ZW50SW5mb1dyYXBwZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxheXMgcXVldWVkIGV2ZW50cywgaWYgYW55LiBUaGUgcmVwbGF5aW5nIHdpbGwgaGFwcGVuIGluIGl0cyBvd25cbiAgICogc3RhY2sgb25jZSB0aGUgY3VycmVudCBmbG93IGNlZGVzIGNvbnRyb2wuIFRoaXMgaXMgZG9uZSB0byBtaW1pY1xuICAgKiBicm93c2VyIGV2ZW50IGhhbmRsaW5nLlxuICAgKi9cbiAgc2NoZWR1bGVFdmVudFJlcGxheSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkIHx8XG4gICAgICAhdGhpcy5ldmVudFJlcGxheWVyIHx8XG4gICAgICB0aGlzLnF1ZXVlZEV2ZW50SW5mb1dyYXBwZXJzLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXlTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXllciEodGhpcy5xdWV1ZWRFdmVudEluZm9XcmFwcGVycyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgZGVmZXJyZWQgZnVuY3Rpb25hbGl0eSBmb3IgYW4gRXZlbnRDb250cmFjdCBhbmQgYSBKc2FjdGlvblxuICogRGlzcGF0Y2hlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcGF0Y2hlcihcbiAgZXZlbnRDb250cmFjdDogVW5yZW5hbWVkRXZlbnRDb250cmFjdCxcbiAgZGlzcGF0Y2hlcjogQmFzZURpc3BhdGNoZXIsXG4pIHtcbiAgZXZlbnRDb250cmFjdC5lY3JkKChldmVudEluZm86IEV2ZW50SW5mbywgZ2xvYmFsRGlzcGF0Y2g/OiBib29sZWFuKSA9PiB7XG4gICAgZGlzcGF0Y2hlci5kaXNwYXRjaChldmVudEluZm8sIGdsb2JhbERpc3BhdGNoKTtcbiAgfSwgUmVzdHJpY3Rpb24uSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLKTtcbn1cbiJdfQ==
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9kaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9iYXNlX2Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFZLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXpELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFVMUM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBUXpCOzs7Ozs7T0FNRztJQUNILFlBQ21CLGdCQUE4RCxFQUMvRSxFQUFDLGFBQWEsR0FBRyxTQUFTLEtBQWdDLEVBQUU7UUFEM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QztRQWZqRiwyQkFBMkI7UUFDViw0QkFBdUIsR0FBdUIsRUFBRSxDQUFDO1FBR2xFLDZDQUE2QztRQUNyQyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFhbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0gsUUFBUSxDQUFDLFNBQW9CO1FBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMscUJBQXFCLENBQUMsZ0JBQWtDO1FBQ3RELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixJQUNFLElBQUksQ0FBQyxvQkFBb0I7WUFDekIsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNuQixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDekMsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFjLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLGFBQXFDLEVBQ3JDLFVBQTBCO0lBRTFCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUU7UUFDMUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDLEVBQUUsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0V2ZW50SW5mbywgRXZlbnRJbmZvV3JhcHBlcn0gZnJvbSAnLi9ldmVudF9pbmZvJztcbmltcG9ydCB7VW5yZW5hbWVkRXZlbnRDb250cmFjdH0gZnJvbSAnLi9ldmVudGNvbnRyYWN0JztcbmltcG9ydCB7UmVzdHJpY3Rpb259IGZyb20gJy4vcmVzdHJpY3Rpb24nO1xuLyoqXG4gKiBBIHJlcGxheWVyIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgcXVldWVkIGV2ZW50cyxcbiAqIGVpdGhlciBmcm9tIHRoZSBgRXZlbnRDb250cmFjdGAgb3Igd2hlbiB0aGVyZSBhcmUgbm8gZGV0ZWN0ZWQgaGFuZGxlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxheWVyID0gKGV2ZW50SW5mb1dyYXBwZXJzOiBFdmVudEluZm9XcmFwcGVyW10pID0+IHZvaWQ7XG4vKipcbiAqIEEgaGFuZGxlciBpcyBkaXNwYXRjaGVkIHRvIGR1cmluZyBub3JtYWwgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyID0gKGV2ZW50SW5mb1dyYXBwZXI6IEV2ZW50SW5mb1dyYXBwZXIpID0+IHZvaWQ7XG4vKipcbiAqIFJlY2VpdmVzIGEgRE9NIGV2ZW50LCBkZXRlcm1pbmVzIHRoZSBqc2FjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJjZVxuICogZWxlbWVudCBvZiB0aGUgRE9NIGV2ZW50LCBhbmQgaW52b2tlcyB0aGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggdGhlXG4gKiBqc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VEaXNwYXRjaGVyIHtcbiAgLyoqIFRoZSBxdWV1ZSBvZiBldmVudHMuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcXVldWVkRXZlbnRJbmZvV3JhcHBlcnM6IEV2ZW50SW5mb1dyYXBwZXJbXSA9IFtdO1xuICAvKiogVGhlIHJlcGxheWVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBxdWV1ZWQgZXZlbnRzLiAqL1xuICBwcml2YXRlIGV2ZW50UmVwbGF5ZXI/OiBSZXBsYXllcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGV2ZW50IHJlcGxheSBpcyBzY2hlZHVsZWQuICovXG4gIHByaXZhdGUgZXZlbnRSZXBsYXlTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3B0aW9ucyBhcmU6XG4gICAqICAgMS4gYGV2ZW50UmVwbGF5ZXJgOiBXaGVuIHRoZSBldmVudCBjb250cmFjdCBkaXNwYXRjaGVzIHJlcGxheSBldmVudHNcbiAgICogICAgICB0byB0aGUgRGlzcGF0Y2hlciwgdGhlIERpc3BhdGNoZXIgY29sbGVjdHMgdGhlbSBhbmQgaW4gdGhlIG5leHQgdGlja1xuICAgKiAgICAgIGRpc3BhdGNoZXMgdGhlbSB0byB0aGUgYGV2ZW50UmVwbGF5ZXJgLlxuICAgKiBAcGFyYW0gZGlzcGF0Y2hEZWxlZ2F0ZSBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGhhbmRsZSBkaXNwYXRjaGluZyBhbiBgRXZlbnRJbmZvV3JhcHBlcmAgdG8gaGFuZGxlcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpc3BhdGNoRGVsZWdhdGU6IChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSA9PiB2b2lkLFxuICAgIHtldmVudFJlcGxheWVyID0gdW5kZWZpbmVkfToge2V2ZW50UmVwbGF5ZXI/OiBSZXBsYXllcn0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFJlcGxheWVyID0gZXZlbnRSZXBsYXllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBldmVudCBvciB0aGUgZXZlbnQgcXVldWUgZnJvbSB0aGUgRXZlbnRDb250cmFjdC4gVGhlIGV2ZW50XG4gICAqIHF1ZXVlIGlzIGNvcGllZCBhbmQgaXQgYXR0ZW1wdHMgdG8gcmVwbGF5LlxuICAgKiBJZiBldmVudCBpbmZvIGlzIHBhc3NlZCBpbiBpdCBsb29rcyBmb3IgYW4gYWN0aW9uIGhhbmRsZXIgdGhhdCBjYW4gaGFuZGxlXG4gICAqIHRoZSBnaXZlbiBldmVudC4gIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBxdWV1ZXMgdGhlIGV2ZW50IGFuZFxuICAgKiBjaGVja3MgaWYgYSBsb2FkZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4gSWYgc28sIGNhbGxzIGl0LlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCBpZiBpbiBnbG9iYWwgZGlzcGF0Y2ggbW9kZSwgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgZ2xvYmFsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogVGhlIHRocmVlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGNhbGwgYXJlIGRlbGliZXJhdGVseSBub3Qgc3BsaXQgaW50b1xuICAgKiB0aHJlZSBtZXRob2RzIChhbmQgdGhlbiBkZWNsYXJlZCBhcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UpLCBiZWNhdXNlIHRoZVxuICAgKiBpbnRlcmZhY2UgaXMgdXNlZCBieSBFdmVudENvbnRyYWN0LCB3aGljaCBsaXZlcyBpbiBhIGRpZmZlcmVudCBqc2JpbmFyeS5cbiAgICogVGhlcmVmb3JlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgdGhyZWUgaXMgZGVmaW5lZCBlbnRpcmVseSBpbiB0ZXJtcyB0aGF0XG4gICAqIGFyZSBpbnZhcmlhbnQgdW5kZXIganNjb21waWxlciBwcm9jZXNzaW5nIChGdW5jdGlvbiBhbmQgQXJyYXksIGFzIG9wcG9zZWRcbiAgICogdG8gYSBjdXN0b20gdHlwZSB3aXRoIG1ldGhvZCBuYW1lcykuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZm8gVGhlIGluZm8gZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwgb3IgdGhlXG4gICAqICAgICBxdWV1ZSBvZiBldmVudHMgZnJvbSBFdmVudENvbnRyYWN0LlxuICAgKi9cbiAgZGlzcGF0Y2goZXZlbnRJbmZvOiBFdmVudEluZm8pOiB2b2lkIHtcbiAgICBjb25zdCBldmVudEluZm9XcmFwcGVyID0gbmV3IEV2ZW50SW5mb1dyYXBwZXIoZXZlbnRJbmZvKTtcbiAgICBpZiAoZXZlbnRJbmZvV3JhcHBlci5nZXRJc1JlcGxheSgpKSB7XG4gICAgICBpZiAoIXRoaXMuZXZlbnRSZXBsYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnF1ZXVlRXZlbnRJbmZvV3JhcHBlcihldmVudEluZm9XcmFwcGVyKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVFdmVudFJlcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRGVsZWdhdGUoZXZlbnRJbmZvV3JhcHBlcik7XG4gIH1cblxuICAvKiogUXVldWUgYW4gYEV2ZW50SW5mb1dyYXBwZXJgIGZvciByZXBsYXkuICovXG4gIHF1ZXVlRXZlbnRJbmZvV3JhcHBlcihldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSB7XG4gICAgdGhpcy5xdWV1ZWRFdmVudEluZm9XcmFwcGVycy5wdXNoKGV2ZW50SW5mb1dyYXBwZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxheXMgcXVldWVkIGV2ZW50cywgaWYgYW55LiBUaGUgcmVwbGF5aW5nIHdpbGwgaGFwcGVuIGluIGl0cyBvd25cbiAgICogc3RhY2sgb25jZSB0aGUgY3VycmVudCBmbG93IGNlZGVzIGNvbnRyb2wuIFRoaXMgaXMgZG9uZSB0byBtaW1pY1xuICAgKiBicm93c2VyIGV2ZW50IGhhbmRsaW5nLlxuICAgKi9cbiAgc2NoZWR1bGVFdmVudFJlcGxheSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkIHx8XG4gICAgICAhdGhpcy5ldmVudFJlcGxheWVyIHx8XG4gICAgICB0aGlzLnF1ZXVlZEV2ZW50SW5mb1dyYXBwZXJzLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXlTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXllciEodGhpcy5xdWV1ZWRFdmVudEluZm9XcmFwcGVycyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgZGVmZXJyZWQgZnVuY3Rpb25hbGl0eSBmb3IgYW4gRXZlbnRDb250cmFjdCBhbmQgYSBKc2FjdGlvblxuICogRGlzcGF0Y2hlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcGF0Y2hlcihcbiAgZXZlbnRDb250cmFjdDogVW5yZW5hbWVkRXZlbnRDb250cmFjdCxcbiAgZGlzcGF0Y2hlcjogQmFzZURpc3BhdGNoZXIsXG4pIHtcbiAgZXZlbnRDb250cmFjdC5lY3JkKChldmVudEluZm86IEV2ZW50SW5mbykgPT4ge1xuICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goZXZlbnRJbmZvKTtcbiAgfSwgUmVzdHJpY3Rpb24uSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLKTtcbn1cbiJdfQ==
@@ -50,6 +50,9 @@ export function createCustomEvent(type, data, triggeringEvent) {
50
50
  * Fires a custom event with an optional payload. Only intended to be consumed
51
51
  * by jsaction itself. Supported in Firefox 6+, IE 9+, and all Chrome versions.
52
52
  *
53
+ * `bootstrapCustomEventSupport` is required to add a listener that handles the
54
+ * event.
55
+ *
53
56
  * @param target The target element.
54
57
  * @param type The type of the action, e.g., 'submit'.
55
58
  * @param data An optional data payload.
@@ -60,4 +63,40 @@ export function fireCustomEvent(target, type, data, triggeringEvent) {
60
63
  const event = createCustomEvent(type, data, triggeringEvent);
61
64
  target.dispatchEvent(event);
62
65
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tX2V2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvY3VzdG9tX2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBZXhDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFJLElBQVksRUFBRSxJQUFRLEVBQUUsZUFBdUI7SUFDbEYsSUFBSSxLQUFxRSxDQUFDO0lBQzFFLE1BQU0sZUFBZSxHQUErQjtRQUNsRCxPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUM7SUFDRixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsSUFBSTtRQUNKLElBQUk7UUFDSixlQUFlO0tBQ2hCLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsYUFBYSxFQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDO1FBQ0gsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLDBFQUEwRTtRQUMxRSwrQ0FBK0M7UUFFL0MsNEVBQTRFO1FBQzVFLFFBQVE7UUFDUixrQ0FBa0M7UUFDbEMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFRLENBQUM7UUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyx3RUFBd0U7UUFDeEUsa0NBQWtDO1FBQ2pDLEtBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQWUsRUFDZixJQUFZLEVBQ1osSUFBUSxFQUNSLGVBQXVCO0lBRXZCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRUeXBlfSBmcm9tICcuLy9ldmVudF90eXBlJztcblxuLy8gV2UgdXNlICdfdHlwZScgZm9yIHRoZSBldmVudCBjb250cmFjdCwgd2hpY2ggbGl2ZXMgaW4gYSBzZXBhcmF0ZVxuLy8gY29tcGlsYXRpb24gdW5pdC5cbmRlY2xhcmUgaW50ZXJmYWNlIFVucmVuYW1lZEN1c3RvbUV2ZW50RGV0YWlsIHtcbiAgX3R5cGU6IHN0cmluZztcbn1cblxuLyoqIFRoZSBkZXRhaWwgaW50ZXJmYWNlIHByb3ZpZGVkIGZvciBjdXN0b20gZXZlbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FdmVudERldGFpbDxUPiB7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YT86IFQ7XG4gIHRyaWdnZXJpbmdFdmVudD86IEV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGN1c3RvbSBldmVudCB3aXRoIHRoZSBzcGVjaWZpZWQgZGF0YS5cbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24sIGUuZy4sICdzdWJtaXQnLlxuICogQHBhcmFtIGRhdGEgQW4gb3B0aW9uYWwgZGF0YSBwYXlsb2FkLlxuICogQHBhcmFtIHRyaWdnZXJpbmdFdmVudCBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VycyB0aGlzIGN1c3RvbSBldmVudC4gVGhpcyBjYW4gYmVcbiAqICAgICBhY2Nlc3NlZCBmcm9tIHRoZSBjdXN0b20gZXZlbnQncyBhY3Rpb24gZmxvdyBsaWtlIHNvOlxuICogICAgIGFjdGlvbkZsb3cuZXZlbnQoKS5kZXRhaWwudHJpZ2dlcmluZ0V2ZW50LlxuICogQHJldHVybiBUaGUgbmV3IGN1c3RvbSBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUV2ZW50PFQ+KHR5cGU6IHN0cmluZywgZGF0YT86IFQsIHRyaWdnZXJpbmdFdmVudD86IEV2ZW50KTogRXZlbnQge1xuICBsZXQgZXZlbnQ6IEN1c3RvbUV2ZW50PEN1c3RvbUV2ZW50RGV0YWlsPFQ+ICYgVW5yZW5hbWVkQ3VzdG9tRXZlbnREZXRhaWw+O1xuICBjb25zdCB1bnJlbmFtZWREZXRhaWw6IFVucmVuYW1lZEN1c3RvbUV2ZW50RGV0YWlsID0ge1xuICAgICdfdHlwZSc6IHR5cGUsXG4gIH07XG4gIGNvbnN0IHJlbmFtZWREZXRhaWw6IEN1c3RvbUV2ZW50RGV0YWlsPFQ+ID0ge1xuICAgIHR5cGUsXG4gICAgZGF0YSxcbiAgICB0cmlnZ2VyaW5nRXZlbnQsXG4gIH07XG4gIGNvbnN0IGRldGFpbCA9IHsuLi51bnJlbmFtZWREZXRhaWwsIC4uLnJlbmFtZWREZXRhaWx9O1xuICB0cnkge1xuICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgQ3VzdG9tRXZlbnQgY29uc3RydWN0b3IgZGlyZWN0bHkgc2luY2UgaXQgaXNuJ3RcbiAgICAvLyBzdXBwb3J0ZWQgaW4gSUUgOSBvciAxMCBhbmQgaW5pdEN1c3RvbUV2ZW50IGJlbG93IHdvcmtzIGp1c3QgZmluZS5cbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgIGV2ZW50LmluaXRDdXN0b21FdmVudChFdmVudFR5cGUuQ1VTVE9NLCB0cnVlLCBmYWxzZSwgZGV0YWlsKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElmIGN1c3RvbSBldmVudHMgYXJlbid0IHN1cHBvcnRlZCwgZmFsbCBiYWNrIHRvIGN1c3RvbS1uYW1lZCBIVE1MRXZlbnQuXG4gICAgLy8gRmFsbGJhY2sgdXNlZCBieSBBbmRyb2lkIEdpbmdlcmJyZWFkLCBGRjQtNS5cblxuICAgIC8vIEhhY2sgdG8gZW11bGF0ZSBgQ3VzdG9tRXZlbnRgLCBgSFRNTEV2ZW50c2AgZG9lc24ndCBzYXRpc2Z5IGBDdXN0b21FdmVudGBcbiAgICAvLyB0eXBlLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJykgYXMgYW55O1xuICAgIGV2ZW50LmluaXRFdmVudChFdmVudFR5cGUuQ1VTVE9NLCB0cnVlLCBmYWxzZSk7XG4gICAgLy8gSGFjayB0byBlbXVsYXRlIGBDdXN0b21FdmVudGAsIGBkZXRhaWxgIGlzIHJlYWRvbmx5IG9uIGBDdXN0b21FdmVudGAuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChldmVudCBhcyBhbnkpWydkZXRhaWwnXSA9IGRldGFpbDtcbiAgfVxuXG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBGaXJlcyBhIGN1c3RvbSBldmVudCB3aXRoIGFuIG9wdGlvbmFsIHBheWxvYWQuIE9ubHkgaW50ZW5kZWQgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGpzYWN0aW9uIGl0c2VsZi4gU3VwcG9ydGVkIGluIEZpcmVmb3ggNissIElFIDkrLCBhbmQgYWxsIENocm9tZSB2ZXJzaW9ucy5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24sIGUuZy4sICdzdWJtaXQnLlxuICogQHBhcmFtIGRhdGEgQW4gb3B0aW9uYWwgZGF0YSBwYXlsb2FkLlxuICogQHBhcmFtIHRyaWdnZXJpbmdFdmVudCBBbiBvcHRpb25hbCBkYXRhIGZvciB0aGUgRXZlbnQgdHJpZ2dlcmVkIHRoaXMgY3VzdG9tXG4gKiAgICAgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJlQ3VzdG9tRXZlbnQ8VD4oXG4gIHRhcmdldDogRWxlbWVudCxcbiAgdHlwZTogc3RyaW5nLFxuICBkYXRhPzogVCxcbiAgdHJpZ2dlcmluZ0V2ZW50PzogRXZlbnQsXG4pIHtcbiAgY29uc3QgZXZlbnQgPSBjcmVhdGVDdXN0b21FdmVudCh0eXBlLCBkYXRhLCB0cmlnZ2VyaW5nRXZlbnQpO1xuICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG4iXX0=
66
+ /**
67
+ * Bootstraps `CustomEvent` support on the container.
68
+ *
69
+ * This is required to handle events fired by `fireCustomEvent` in the `container`.
70
+ *
71
+ * @param container The JSAction container to add an event listener on.
72
+ * @param trigger A function that can trigger JSAction Event dispatch. Generally this function
73
+ * should delegate to an `EventContract` handler for the event type provided defined by
74
+ * `event.detail['_type']`.
75
+ * @returns A function that removes the event listener.
76
+ */
77
+ export function bootstrapCustomEventSupport(container, trigger) {
78
+ const customEventListener = (event) => {
79
+ let customEvent = event;
80
+ const detail = customEvent.detail;
81
+ // For custom events, use a secondary dispatch based on the internal
82
+ // custom type of the event.
83
+ if (!detail || !detail['_type']) {
84
+ // This should never happen.
85
+ return;
86
+ }
87
+ // Mirrors code from Wiz's internal `trigger()` method.
88
+ const syntheticCustomEvent = {
89
+ 'type': detail['_type'],
90
+ 'target': event.target,
91
+ 'bubbles': true,
92
+ detail,
93
+ };
94
+ // tslint:disable-next-line:no-any
95
+ trigger(syntheticCustomEvent);
96
+ };
97
+ container.addEventListener('_custom', customEventListener);
98
+ return () => {
99
+ container.removeEventListener('_custom', customEventListener);
100
+ };
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tX2V2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvY3VzdG9tX2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBZXhDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFJLElBQVksRUFBRSxJQUFRLEVBQUUsZUFBdUI7SUFDbEYsSUFBSSxLQUFxRSxDQUFDO0lBQzFFLE1BQU0sZUFBZSxHQUErQjtRQUNsRCxPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUM7SUFDRixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsSUFBSTtRQUNKLElBQUk7UUFDSixlQUFlO0tBQ2hCLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsYUFBYSxFQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDO1FBQ0gsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLDBFQUEwRTtRQUMxRSwrQ0FBK0M7UUFFL0MsNEVBQTRFO1FBQzVFLFFBQVE7UUFDUixrQ0FBa0M7UUFDbEMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFRLENBQUM7UUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyx3RUFBd0U7UUFDeEUsa0NBQWtDO1FBQ2pDLEtBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQWUsRUFDZixJQUFZLEVBQ1osSUFBUSxFQUNSLGVBQXVCO0lBRXZCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxTQUFrQixFQUFFLE9BQStCO0lBQzdGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUMzQyxJQUFJLFdBQVcsR0FBRyxLQUFvQixDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDbEMsb0VBQW9FO1FBQ3BFLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsNEJBQTRCO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0QsdURBQXVEO1FBQ3ZELE1BQU0sb0JBQW9CLEdBQUc7WUFDM0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDdkIsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsTUFBTTtTQUNQLENBQUM7UUFDRixrQ0FBa0M7UUFDbEMsT0FBTyxDQUFDLG9CQUEyQixDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0YsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNELE9BQU8sR0FBRyxFQUFFO1FBQ1YsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtFdmVudFR5cGV9IGZyb20gJy4vL2V2ZW50X3R5cGUnO1xuXG4vLyBXZSB1c2UgJ190eXBlJyBmb3IgdGhlIGV2ZW50IGNvbnRyYWN0LCB3aGljaCBsaXZlcyBpbiBhIHNlcGFyYXRlXG4vLyBjb21waWxhdGlvbiB1bml0LlxuZGVjbGFyZSBpbnRlcmZhY2UgVW5yZW5hbWVkQ3VzdG9tRXZlbnREZXRhaWwge1xuICBfdHlwZTogc3RyaW5nO1xufVxuXG4vKiogVGhlIGRldGFpbCBpbnRlcmZhY2UgcHJvdmlkZWQgZm9yIGN1c3RvbSBldmVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUV2ZW50RGV0YWlsPFQ+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBkYXRhPzogVDtcbiAgdHJpZ2dlcmluZ0V2ZW50PzogRXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY3VzdG9tIGV2ZW50IHdpdGggdGhlIHNwZWNpZmllZCBkYXRhLlxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIGFjdGlvbiwgZS5nLiwgJ3N1Ym1pdCcuXG4gKiBAcGFyYW0gZGF0YSBBbiBvcHRpb25hbCBkYXRhIHBheWxvYWQuXG4gKiBAcGFyYW0gdHJpZ2dlcmluZ0V2ZW50IFRoZSBldmVudCB0aGF0IHRyaWdnZXJzIHRoaXMgY3VzdG9tIGV2ZW50LiBUaGlzIGNhbiBiZVxuICogICAgIGFjY2Vzc2VkIGZyb20gdGhlIGN1c3RvbSBldmVudCdzIGFjdGlvbiBmbG93IGxpa2Ugc286XG4gKiAgICAgYWN0aW9uRmxvdy5ldmVudCgpLmRldGFpbC50cmlnZ2VyaW5nRXZlbnQuXG4gKiBAcmV0dXJuIFRoZSBuZXcgY3VzdG9tIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXZlbnQ8VD4odHlwZTogc3RyaW5nLCBkYXRhPzogVCwgdHJpZ2dlcmluZ0V2ZW50PzogRXZlbnQpOiBFdmVudCB7XG4gIGxldCBldmVudDogQ3VzdG9tRXZlbnQ8Q3VzdG9tRXZlbnREZXRhaWw8VD4gJiBVbnJlbmFtZWRDdXN0b21FdmVudERldGFpbD47XG4gIGNvbnN0IHVucmVuYW1lZERldGFpbDogVW5yZW5hbWVkQ3VzdG9tRXZlbnREZXRhaWwgPSB7XG4gICAgJ190eXBlJzogdHlwZSxcbiAgfTtcbiAgY29uc3QgcmVuYW1lZERldGFpbDogQ3VzdG9tRXZlbnREZXRhaWw8VD4gPSB7XG4gICAgdHlwZSxcbiAgICBkYXRhLFxuICAgIHRyaWdnZXJpbmdFdmVudCxcbiAgfTtcbiAgY29uc3QgZGV0YWlsID0gey4uLnVucmVuYW1lZERldGFpbCwgLi4ucmVuYW1lZERldGFpbH07XG4gIHRyeSB7XG4gICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBDdXN0b21FdmVudCBjb25zdHJ1Y3RvciBkaXJlY3RseSBzaW5jZSBpdCBpc24ndFxuICAgIC8vIHN1cHBvcnRlZCBpbiBJRSA5IG9yIDEwIGFuZCBpbml0Q3VzdG9tRXZlbnQgYmVsb3cgd29ya3MganVzdCBmaW5lLlxuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KEV2ZW50VHlwZS5DVVNUT00sIHRydWUsIGZhbHNlLCBkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgY3VzdG9tIGV2ZW50cyBhcmVuJ3Qgc3VwcG9ydGVkLCBmYWxsIGJhY2sgdG8gY3VzdG9tLW5hbWVkIEhUTUxFdmVudC5cbiAgICAvLyBGYWxsYmFjayB1c2VkIGJ5IEFuZHJvaWQgR2luZ2VyYnJlYWQsIEZGNC01LlxuXG4gICAgLy8gSGFjayB0byBlbXVsYXRlIGBDdXN0b21FdmVudGAsIGBIVE1MRXZlbnRzYCBkb2Vzbid0IHNhdGlzZnkgYEN1c3RvbUV2ZW50YFxuICAgIC8vIHR5cGUuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKSBhcyBhbnk7XG4gICAgZXZlbnQuaW5pdEV2ZW50KEV2ZW50VHlwZS5DVVNUT00sIHRydWUsIGZhbHNlKTtcbiAgICAvLyBIYWNrIHRvIGVtdWxhdGUgYEN1c3RvbUV2ZW50YCwgYGRldGFpbGAgaXMgcmVhZG9ubHkgb24gYEN1c3RvbUV2ZW50YC5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGV2ZW50IGFzIGFueSlbJ2RldGFpbCddID0gZGV0YWlsO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEZpcmVzIGEgY3VzdG9tIGV2ZW50IHdpdGggYW4gb3B0aW9uYWwgcGF5bG9hZC4gT25seSBpbnRlbmRlZCB0byBiZSBjb25zdW1lZFxuICogYnkganNhY3Rpb24gaXRzZWxmLiBTdXBwb3J0ZWQgaW4gRmlyZWZveCA2KywgSUUgOSssIGFuZCBhbGwgQ2hyb21lIHZlcnNpb25zLlxuICpcbiAqIGBib290c3RyYXBDdXN0b21FdmVudFN1cHBvcnRgIGlzIHJlcXVpcmVkIHRvIGFkZCBhIGxpc3RlbmVyIHRoYXQgaGFuZGxlcyB0aGVcbiAqIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50LlxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIGFjdGlvbiwgZS5nLiwgJ3N1Ym1pdCcuXG4gKiBAcGFyYW0gZGF0YSBBbiBvcHRpb25hbCBkYXRhIHBheWxvYWQuXG4gKiBAcGFyYW0gdHJpZ2dlcmluZ0V2ZW50IEFuIG9wdGlvbmFsIGRhdGEgZm9yIHRoZSBFdmVudCB0cmlnZ2VyZWQgdGhpcyBjdXN0b21cbiAqICAgICBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcmVDdXN0b21FdmVudDxUPihcbiAgdGFyZ2V0OiBFbGVtZW50LFxuICB0eXBlOiBzdHJpbmcsXG4gIGRhdGE/OiBULFxuICB0cmlnZ2VyaW5nRXZlbnQ/OiBFdmVudCxcbikge1xuICBjb25zdCBldmVudCA9IGNyZWF0ZUN1c3RvbUV2ZW50KHR5cGUsIGRhdGEsIHRyaWdnZXJpbmdFdmVudCk7XG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn1cblxuLyoqXG4gKiBCb290c3RyYXBzIGBDdXN0b21FdmVudGAgc3VwcG9ydCBvbiB0aGUgY29udGFpbmVyLlxuICpcbiAqIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGV2ZW50cyBmaXJlZCBieSBgZmlyZUN1c3RvbUV2ZW50YCBpbiB0aGUgYGNvbnRhaW5lcmAuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciBUaGUgSlNBY3Rpb24gY29udGFpbmVyIHRvIGFkZCBhbiBldmVudCBsaXN0ZW5lciBvbi5cbiAqIEBwYXJhbSB0cmlnZ2VyIEEgZnVuY3Rpb24gdGhhdCBjYW4gdHJpZ2dlciBKU0FjdGlvbiBFdmVudCBkaXNwYXRjaC4gR2VuZXJhbGx5IHRoaXMgZnVuY3Rpb25cbiAqICAgIHNob3VsZCBkZWxlZ2F0ZSB0byBhbiBgRXZlbnRDb250cmFjdGAgaGFuZGxlciBmb3IgdGhlIGV2ZW50IHR5cGUgcHJvdmlkZWQgZGVmaW5lZCBieVxuICogICAgYGV2ZW50LmRldGFpbFsnX3R5cGUnXWAuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXBDdXN0b21FdmVudFN1cHBvcnQoY29udGFpbmVyOiBFbGVtZW50LCB0cmlnZ2VyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgbGV0IGN1c3RvbUV2ZW50ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgY29uc3QgZGV0YWlsID0gY3VzdG9tRXZlbnQuZGV0YWlsO1xuICAgIC8vIEZvciBjdXN0b20gZXZlbnRzLCB1c2UgYSBzZWNvbmRhcnkgZGlzcGF0Y2ggYmFzZWQgb24gdGhlIGludGVybmFsXG4gICAgLy8gY3VzdG9tIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWxbJ190eXBlJ10pIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTWlycm9ycyBjb2RlIGZyb20gV2l6J3MgaW50ZXJuYWwgYHRyaWdnZXIoKWAgbWV0aG9kLlxuICAgIGNvbnN0IHN5bnRoZXRpY0N1c3RvbUV2ZW50ID0ge1xuICAgICAgJ3R5cGUnOiBkZXRhaWxbJ190eXBlJ10sXG4gICAgICAndGFyZ2V0JzogZXZlbnQudGFyZ2V0LFxuICAgICAgJ2J1YmJsZXMnOiB0cnVlLFxuICAgICAgZGV0YWlsLFxuICAgIH07XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIHRyaWdnZXIoc3ludGhldGljQ3VzdG9tRXZlbnQgYXMgYW55KTtcbiAgfTtcbiAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ19jdXN0b20nLCBjdXN0b21FdmVudExpc3RlbmVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignX2N1c3RvbScsIGN1c3RvbUV2ZW50TGlzdGVuZXIpO1xuICB9O1xufVxuIl19
@@ -35,8 +35,8 @@ export class Dispatcher {
35
35
  /** A map of global event handlers, where each key is an event type. */
36
36
  this.globalHandlers = new Map();
37
37
  this.eventReplayer = eventReplayer;
38
- this.baseDispatcher = new BaseDispatcher((eventInfoWrapper, isGlobalDispatch) => {
39
- this.dispatchToHandler(eventInfoWrapper, isGlobalDispatch);
38
+ this.baseDispatcher = new BaseDispatcher((eventInfoWrapper) => {
39
+ this.dispatchToHandler(eventInfoWrapper);
40
40
  }, {
41
41
  eventReplayer: (eventInfoWrappers) => {
42
42
  this.eventReplayer?.(eventInfoWrappers, this);
@@ -63,38 +63,45 @@ export class Dispatcher {
63
63
  *
64
64
  * @param eventInfo The info for the event that triggered this call or the
65
65
  * queue of events from EventContract.
66
- * @param isGlobalDispatch If true, dispatches a global event instead of a
67
- * regular jsaction handler.
68
66
  */
69
67
  dispatch(eventInfo, isGlobalDispatch) {
70
- this.baseDispatcher.dispatch(eventInfo, isGlobalDispatch);
68
+ this.baseDispatcher.dispatch(eventInfo);
71
69
  }
72
70
  /**
73
71
  * Dispatches an `EventInfoWrapper`.
74
72
  */
75
- dispatchToHandler(eventInfoWrapper, isGlobalDispatch) {
76
- if (isGlobalDispatch) {
73
+ dispatchToHandler(eventInfoWrapper) {
74
+ if (this.globalHandlers.size) {
75
+ const globalEventInfoWrapper = eventInfoWrapper.clone();
76
+ // In some cases, `populateAction` will rewrite `click` events to
77
+ // `clickonly`. Revert back to a regular click, otherwise we won't be able
78
+ // to execute global event handlers registered on click events.
79
+ if (globalEventInfoWrapper.getEventType() === EventType.CLICKONLY) {
80
+ globalEventInfoWrapper.setEventType(EventType.CLICK);
81
+ }
77
82
  // Skip everything related to jsaction handlers, and execute the global
78
83
  // handlers.
79
- const ev = eventInfoWrapper.getEvent();
80
- const eventTypeHandlers = this.globalHandlers.get(eventInfoWrapper.getEventType());
84
+ const event = globalEventInfoWrapper.getEvent();
85
+ const eventTypeHandlers = this.globalHandlers.get(globalEventInfoWrapper.getEventType());
81
86
  let shouldPreventDefault = false;
82
87
  if (eventTypeHandlers) {
83
88
  for (const handler of eventTypeHandlers) {
84
- if (handler(ev) === false) {
89
+ if (handler(event) === false) {
85
90
  shouldPreventDefault = true;
86
91
  }
87
92
  }
88
93
  }
89
94
  if (shouldPreventDefault) {
90
- eventLib.preventDefault(ev);
95
+ eventLib.preventDefault(event);
91
96
  }
97
+ }
98
+ const action = eventInfoWrapper.getAction();
99
+ if (!action) {
92
100
  return;
93
101
  }
94
102
  if (this.stopPropagation) {
95
103
  stopPropagation(eventInfoWrapper);
96
104
  }
97
- const action = eventInfoWrapper.getAction();
98
105
  let handler = undefined;
99
106
  if (this.getHandler) {
100
107
  handler = this.getHandler(eventInfoWrapper);
@@ -246,8 +253,8 @@ export function stopPropagation(eventInfoWrapper) {
246
253
  * Dispatcher.
247
254
  */
248
255
  export function registerDispatcher(eventContract, dispatcher) {
249
- eventContract.ecrd((eventInfo, globalDispatch) => {
250
- dispatcher.dispatch(eventInfo, globalDispatch);
256
+ eventContract.ecrd((eventInfo) => {
257
+ dispatcher.dispatch(eventInfo);
251
258
  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);
252
259
  }
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvZGlzcGF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUEwQixNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFFcEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBZ0IxQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFtQnJCOzs7Ozs7O09BT0c7SUFDSCxZQUNtQixVQUVrQixFQUNuQyxFQUNFLGVBQWUsR0FBRyxLQUFLLEVBQ3ZCLGFBQWEsR0FBRyxTQUFTLE1BQ2dDLEVBQUU7UUFONUMsZUFBVSxHQUFWLFVBQVUsQ0FFUTtRQXhCckM7Ozs7V0FJRztRQUNjLFlBQU8sR0FBNkMsRUFBRSxDQUFDO1FBRXhFLHVFQUF1RTtRQUN0RCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBc0J0RSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUN0QyxDQUFDLGdCQUFrQyxFQUFFLGdCQUEwQixFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxFQUNEO1lBQ0UsYUFBYSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7U0FDRixDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILFFBQVEsQ0FBQyxTQUFvQixFQUFFLGdCQUEwQjtRQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxnQkFBa0MsRUFBRSxnQkFBMEI7UUFDdEYsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLHVFQUF1RTtZQUN2RSxZQUFZO1lBQ1osTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUN4QyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDMUIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO2dCQUN6QixRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUcsQ0FBQztRQUU3QyxJQUFJLE9BQU8sR0FBbUMsU0FBUyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCx5QkFBeUIsQ0FDdkIsU0FBaUIsRUFDakIsUUFBa0IsRUFDbEIsT0FBaUQ7UUFFakQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMxRCxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLGtFQUFrRTtnQkFDbEUsb0VBQW9FO2dCQUNwRSxnREFBZ0Q7Z0JBQ2hELE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNuQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUMsU0FBaUIsRUFBRSxJQUFZO1FBQy9DLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLE9BQXNCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxPQUFzQjtRQUMvRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsZ0JBQWtDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUJHO0lBQ0gsZ0JBQWdCLENBQUMsYUFBdUI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sVUFBVSxlQUFlLENBQUMsZ0JBQWtDO0lBQ2hFLElBQ0UsUUFBUSxDQUFDLE9BQU87UUFDaEIsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sS0FBSyxPQUFPO1lBQ3RELGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQztRQUM3RCxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUNuRCxDQUFDO1FBQ0Q7Ozs7V0FJRztRQUNILE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsMEVBQTBFO0lBQzFFLDZEQUE2RDtJQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLE9BQU87SUFDVCxDQUFDO0lBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsYUFBcUMsRUFBRSxVQUFzQjtJQUM5RixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBb0IsRUFBRSxjQUF3QixFQUFFLEVBQUU7UUFDcEUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQyxFQUFFLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtCYXNlRGlzcGF0Y2hlciwgRXZlbnRJbmZvV3JhcHBlckhhbmRsZXJ9IGZyb20gJy4vYmFzZV9kaXNwYXRjaGVyJztcbmltcG9ydCB7Q2hhcn0gZnJvbSAnLi9jaGFyJztcbmltcG9ydCAqIGFzIGV2ZW50TGliIGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHtFdmVudEluZm8sIEV2ZW50SW5mb1dyYXBwZXJ9IGZyb20gJy4vZXZlbnRfaW5mbyc7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcbmltcG9ydCB7VW5yZW5hbWVkRXZlbnRDb250cmFjdH0gZnJvbSAnLi9ldmVudGNvbnRyYWN0JztcbmltcG9ydCB7UmVzdHJpY3Rpb259IGZyb20gJy4vcmVzdHJpY3Rpb24nO1xuXG5leHBvcnQgdHlwZSB7RXZlbnRJbmZvV3JhcHBlckhhbmRsZXIgYXMgRXZlbnRJbmZvSGFuZGxlcn0gZnJvbSAnLi9iYXNlX2Rpc3BhdGNoZXInO1xuXG4vKipcbiAqIEEgZ2xvYmFsIGhhbmRsZXIgaXMgZGlzcGF0Y2hlZCB0byBiZWZvcmUgbm9ybWFsIGhhbmRsZXIgZGlzcGF0Y2guIFJldHVybmluZ1xuICogZmFsc2Ugd2lsbCBgcHJldmVudERlZmF1bHRgIG9uIHRoZSBldmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgR2xvYmFsSGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IGJvb2xlYW4gfCB2b2lkO1xuXG4vKipcbiAqIEEgcmVwbGF5ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBxdWV1ZWQgZXZlbnRzLFxuICogZWl0aGVyIGZyb20gdGhlIGBFdmVudENvbnRyYWN0YCBvciB3aGVuIHRoZXJlIGFyZSBubyBkZXRlY3RlZCBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVwbGF5ZXIgPSAoZXZlbnRJbmZvV3JhcHBlcnM6IEV2ZW50SW5mb1dyYXBwZXJbXSwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcikgPT4gdm9pZDtcblxuLyoqXG4gKiBSZWNlaXZlcyBhIERPTSBldmVudCwgZGV0ZXJtaW5lcyB0aGUganNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2VcbiAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICoganNhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlRGlzcGF0Y2hlcjogQmFzZURpc3BhdGNoZXI7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc3RvcCBwcm9wYWdhdGlvbiBmb3IgYW4gYEV2ZW50SW5mb2AuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcFByb3BhZ2F0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0aGF0IGFyZSByZWdpc3RlcmVkIGZvciB0aGlzIERpc3BhdGNoZXIgaW5zdGFuY2UuXG4gICAqIFRoaXMgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IG9uZSB1c2VkIG9uY2UgbWlncmF0aW9uIG9mZiBvZiByZWdpc3RlckhhbmRsZXJzXG4gICAqIGlzIGRvbmUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbnM6IHtba2V5OiBzdHJpbmddOiBFdmVudEluZm9XcmFwcGVySGFuZGxlcn0gPSB7fTtcblxuICAvKiogQSBtYXAgb2YgZ2xvYmFsIGV2ZW50IGhhbmRsZXJzLCB3aGVyZSBlYWNoIGtleSBpcyBhbiBldmVudCB0eXBlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxHbG9iYWxIYW5kbGVyPj4oKTtcblxuICAvKiogVGhlIGV2ZW50IHJlcGxheWVyLiAqL1xuICBwcml2YXRlIGV2ZW50UmVwbGF5ZXI/OiBSZXBsYXllcjtcblxuICAvKipcbiAgICogUmVjZWl2ZXMgYSBET00gZXZlbnQsIGRldGVybWluZXMgdGhlIGpzYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc291cmNlXG4gICAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAgKiBqc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGdldEhhbmRsZXIgQSBmdW5jdGlvbiB0aGF0IGtub3dzIGhvdyB0byBnZXQgdGhlIGhhbmRsZXIgZm9yIGFcbiAgICogICAgIGdpdmVuIGV2ZW50IGluZm8uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEhhbmRsZXI/OiAoXG4gICAgICBldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLFxuICAgICkgPT4gRXZlbnRJbmZvV3JhcHBlckhhbmRsZXIgfCB2b2lkLFxuICAgIHtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlLFxuICAgICAgZXZlbnRSZXBsYXllciA9IHVuZGVmaW5lZCxcbiAgICB9OiB7c3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjsgZXZlbnRSZXBsYXllcj86IFJlcGxheWVyfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLmV2ZW50UmVwbGF5ZXIgPSBldmVudFJlcGxheWVyO1xuICAgIHRoaXMuYmFzZURpc3BhdGNoZXIgPSBuZXcgQmFzZURpc3BhdGNoZXIoXG4gICAgICAoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlciwgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFRvSGFuZGxlcihldmVudEluZm9XcmFwcGVyLCBpc0dsb2JhbERpc3BhdGNoKTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV2ZW50UmVwbGF5ZXI6IChldmVudEluZm9XcmFwcGVycykgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnRSZXBsYXllcj8uKGV2ZW50SW5mb1dyYXBwZXJzLCB0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBldmVudCBvciB0aGUgZXZlbnQgcXVldWUgZnJvbSB0aGUgRXZlbnRDb250cmFjdC4gVGhlIGV2ZW50XG4gICAqIHF1ZXVlIGlzIGNvcGllZCBhbmQgaXQgYXR0ZW1wdHMgdG8gcmVwbGF5LlxuICAgKiBJZiBldmVudCBpbmZvIGlzIHBhc3NlZCBpbiBpdCBsb29rcyBmb3IgYW4gYWN0aW9uIGhhbmRsZXIgdGhhdCBjYW4gaGFuZGxlXG4gICAqIHRoZSBnaXZlbiBldmVudC4gIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBxdWV1ZXMgdGhlIGV2ZW50IGFuZFxuICAgKiBjaGVja3MgaWYgYSBsb2FkZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4gSWYgc28sIGNhbGxzIGl0LlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCBpZiBpbiBnbG9iYWwgZGlzcGF0Y2ggbW9kZSwgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgZ2xvYmFsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogVGhlIHRocmVlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGNhbGwgYXJlIGRlbGliZXJhdGVseSBub3Qgc3BsaXQgaW50b1xuICAgKiB0aHJlZSBtZXRob2RzIChhbmQgdGhlbiBkZWNsYXJlZCBhcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UpLCBiZWNhdXNlIHRoZVxuICAgKiBpbnRlcmZhY2UgaXMgdXNlZCBieSBFdmVudENvbnRyYWN0LCB3aGljaCBsaXZlcyBpbiBhIGRpZmZlcmVudCBqc2JpbmFyeS5cbiAgICogVGhlcmVmb3JlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgdGhyZWUgaXMgZGVmaW5lZCBlbnRpcmVseSBpbiB0ZXJtcyB0aGF0XG4gICAqIGFyZSBpbnZhcmlhbnQgdW5kZXIganNjb21waWxlciBwcm9jZXNzaW5nIChGdW5jdGlvbiBhbmQgQXJyYXksIGFzIG9wcG9zZWRcbiAgICogdG8gYSBjdXN0b20gdHlwZSB3aXRoIG1ldGhvZCBuYW1lcykuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZm8gVGhlIGluZm8gZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwgb3IgdGhlXG4gICAqICAgICBxdWV1ZSBvZiBldmVudHMgZnJvbSBFdmVudENvbnRyYWN0LlxuICAgKiBAcGFyYW0gaXNHbG9iYWxEaXNwYXRjaCBJZiB0cnVlLCBkaXNwYXRjaGVzIGEgZ2xvYmFsIGV2ZW50IGluc3RlYWQgb2YgYVxuICAgKiAgICAgcmVndWxhciBqc2FjdGlvbiBoYW5kbGVyLlxuICAgKi9cbiAgZGlzcGF0Y2goZXZlbnRJbmZvOiBFdmVudEluZm8sIGlzR2xvYmFsRGlzcGF0Y2g/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlRGlzcGF0Y2hlci5kaXNwYXRjaChldmVudEluZm8sIGlzR2xvYmFsRGlzcGF0Y2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYEV2ZW50SW5mb1dyYXBwZXJgLlxuICAgKi9cbiAgcHJpdmF0ZSBkaXNwYXRjaFRvSGFuZGxlcihldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLCBpc0dsb2JhbERpc3BhdGNoPzogYm9vbGVhbikge1xuICAgIGlmIChpc0dsb2JhbERpc3BhdGNoKSB7XG4gICAgICAvLyBTa2lwIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBqc2FjdGlvbiBoYW5kbGVycywgYW5kIGV4ZWN1dGUgdGhlIGdsb2JhbFxuICAgICAgLy8gaGFuZGxlcnMuXG4gICAgICBjb25zdCBldiA9IGV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnQoKTtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZUhhbmRsZXJzID0gdGhpcy5nbG9iYWxIYW5kbGVycy5nZXQoZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudFR5cGUoKSk7XG4gICAgICBsZXQgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgIGlmIChldmVudFR5cGVIYW5kbGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZXZlbnRUeXBlSGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoaGFuZGxlcihldikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnRMaWIucHJldmVudERlZmF1bHQoZXYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50SW5mb1dyYXBwZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50SW5mb1dyYXBwZXIuZ2V0QWN0aW9uKCkhO1xuXG4gICAgbGV0IGhhbmRsZXI6IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyIHwgdm9pZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5nZXRIYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyID0gdGhpcy5nZXRIYW5kbGVyKGV2ZW50SW5mb1dyYXBwZXIpO1xuICAgIH1cblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgaGFuZGxlciA9IHRoaXMuYWN0aW9uc1thY3Rpb24ubmFtZV07XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciB3YXMgZm91bmQuXG4gICAgdGhpcy5iYXNlRGlzcGF0Y2hlci5xdWV1ZUV2ZW50SW5mb1dyYXBwZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIG11bHRpcGxlIG1ldGhvZHMgYWxsIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdFxuICAgKiBpbnN0YW5jZS4gVGhpcyBpcyBhIGNvbW1vbiBjYXNlOiBhbiBhcHBsaWNhdGlvbiBtb2R1bGUgYmluZHNcbiAgICogbXVsdGlwbGUgb2YgaXRzIG1ldGhvZHMgdW5kZXIgcHVibGljIG5hbWVzIHRvIHRoZSBldmVudCBjb250cmFjdCBvZlxuICAgKiB0aGUgYXBwbGljYXRpb24uIFNvIHdlIHByb3ZpZGUgYSBzaG9ydGN1dCBmb3IgaXQuXG4gICAqIEF0dGVtcHRzIHRvIHJlcGxheSB0aGUgcXVldWVkIGV2ZW50cyBhZnRlciByZWdpc3RlcmluZyB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlIFRoZSBvYmplY3QgdG8gYmluZCB0aGUgbWV0aG9kcyB0by4gSWYgdGhpcyBpcyBudWxsLCB0aGVuXG4gICAqICAgICB0aGUgZnVuY3Rpb25zIGFyZSBub3QgYm91bmQsIGJ1dCBkaXJlY3RseSBhZGRlZCB1bmRlciB0aGUgcHVibGljIG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kcyBBIG1hcCBmcm9tIHB1YmxpYyBuYW1lIHRvIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgYm91bmQgdG9cbiAgICogICAgIGluc3RhbmNlIGFuZCByZWdpc3RlcmVkIGFzIGFjdGlvbiB1bmRlciB0aGUgcHVibGljIG5hbWUuIEkuZS4gdGhlXG4gICAqICAgICBwcm9wZXJ0eSBuYW1lcyBhcmUgdGhlIHB1YmxpYyBuYW1lcy4gVGhlIHByb3BlcnR5IHZhbHVlcyBhcmUgdGhlXG4gICAqICAgICBtZXRob2RzIG9mIGluc3RhbmNlLlxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudEluZm9IYW5kbGVyczxUPihcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgICBpbnN0YW5jZTogVCB8IG51bGwsXG4gICAgbWV0aG9kczoge1trZXk6IHN0cmluZ106IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyfSxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgbWV0aG9kXSBvZiBPYmplY3QuZW50cmllcyhtZXRob2RzKSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGluc3RhbmNlID8gbWV0aG9kLmJpbmQoaW5zdGFuY2UpIDogbWV0aG9kO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBJbmNsdWRlIGEgJy4nIHNlcGFyYXRvciBiZXR3ZWVuIG5hbWVzcGFjZSBuYW1lIGFuZCBhY3Rpb24gbmFtZS5cbiAgICAgICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBubyBuYW1lc3BhY2UgbmFtZSBpcyBwcm92aWRlZCwgdGhlIGpzYWN0aW9uIG5hbWVcbiAgICAgICAgLy8gY29uc2lzdHMgb2YgdGhlIGFjdGlvbiBuYW1lIG9ubHkgKG5vIHBlcmlvZCkuXG4gICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gbmFtZXNwYWNlICsgQ2hhci5OQU1FU1BBQ0VfQUNUSU9OX1NFUEFSQVRPUiArIG5hbWU7XG4gICAgICAgIHRoaXMuYWN0aW9uc1tmdWxsTmFtZV0gPSBoYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zW25hbWVdID0gaGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJhc2VEaXNwYXRjaGVyLnNjaGVkdWxlRXZlbnRSZXBsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhbiBhY3Rpb24uICBQcm92aWRlZCBhcyBhbiBlYXN5IHdheSB0byByZXZlcnNlIHRoZSBlZmZlY3RzIG9mXG4gICAqIHJlZ2lzdGVySGFuZGxlcnMuXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIGFjdGlvbiBuYW1lIHRvIHVuYmluZC5cbiAgICovXG4gIHVucmVnaXN0ZXJIYW5kbGVyKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsTmFtZSA9IG5hbWVzcGFjZSA/IG5hbWVzcGFjZSArIENoYXIuTkFNRVNQQUNFX0FDVElPTl9TRVBBUkFUT1IgKyBuYW1lIDogbmFtZTtcbiAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2Z1bGxOYW1lXTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiBHbG9iYWxIYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzLmdsb2JhbEhhbmRsZXJzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICB0aGlzLmdsb2JhbEhhbmRsZXJzLnNldChldmVudFR5cGUsIG5ldyBTZXQ8R2xvYmFsSGFuZGxlcj4oW2hhbmRsZXJdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2xvYmFsSGFuZGxlcnMuZ2V0KGV2ZW50VHlwZSkhLmFkZChoYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVW5yZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgdW5yZWdpc3Rlckdsb2JhbEhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IEdsb2JhbEhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxIYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgdGhpcy5nbG9iYWxIYW5kbGVycy5nZXQoZXZlbnRUeXBlKSEuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhbiBhY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW5cbiAgICogbmFtZS4gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuYW1lc3BhY2UgaGFuZGxlciwgZXZlblxuICAgKiBpZiBpdCBjYW4gbm90IHlldCBoYW5kbGUgdGhlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBBY3Rpb24gbmFtZS5cbiAgICogQHJldHVybiBXaGV0aGVyIHRoZSBuYW1lIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBzZWUgI2NhbkRpc3BhdGNoXG4gICAqL1xuICBoYXNBY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcGF0Y2hlciBjYW4gZGlzcGF0Y2ggdGhlIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGJ5XG4gICAqIGV2ZW50IHJlcGxheWVyIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGRpc3BhdGNoZXIgY2FuIHJlcGxheSBhbiBldmVudC5cbiAgICovXG4gIGNhbkRpc3BhdGNoKGV2ZW50SW5mb1dyYXBwZXI6IEV2ZW50SW5mb1dyYXBwZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpO1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvbihhY3Rpb24ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXZlbnQgcmVwbGF5ZXIsIGVuYWJsaW5nIHF1ZXVlZCBldmVudHMgdG8gYmUgcmVwbGF5ZWQgd2hlbiBhY3Rpb25zXG4gICAqIGFyZSBib3VuZC4gVG8gcmVwbGF5IGV2ZW50cywgeW91IG11c3QgcmVnaXN0ZXIgdGhlIGRpc3BhdGNoZXIgdG8gdGhlXG4gICAqIGNvbnRyYWN0IGFmdGVyIHNldHRpbmcgdGhlIGBFdmVudFJlcGxheWVyYC4gVGhlIGV2ZW50IHJlcGxheWVyIHRha2VzIGFzXG4gICAqIHBhcmFtZXRlcnMgdGhlIHF1ZXVlIG9mIGV2ZW50cyBhbmQgdGhlIGRpc3BhdGNoZXIgKHVzZWQgdG8gY2hlY2sgd2hldGhlclxuICAgKiBhY3Rpb25zIGhhdmUgaGFuZGxlcnMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIHJlcGxheWVkKS4gVGhlIGV2ZW50IHJlcGxheWVyXG4gICAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGRlcXVldWluZyBldmVudHMuXG4gICAqXG4gICAqIEV4YW1wbGU6IEFuIGV2ZW50IHJlcGxheWVyIHRoYXQgcmVwbGF5cyBvbmx5IHRoZSBsYXN0IGV2ZW50LlxuICAgKlxuICAgKiAgIGNvbnN0IGRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcigpO1xuICAgKiAgIC8vIC4uLlxuICAgKiAgIGRpc3BhdGNoZXIuc2V0RXZlbnRSZXBsYXllcigocXVldWUsIGRpc3BhdGNoZXIpID0+IHtcbiAgICogICAgIGNvbnN0IGxhc3RFdmVudEluZm9XcmFwcGVyID0gcXVldWVbcXVldWUubGVuZ3RoIC0xXTtcbiAgICogICAgIGlmIChkaXNwYXRjaGVyLmNhbkRpc3BhdGNoKGxhc3RFdmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpKSkge1xuICAgKiAgICAgICBqc2FjdGlvbi5yZXBsYXkucmVwbGF5RXZlbnQoXG4gICAqICAgICAgICAgICBsYXN0RXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCksXG4gICAqICAgICAgICk7XG4gICAqICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFJlcGxheWVyIEl0IGFsbG93cyBlbGVtZW50cyB0byBiZSByZXBsYXllZCBhbmQgZGVxdWV1aW5nLlxuICAgKi9cbiAgc2V0RXZlbnRSZXBsYXllcihldmVudFJlcGxheWVyOiBSZXBsYXllcikge1xuICAgIHRoaXMuZXZlbnRSZXBsYXllciA9IGV2ZW50UmVwbGF5ZXI7XG4gIH1cbn1cblxuLyoqIFN0b3AgcHJvcGFnYXRpb24gZm9yIGFuIGBFdmVudEluZm9gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSB7XG4gIGlmIChcbiAgICBldmVudExpYi5pc0dlY2tvICYmXG4gICAgKGV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgIGV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLnRhZ05hbWUgPT09ICdURVhUQVJFQScpICYmXG4gICAgZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudFR5cGUoKSA9PT0gRXZlbnRUeXBlLkZPQ1VTXG4gICkge1xuICAgIC8qKlxuICAgICAqIERvIG5vdGhpbmcgc2luY2Ugc3RvcHBpbmcgcHJvcGFnYXRpb24gb24gYSBmb2N1cyBldmVudCBvbiBhbiBpbnB1dFxuICAgICAqIGVsZW1lbnQgaW4gRmlyZWZveCBtYWtlcyB0aGUgdGV4dCBjdXJzb3IgZGlzYXBwZWFyOlxuICAgICAqIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTY4NFxuICAgICAqL1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50ID0gZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpO1xuICAvLyBUaGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB1c2VycyBvZiB0aGUgYERpc3BhdGNoZXJgIHdpbGwgY2FsbCBkaXNwYXRjaFxuICAvLyB3aXRoIGEgZmFrZSBldmVudCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgYHN0b3BQcm9wYWdhdGlvbmAuXG4gIGlmICghZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBkZWZlcnJlZCBmdW5jdGlvbmFsaXR5IGZvciBhbiBFdmVudENvbnRyYWN0IGFuZCBhIEpzYWN0aW9uXG4gKiBEaXNwYXRjaGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEaXNwYXRjaGVyKGV2ZW50Q29udHJhY3Q6IFVucmVuYW1lZEV2ZW50Q29udHJhY3QsIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgZXZlbnRDb250cmFjdC5lY3JkKChldmVudEluZm86IEV2ZW50SW5mbywgZ2xvYmFsRGlzcGF0Y2g/OiBib29sZWFuKSA9PiB7XG4gICAgZGlzcGF0Y2hlci5kaXNwYXRjaChldmVudEluZm8sIGdsb2JhbERpc3BhdGNoKTtcbiAgfSwgUmVzdHJpY3Rpb24uSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLKTtcbn1cbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvZGlzcGF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUEwQixNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFFcEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBZ0IxQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFtQnJCOzs7Ozs7O09BT0c7SUFDSCxZQUNtQixVQUVrQixFQUNuQyxFQUNFLGVBQWUsR0FBRyxLQUFLLEVBQ3ZCLGFBQWEsR0FBRyxTQUFTLE1BQ2dDLEVBQUU7UUFONUMsZUFBVSxHQUFWLFVBQVUsQ0FFUTtRQXhCckM7Ozs7V0FJRztRQUNjLFlBQU8sR0FBNkMsRUFBRSxDQUFDO1FBRXhFLHVFQUF1RTtRQUN0RCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBc0J0RSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUN0QyxDQUFDLGdCQUFrQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUNEO1lBQ0UsYUFBYSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELENB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QTZEO0lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFDRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxhQUFxQyxFQUFFLFVBQXNCO0lBQzlGLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUU7UUFDMUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDLEVBQUUsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Jhc2VEaXNwYXRjaGVyLCBFdmVudEluZm9XcmFwcGVySGFuZGxlcn0gZnJvbSAnLi9iYXNlX2Rpc3BhdGNoZXInO1xuaW1wb3J0IHtDaGFyfSBmcm9tICcuL2NoYXInO1xuaW1wb3J0ICogYXMgZXZlbnRMaWIgZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQge0V2ZW50SW5mbywgRXZlbnRJbmZvV3JhcHBlcn0gZnJvbSAnLi9ldmVudF9pbmZvJztcbmltcG9ydCB7RXZlbnRUeXBlfSBmcm9tICcuL2V2ZW50X3R5cGUnO1xuaW1wb3J0IHtVbnJlbmFtZWRFdmVudENvbnRyYWN0fSBmcm9tICcuL2V2ZW50Y29udHJhY3QnO1xuaW1wb3J0IHtSZXN0cmljdGlvbn0gZnJvbSAnLi9yZXN0cmljdGlvbic7XG5cbmV4cG9ydCB0eXBlIHtFdmVudEluZm9XcmFwcGVySGFuZGxlciBhcyBFdmVudEluZm9IYW5kbGVyfSBmcm9tICcuL2Jhc2VfZGlzcGF0Y2hlcic7XG5cbi8qKlxuICogQSBnbG9iYWwgaGFuZGxlciBpcyBkaXNwYXRjaGVkIHRvIGJlZm9yZSBub3JtYWwgaGFuZGxlciBkaXNwYXRjaC4gUmV0dXJuaW5nXG4gKiBmYWxzZSB3aWxsIGBwcmV2ZW50RGVmYXVsdGAgb24gdGhlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBHbG9iYWxIYW5kbGVyID0gKGV2ZW50OiBFdmVudCkgPT4gYm9vbGVhbiB8IHZvaWQ7XG5cbi8qKlxuICogQSByZXBsYXllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIHF1ZXVlZCBldmVudHMsXG4gKiBlaXRoZXIgZnJvbSB0aGUgYEV2ZW50Q29udHJhY3RgIG9yIHdoZW4gdGhlcmUgYXJlIG5vIGRldGVjdGVkIGhhbmRsZXJzLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYXllciA9IChldmVudEluZm9XcmFwcGVyczogRXZlbnRJbmZvV3JhcHBlcltdLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyKSA9PiB2b2lkO1xuXG4vKipcbiAqIFJlY2VpdmVzIGEgRE9NIGV2ZW50LCBkZXRlcm1pbmVzIHRoZSBqc2FjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJjZVxuICogZWxlbWVudCBvZiB0aGUgRE9NIGV2ZW50LCBhbmQgaW52b2tlcyB0aGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggdGhlXG4gKiBqc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERpc3BhdGNoZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VEaXNwYXRjaGVyOiBCYXNlRGlzcGF0Y2hlcjtcblxuICAvKiogV2hldGhlciB0byBzdG9wIHByb3BhZ2F0aW9uIGZvciBhbiBgRXZlbnRJbmZvYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdG9wUHJvcGFnYXRpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb25zIHRoYXQgYXJlIHJlZ2lzdGVyZWQgZm9yIHRoaXMgRGlzcGF0Y2hlciBpbnN0YW5jZS5cbiAgICogVGhpcyBzaG91bGQgYmUgdGhlIHByaW1hcnkgb25lIHVzZWQgb25jZSBtaWdyYXRpb24gb2ZmIG9mIHJlZ2lzdGVySGFuZGxlcnNcbiAgICogaXMgZG9uZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uczoge1trZXk6IHN0cmluZ106IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyfSA9IHt9O1xuXG4gIC8qKiBBIG1hcCBvZiBnbG9iYWwgZXZlbnQgaGFuZGxlcnMsIHdoZXJlIGVhY2gga2V5IGlzIGFuIGV2ZW50IHR5cGUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PEdsb2JhbEhhbmRsZXI+PigpO1xuXG4gIC8qKiBUaGUgZXZlbnQgcmVwbGF5ZXIuICovXG4gIHByaXZhdGUgZXZlbnRSZXBsYXllcj86IFJlcGxheWVyO1xuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhIERPTSBldmVudCwgZGV0ZXJtaW5lcyB0aGUganNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2VcbiAgICogZWxlbWVudCBvZiB0aGUgRE9NIGV2ZW50LCBhbmQgaW52b2tlcyB0aGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIGpzYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZ2V0SGFuZGxlciBBIGZ1bmN0aW9uIHRoYXQga25vd3MgaG93IHRvIGdldCB0aGUgaGFuZGxlciBmb3IgYVxuICAgKiAgICAgZ2l2ZW4gZXZlbnQgaW5mby5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0SGFuZGxlcj86IChcbiAgICAgIGV2ZW50SW5mb1dyYXBwZXI6IEV2ZW50SW5mb1dyYXBwZXIsXG4gICAgKSA9PiBFdmVudEluZm9XcmFwcGVySGFuZGxlciB8IHZvaWQsXG4gICAge1xuICAgICAgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UsXG4gICAgICBldmVudFJlcGxheWVyID0gdW5kZWZpbmVkLFxuICAgIH06IHtzdG9wUHJvcGFnYXRpb24/OiBib29sZWFuOyBldmVudFJlcGxheWVyPzogUmVwbGF5ZXJ9ID0ge30sXG4gICkge1xuICAgIHRoaXMuZXZlbnRSZXBsYXllciA9IGV2ZW50UmVwbGF5ZXI7XG4gICAgdGhpcy5iYXNlRGlzcGF0Y2hlciA9IG5ldyBCYXNlRGlzcGF0Y2hlcihcbiAgICAgIChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hUb0hhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudFJlcGxheWVyOiAoZXZlbnRJbmZvV3JhcHBlcnMpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50UmVwbGF5ZXI/LihldmVudEluZm9XcmFwcGVycywgdGhpcyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24gPSBzdG9wUHJvcGFnYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgYW4gZXZlbnQgb3IgdGhlIGV2ZW50IHF1ZXVlIGZyb20gdGhlIEV2ZW50Q29udHJhY3QuIFRoZSBldmVudFxuICAgKiBxdWV1ZSBpcyBjb3BpZWQgYW5kIGl0IGF0dGVtcHRzIHRvIHJlcGxheS5cbiAgICogSWYgZXZlbnQgaW5mbyBpcyBwYXNzZWQgaW4gaXQgbG9va3MgZm9yIGFuIGFjdGlvbiBoYW5kbGVyIHRoYXQgY2FuIGhhbmRsZVxuICAgKiB0aGUgZ2l2ZW4gZXZlbnQuICBJZiB0aGVyZSBpcyBubyBoYW5kbGVyIHJlZ2lzdGVyZWQgcXVldWVzIHRoZSBldmVudCBhbmRcbiAgICogY2hlY2tzIGlmIGEgbG9hZGVyIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuIElmIHNvLCBjYWxscyBpdC5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgaWYgaW4gZ2xvYmFsIGRpc3BhdGNoIG1vZGUsIGNhbGxzIGFsbCByZWdpc3RlcmVkIGdsb2JhbFxuICAgKiBoYW5kbGVycyBmb3IgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IHR5cGUuXG4gICAqXG4gICAqIFRoZSB0aHJlZSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhpcyBjYWxsIGFyZSBkZWxpYmVyYXRlbHkgbm90IHNwbGl0IGludG9cbiAgICogdGhyZWUgbWV0aG9kcyAoYW5kIHRoZW4gZGVjbGFyZWQgYXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlKSwgYmVjYXVzZSB0aGVcbiAgICogaW50ZXJmYWNlIGlzIHVzZWQgYnkgRXZlbnRDb250cmFjdCwgd2hpY2ggbGl2ZXMgaW4gYSBkaWZmZXJlbnQganNiaW5hcnkuXG4gICAqIFRoZXJlZm9yZSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHRocmVlIGlzIGRlZmluZWQgZW50aXJlbHkgaW4gdGVybXMgdGhhdFxuICAgKiBhcmUgaW52YXJpYW50IHVuZGVyIGpzY29tcGlsZXIgcHJvY2Vzc2luZyAoRnVuY3Rpb24gYW5kIEFycmF5LCBhcyBvcHBvc2VkXG4gICAqIHRvIGEgY3VzdG9tIHR5cGUgd2l0aCBtZXRob2QgbmFtZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRJbmZvIFRoZSBpbmZvIGZvciB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBjYWxsIG9yIHRoZVxuICAgKiAgICAgcXVldWUgb2YgZXZlbnRzIGZyb20gRXZlbnRDb250cmFjdC5cbiAgICovXG4gIGRpc3BhdGNoKGV2ZW50SW5mbzogRXZlbnRJbmZvLCBpc0dsb2JhbERpc3BhdGNoPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYmFzZURpc3BhdGNoZXIuZGlzcGF0Y2goZXZlbnRJbmZvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGBFdmVudEluZm9XcmFwcGVyYC5cbiAgICovXG4gIHByaXZhdGUgZGlzcGF0Y2hUb0hhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlcikge1xuICAgIGlmICh0aGlzLmdsb2JhbEhhbmRsZXJzLnNpemUpIHtcbiAgICAgIGNvbnN0IGdsb2JhbEV2ZW50SW5mb1dyYXBwZXIgPSBldmVudEluZm9XcmFwcGVyLmNsb25lKCk7XG5cbiAgICAgIC8vIEluIHNvbWUgY2FzZXMsIGBwb3B1bGF0ZUFjdGlvbmAgd2lsbCByZXdyaXRlIGBjbGlja2AgZXZlbnRzIHRvXG4gICAgICAvLyBgY2xpY2tvbmx5YC4gUmV2ZXJ0IGJhY2sgdG8gYSByZWd1bGFyIGNsaWNrLCBvdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZVxuICAgICAgLy8gdG8gZXhlY3V0ZSBnbG9iYWwgZXZlbnQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBvbiBjbGljayBldmVudHMuXG4gICAgICBpZiAoZ2xvYmFsRXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudFR5cGUoKSA9PT0gRXZlbnRUeXBlLkNMSUNLT05MWSkge1xuICAgICAgICBnbG9iYWxFdmVudEluZm9XcmFwcGVyLnNldEV2ZW50VHlwZShFdmVudFR5cGUuQ0xJQ0spO1xuICAgICAgfVxuICAgICAgLy8gU2tpcCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8ganNhY3Rpb24gaGFuZGxlcnMsIGFuZCBleGVjdXRlIHRoZSBnbG9iYWxcbiAgICAgIC8vIGhhbmRsZXJzLlxuICAgICAgY29uc3QgZXZlbnQgPSBnbG9iYWxFdmVudEluZm9XcmFwcGVyLmdldEV2ZW50KCk7XG4gICAgICBjb25zdCBldmVudFR5cGVIYW5kbGVycyA9IHRoaXMuZ2xvYmFsSGFuZGxlcnMuZ2V0KGdsb2JhbEV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCkpO1xuICAgICAgbGV0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnRUeXBlSGFuZGxlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGV2ZW50VHlwZUhhbmRsZXJzKSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIoZXZlbnQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50TGliLnByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpO1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXI6IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyIHwgdm9pZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5nZXRIYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyID0gdGhpcy5nZXRIYW5kbGVyKGV2ZW50SW5mb1dyYXBwZXIpO1xuICAgIH1cblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgaGFuZGxlciA9IHRoaXMuYWN0aW9uc1thY3Rpb24ubmFtZV07XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciB3YXMgZm91bmQuXG4gICAgdGhpcy5iYXNlRGlzcGF0Y2hlci5xdWV1ZUV2ZW50SW5mb1dyYXBwZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIG11bHRpcGxlIG1ldGhvZHMgYWxsIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdFxuICAgKiBpbnN0YW5jZS4gVGhpcyBpcyBhIGNvbW1vbiBjYXNlOiBhbiBhcHBsaWNhdGlvbiBtb2R1bGUgYmluZHNcbiAgICogbXVsdGlwbGUgb2YgaXRzIG1ldGhvZHMgdW5kZXIgcHVibGljIG5hbWVzIHRvIHRoZSBldmVudCBjb250cmFjdCBvZlxuICAgKiB0aGUgYXBwbGljYXRpb24uIFNvIHdlIHByb3ZpZGUgYSBzaG9ydGN1dCBmb3IgaXQuXG4gICAqIEF0dGVtcHRzIHRvIHJlcGxheSB0aGUgcXVldWVkIGV2ZW50cyBhZnRlciByZWdpc3RlcmluZyB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlIFRoZSBvYmplY3QgdG8gYmluZCB0aGUgbWV0aG9kcyB0by4gSWYgdGhpcyBpcyBudWxsLCB0aGVuXG4gICAqICAgICB0aGUgZnVuY3Rpb25zIGFyZSBub3QgYm91bmQsIGJ1dCBkaXJlY3RseSBhZGRlZCB1bmRlciB0aGUgcHVibGljIG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kcyBBIG1hcCBmcm9tIHB1YmxpYyBuYW1lIHRvIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgYm91bmQgdG9cbiAgICogICAgIGluc3RhbmNlIGFuZCByZWdpc3RlcmVkIGFzIGFjdGlvbiB1bmRlciB0aGUgcHVibGljIG5hbWUuIEkuZS4gdGhlXG4gICAqICAgICBwcm9wZXJ0eSBuYW1lcyBhcmUgdGhlIHB1YmxpYyBuYW1lcy4gVGhlIHByb3BlcnR5IHZhbHVlcyBhcmUgdGhlXG4gICAqICAgICBtZXRob2RzIG9mIGluc3RhbmNlLlxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudEluZm9IYW5kbGVyczxUPihcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgICBpbnN0YW5jZTogVCB8IG51bGwsXG4gICAgbWV0aG9kczoge1trZXk6IHN0cmluZ106IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyfSxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgbWV0aG9kXSBvZiBPYmplY3QuZW50cmllcyhtZXRob2RzKSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGluc3RhbmNlID8gbWV0aG9kLmJpbmQoaW5zdGFuY2UpIDogbWV0aG9kO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBJbmNsdWRlIGEgJy4nIHNlcGFyYXRvciBiZXR3ZWVuIG5hbWVzcGFjZSBuYW1lIGFuZCBhY3Rpb24gbmFtZS5cbiAgICAgICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBubyBuYW1lc3BhY2UgbmFtZSBpcyBwcm92aWRlZCwgdGhlIGpzYWN0aW9uIG5hbWVcbiAgICAgICAgLy8gY29uc2lzdHMgb2YgdGhlIGFjdGlvbiBuYW1lIG9ubHkgKG5vIHBlcmlvZCkuXG4gICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gbmFtZXNwYWNlICsgQ2hhci5OQU1FU1BBQ0VfQUNUSU9OX1NFUEFSQVRPUiArIG5hbWU7XG4gICAgICAgIHRoaXMuYWN0aW9uc1tmdWxsTmFtZV0gPSBoYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zW25hbWVdID0gaGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJhc2VEaXNwYXRjaGVyLnNjaGVkdWxlRXZlbnRSZXBsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhbiBhY3Rpb24uICBQcm92aWRlZCBhcyBhbiBlYXN5IHdheSB0byByZXZlcnNlIHRoZSBlZmZlY3RzIG9mXG4gICAqIHJlZ2lzdGVySGFuZGxlcnMuXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIGFjdGlvbiBuYW1lIHRvIHVuYmluZC5cbiAgICovXG4gIHVucmVnaXN0ZXJIYW5kbGVyKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsTmFtZSA9IG5hbWVzcGFjZSA/IG5hbWVzcGFjZSArIENoYXIuTkFNRVNQQUNFX0FDVElPTl9TRVBBUkFUT1IgKyBuYW1lIDogbmFtZTtcbiAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2Z1bGxOYW1lXTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiBHbG9iYWxIYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzLmdsb2JhbEhhbmRsZXJzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICB0aGlzLmdsb2JhbEhhbmRsZXJzLnNldChldmVudFR5cGUsIG5ldyBTZXQ8R2xvYmFsSGFuZGxlcj4oW2hhbmRsZXJdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2xvYmFsSGFuZGxlcnMuZ2V0KGV2ZW50VHlwZSkhLmFkZChoYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVW5yZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgdW5yZWdpc3Rlckdsb2JhbEhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IEdsb2JhbEhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxIYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgdGhpcy5nbG9iYWxIYW5kbGVycy5nZXQoZXZlbnRUeXBlKSEuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhbiBhY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW5cbiAgICogbmFtZS4gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuYW1lc3BhY2UgaGFuZGxlciwgZXZlblxuICAgKiBpZiBpdCBjYW4gbm90IHlldCBoYW5kbGUgdGhlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBBY3Rpb24gbmFtZS5cbiAgICogQHJldHVybiBXaGV0aGVyIHRoZSBuYW1lIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBzZWUgI2NhbkRpc3BhdGNoXG4gICAqL1xuICBoYXNBY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcGF0Y2hlciBjYW4gZGlzcGF0Y2ggdGhlIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGJ5XG4gICAqIGV2ZW50IHJlcGxheWVyIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGRpc3BhdGNoZXIgY2FuIHJlcGxheSBhbiBldmVudC5cbiAgICovXG4gIGNhbkRpc3BhdGNoKGV2ZW50SW5mb1dyYXBwZXI6IEV2ZW50SW5mb1dyYXBwZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpO1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvbihhY3Rpb24ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXZlbnQgcmVwbGF5ZXIsIGVuYWJsaW5nIHF1ZXVlZCBldmVudHMgdG8gYmUgcmVwbGF5ZWQgd2hlbiBhY3Rpb25zXG4gICAqIGFyZSBib3VuZC4gVG8gcmVwbGF5IGV2ZW50cywgeW91IG11c3QgcmVnaXN0ZXIgdGhlIGRpc3BhdGNoZXIgdG8gdGhlXG4gICAqIGNvbnRyYWN0IGFmdGVyIHNldHRpbmcgdGhlIGBFdmVudFJlcGxheWVyYC4gVGhlIGV2ZW50IHJlcGxheWVyIHRha2VzIGFzXG4gICAqIHBhcmFtZXRlcnMgdGhlIHF1ZXVlIG9mIGV2ZW50cyBhbmQgdGhlIGRpc3BhdGNoZXIgKHVzZWQgdG8gY2hlY2sgd2hldGhlclxuICAgKiBhY3Rpb25zIGhhdmUgaGFuZGxlcnMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIHJlcGxheWVkKS4gVGhlIGV2ZW50IHJlcGxheWVyXG4gICAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGRlcXVldWluZyBldmVudHMuXG4gICAqXG4gICAqIEV4YW1wbGU6IEFuIGV2ZW50IHJlcGxheWVyIHRoYXQgcmVwbGF5cyBvbmx5IHRoZSBsYXN0IGV2ZW50LlxuICAgKlxuICAgKiAgIGNvbnN0IGRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcigpO1xuICAgKiAgIC8vIC4uLlxuICAgKiAgIGRpc3BhdGNoZXIuc2V0RXZlbnRSZXBsYXllcigocXVldWUsIGRpc3BhdGNoZXIpID0+IHtcbiAgICogICAgIGNvbnN0IGxhc3RFdmVudEluZm9XcmFwcGVyID0gcXVldWVbcXVldWUubGVuZ3RoIC0xXTtcbiAgICogICAgIGlmIChkaXNwYXRjaGVyLmNhbkRpc3BhdGNoKGxhc3RFdmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpKSkge1xuICAgKiAgICAgICBqc2FjdGlvbi5yZXBsYXkucmVwbGF5RXZlbnQoXG4gICAqICAgICAgICAgICBsYXN0RXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCksXG4gICAqICAgICAgICk7XG4gICAqICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFJlcGxheWVyIEl0IGFsbG93cyBlbGVtZW50cyB0byBiZSByZXBsYXllZCBhbmQgZGVxdWV1aW5nLlxuICAgKi9cbiAgc2V0RXZlbnRSZXBsYXllcihldmVudFJlcGxheWVyOiBSZXBsYXllcikge1xuICAgIHRoaXMuZXZlbnRSZXBsYXllciA9IGV2ZW50UmVwbGF5ZXI7XG4gIH1cbn1cblxuLyoqIFN0b3AgcHJvcGFnYXRpb24gZm9yIGFuIGBFdmVudEluZm9gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSB7XG4gIGlmIChcbiAgICBldmVudExpYi5pc0dlY2tvICYmXG4gICAgKGV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgIGV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLnRhZ05hbWUgPT09ICdURVhUQVJFQScpICYmXG4gICAgZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudFR5cGUoKSA9PT0gRXZlbnRUeXBlLkZPQ1VTXG4gICkge1xuICAgIC8qKlxuICAgICAqIERvIG5vdGhpbmcgc2luY2Ugc3RvcHBpbmcgcHJvcGFnYXRpb24gb24gYSBmb2N1cyBldmVudCBvbiBhbiBpbnB1dFxuICAgICAqIGVsZW1lbnQgaW4gRmlyZWZveCBtYWtlcyB0aGUgdGV4dCBjdXJzb3IgZGlzYXBwZWFyOlxuICAgICAqIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTY4NFxuICAgICAqL1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50ID0gZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpO1xuICAvLyBUaGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB1c2VycyBvZiB0aGUgYERpc3BhdGNoZXJgIHdpbGwgY2FsbCBkaXNwYXRjaFxuICAvLyB3aXRoIGEgZmFrZSBldmVudCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgYHN0b3BQcm9wYWdhdGlvbmAuXG4gIGlmICghZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBkZWZlcnJlZCBmdW5jdGlvbmFsaXR5IGZvciBhbiBFdmVudENvbnRyYWN0IGFuZCBhIEpzYWN0aW9uXG4gKiBEaXNwYXRjaGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEaXNwYXRjaGVyKGV2ZW50Q29udHJhY3Q6IFVucmVuYW1lZEV2ZW50Q29udHJhY3QsIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgZXZlbnRDb250cmFjdC5lY3JkKChldmVudEluZm86IEV2ZW50SW5mbykgPT4ge1xuICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goZXZlbnRJbmZvKTtcbiAgfSwgUmVzdHJpY3Rpb24uSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLKTtcbn1cbiJdfQ==