@angular/core 6.0.3 → 6.0.7
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.
- package/bundles/core-testing.umd.js +61 -237
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core-testing.umd.min.js +11 -4
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +591 -2007
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +4 -32
- package/bundles/core.umd.min.js.map +1 -1
- package/core.metadata.json +1 -1
- package/esm2015/core.externs.js +3 -3
- package/esm2015/src/application_init.js +2 -9
- package/esm2015/src/application_module.js +1 -10
- package/esm2015/src/application_ref.js +15 -30
- package/esm2015/src/change_detection/change_detector_ref.js +7 -5
- package/esm2015/src/change_detection/differs/iterable_differs.js +4 -3
- package/esm2015/src/change_detection/differs/keyvalue_differs.js +4 -3
- package/esm2015/src/change_detection/pipe_transform.js +3 -6
- package/esm2015/src/console.js +0 -11
- package/esm2015/src/di/forward_ref.js +8 -6
- package/esm2015/src/di/injectable.js +1 -4
- package/esm2015/src/di/injection_token.js +6 -8
- package/esm2015/src/di/injector.js +5 -10
- package/esm2015/src/di/metadata.js +1 -16
- package/esm2015/src/di/provider.js +47 -138
- package/esm2015/src/di/reflective_errors.js +14 -7
- package/esm2015/src/di/reflective_injector.js +22 -24
- package/esm2015/src/di/reflective_provider.js +11 -12
- package/esm2015/src/error_handler.js +2 -5
- package/esm2015/src/event_emitter.js +6 -3
- package/esm2015/src/i18n/tokens.js +7 -4
- package/esm2015/src/linker/compiler.js +1 -12
- package/esm2015/src/linker/query_list.js +4 -4
- package/esm2015/src/linker/system_js_ng_module_factory_loader.js +3 -10
- package/esm2015/src/linker/view_ref.js +10 -7
- package/esm2015/src/metadata/di.js +10 -16
- package/esm2015/src/metadata/directives.js +111 -33
- package/esm2015/src/metadata/lifecycle_hooks.js +9 -9
- package/esm2015/src/metadata/ng_module.js +19 -11
- package/esm2015/src/render3/node_manipulation.js +2 -3
- package/esm2015/src/render3/view_ref.js +7 -3
- package/esm2015/src/testability/testability.js +2 -16
- package/esm2015/src/version.js +1 -1
- package/esm2015/src/view/ng_module.js +4 -1
- package/esm2015/src/zone/ng_zone.js +2 -1
- package/esm2015/testing/src/fake_async.js +5 -3
- package/esm2015/testing/src/fake_async_fallback.js +5 -3
- package/esm2015/testing/src/logger.js +0 -7
- package/esm2015/testing/src/metadata_override.js +1 -1
- package/esm2015/testing/src/ng_zone_mock.js +0 -7
- package/esm2015/testing/src/test_bed.js +1 -34
- package/esm2015/testing/src/test_compiler.js +1 -12
- package/esm5/index.js +5 -1
- package/esm5/public_api.js +6 -1
- package/esm5/src/application_init.js +3 -5
- package/esm5/src/application_module.js +2 -2
- package/esm5/src/application_ref.js +35 -211
- package/esm5/src/application_tokens.js +1 -1
- package/esm5/src/change_detection/change_detection.js +1 -1
- package/esm5/src/change_detection/change_detection_util.js +7 -72
- package/esm5/src/change_detection/change_detector_ref.js +1 -1
- package/esm5/src/change_detection/constants.js +1 -24
- package/esm5/src/change_detection/differs/default_iterable_differ.js +26 -209
- package/esm5/src/change_detection/differs/default_keyvalue_differ.js +7 -38
- package/esm5/src/change_detection/differs/iterable_differs.js +5 -42
- package/esm5/src/change_detection/differs/keyvalue_differs.js +6 -51
- package/esm5/src/change_detection/pipe_transform.js +1 -1
- package/esm5/src/change_detection.js +6 -1
- package/esm5/src/codegen_private_exports.js +1 -1
- package/esm5/src/console.js +2 -7
- package/esm5/src/core.js +6 -1
- package/esm5/src/core_private_export.js +1 -1
- package/esm5/src/core_render3_private_export.js +2 -1
- package/esm5/src/debug/debug_node.js +3 -15
- package/esm5/src/di/defs.js +1 -1
- package/esm5/src/di/forward_ref.js +7 -6
- package/esm5/src/di/injectable.js +2 -3
- package/esm5/src/di/injection_token.js +5 -83
- package/esm5/src/di/injector.js +13 -27
- package/esm5/src/di/metadata.js +1 -6
- package/esm5/src/di/provider.js +1 -1
- package/esm5/src/di/r3_injector.js +13 -39
- package/esm5/src/di/reflective_errors.js +14 -7
- package/esm5/src/di/reflective_injector.js +19 -265
- package/esm5/src/di/reflective_key.js +4 -45
- package/esm5/src/di/reflective_provider.js +17 -35
- package/esm5/src/di/scope.js +1 -1
- package/esm5/src/di.js +6 -1
- package/esm5/src/error_handler.js +7 -66
- package/esm5/src/errors.js +1 -1
- package/esm5/src/event_emitter.js +4 -95
- package/esm5/src/i18n/tokens.js +9 -49
- package/esm5/src/linker/compiler.js +9 -69
- package/esm5/src/linker/component_factory.js +2 -18
- package/esm5/src/linker/component_factory_resolver.js +1 -1
- package/esm5/src/linker/element_ref.js +2 -32
- package/esm5/src/linker/ng_module_factory.js +3 -25
- package/esm5/src/linker/ng_module_factory_loader.js +2 -10
- package/esm5/src/linker/query_list.js +12 -112
- package/esm5/src/linker/system_js_ng_module_factory_loader.js +4 -16
- package/esm5/src/linker/template_ref.js +2 -26
- package/esm5/src/linker/view_container_ref.js +2 -38
- package/esm5/src/linker/view_ref.js +10 -115
- package/esm5/src/linker.js +2 -1
- package/esm5/src/metadata/di.js +7 -25
- package/esm5/src/metadata/directives.js +111 -20
- package/esm5/src/metadata/lifecycle_hooks.js +1 -1
- package/esm5/src/metadata/ng_module.js +14 -9
- package/esm5/src/metadata/view.js +1 -20
- package/esm5/src/metadata.js +1 -1
- package/esm5/src/platform_core_providers.js +1 -1
- package/esm5/src/profile/profile.js +1 -1
- package/esm5/src/profile/wtf_impl.js +1 -1
- package/esm5/src/reflection/platform_reflection_capabilities.js +1 -1
- package/esm5/src/reflection/reflection.js +1 -1
- package/esm5/src/reflection/reflection_capabilities.js +3 -8
- package/esm5/src/reflection/reflector.js +2 -10
- package/esm5/src/reflection/types.js +1 -1
- package/esm5/src/render/api.js +7 -71
- package/esm5/src/render.js +2 -1
- package/esm5/src/render3/assert.js +1 -1
- package/esm5/src/render3/component.js +6 -5
- package/esm5/src/render3/definition.js +6 -8
- package/esm5/src/render3/di.js +9 -14
- package/esm5/src/render3/errors.js +1 -1
- package/esm5/src/render3/hooks.js +2 -2
- package/esm5/src/render3/index.js +11 -1
- package/esm5/src/render3/instructions.js +52 -38
- package/esm5/src/render3/interfaces/container.js +1 -1
- package/esm5/src/render3/interfaces/definition.js +1 -1
- package/esm5/src/render3/interfaces/injector.js +1 -1
- package/esm5/src/render3/interfaces/node.js +1 -1
- package/esm5/src/render3/interfaces/projection.js +1 -1
- package/esm5/src/render3/interfaces/query.js +1 -1
- package/esm5/src/render3/interfaces/renderer.js +1 -3
- package/esm5/src/render3/interfaces/view.js +1 -1
- package/esm5/src/render3/ng_dev_mode.js +1 -1
- package/esm5/src/render3/node_assert.js +1 -1
- package/esm5/src/render3/node_manipulation.js +12 -15
- package/esm5/src/render3/node_selector_matcher.js +2 -2
- package/esm5/src/render3/pipe.js +1 -1
- package/esm5/src/render3/pure_function.js +1 -1
- package/esm5/src/render3/query.js +11 -59
- package/esm5/src/render3/util.js +1 -1
- package/esm5/src/render3/view_ref.js +15 -345
- package/esm5/src/sanitization/html_sanitizer.js +8 -12
- package/esm5/src/sanitization/inert_body.js +8 -72
- package/esm5/src/sanitization/sanitization.js +1 -1
- package/esm5/src/sanitization/security.js +2 -37
- package/esm5/src/sanitization/style_sanitizer.js +1 -1
- package/esm5/src/sanitization/url_sanitizer.js +1 -1
- package/esm5/src/testability/testability.js +21 -143
- package/esm5/src/type.js +1 -1
- package/esm5/src/util/decorators.js +1 -1
- package/esm5/src/util/lang.js +1 -1
- package/esm5/src/util/property.js +1 -1
- package/esm5/src/util.js +6 -1
- package/esm5/src/version.js +3 -13
- package/esm5/src/view/element.js +7 -7
- package/esm5/src/view/entrypoint.js +1 -1
- package/esm5/src/view/errors.js +1 -1
- package/esm5/src/view/index.js +1 -1
- package/esm5/src/view/ng_content.js +1 -1
- package/esm5/src/view/ng_module.js +4 -1
- package/esm5/src/view/provider.js +12 -12
- package/esm5/src/view/pure_expression.js +1 -1
- package/esm5/src/view/query.js +6 -6
- package/esm5/src/view/refs.js +8 -14
- package/esm5/src/view/services.js +16 -20
- package/esm5/src/view/text.js +1 -1
- package/esm5/src/view/types.js +19 -41
- package/esm5/src/view/util.js +5 -5
- package/esm5/src/view/view.js +4 -6
- package/esm5/src/view/view_attach.js +5 -5
- package/esm5/src/zone/ng_zone.js +22 -257
- package/esm5/src/zone.js +2 -1
- package/esm5/testing/index.js +5 -1
- package/esm5/testing/public_api.js +6 -1
- package/esm5/testing/src/async.js +1 -1
- package/esm5/testing/src/async_fallback.js +1 -1
- package/esm5/testing/src/async_test_completer.js +2 -8
- package/esm5/testing/src/before_each.js +6 -1
- package/esm5/testing/src/component_fixture.js +9 -75
- package/esm5/testing/src/fake_async.js +12 -3
- package/esm5/testing/src/fake_async_fallback.js +5 -3
- package/esm5/testing/src/lang_utils.js +1 -1
- package/esm5/testing/src/logger.js +1 -1
- package/esm5/testing/src/metadata_override.js +1 -1
- package/esm5/testing/src/ng_zone_mock.js +1 -1
- package/esm5/testing/src/private_export_testing.js +1 -1
- package/esm5/testing/src/render3.js +1 -5
- package/esm5/testing/src/test_bed.js +20 -172
- package/esm5/testing/src/test_compiler.js +5 -43
- package/esm5/testing/src/testing.js +6 -1
- package/esm5/testing/src/testing_internal.js +3 -9
- package/fesm2015/core.js +248 -177
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +9 -13
- package/fesm2015/testing.js.map +1 -1
- package/fesm5/core.js +591 -2007
- package/fesm5/core.js.map +1 -1
- package/fesm5/testing.js +61 -237
- package/fesm5/testing.js.map +1 -1
- package/package.json +1 -1
- package/src/application_ref.d.ts +7 -8
- package/src/change_detection/change_detector_ref.d.ts +6 -4
- package/src/change_detection/differs/iterable_differs.d.ts +3 -2
- package/src/change_detection/differs/keyvalue_differs.d.ts +3 -2
- package/src/change_detection/pipe_transform.d.ts +2 -5
- package/src/di/forward_ref.d.ts +7 -5
- package/src/di/injectable.d.ts +4 -14
- package/src/di/injection_token.d.ts +5 -7
- package/src/di/injector.d.ts +7 -10
- package/src/di/metadata.d.ts +13 -86
- package/src/di/provider.d.ts +55 -150
- package/src/di/reflective_errors.d.ts +13 -6
- package/src/di/reflective_injector.d.ts +21 -23
- package/src/di/reflective_provider.d.ts +7 -8
- package/src/error_handler.d.ts +1 -4
- package/src/event_emitter.d.ts +3 -0
- package/src/i18n/tokens.d.ts +8 -4
- package/src/linker/query_list.d.ts +2 -2
- package/src/linker/view_ref.d.ts +9 -6
- package/src/metadata/di.d.ts +41 -59
- package/src/metadata/directives.d.ts +410 -460
- package/src/metadata/lifecycle_hooks.d.ts +8 -8
- package/src/metadata/ng_module.d.ts +49 -38
- package/src/render3/view_ref.d.ts +6 -2
- package/src/zone/ng_zone.d.ts +1 -0
- package/testing/src/fake_async.d.ts +4 -2
- package/testing/src/fake_async_fallback.d.ts +4 -2
- package/testing/src/metadata_override.d.ts +3 -3
- package/testing.d.ts +0 -5
- package/testing.metadata.json +1 -1
|
@@ -11,12 +11,10 @@ import { notImplemented } from './util';
|
|
|
11
11
|
var ViewRef = /** @class */ (function () {
|
|
12
12
|
function ViewRef(_view, context) {
|
|
13
13
|
this._view = _view;
|
|
14
|
-
this.context =
|
|
14
|
+
this.context = context;
|
|
15
15
|
}
|
|
16
16
|
/** @internal */
|
|
17
|
-
|
|
18
|
-
ViewRef.prototype._setComponentContext = /** @internal */
|
|
19
|
-
function (view, context) {
|
|
17
|
+
ViewRef.prototype._setComponentContext = function (view, context) {
|
|
20
18
|
this._view = view;
|
|
21
19
|
this.context = context;
|
|
22
20
|
};
|
|
@@ -34,7 +32,8 @@ var ViewRef = /** @class */ (function () {
|
|
|
34
32
|
*
|
|
35
33
|
* <!-- TODO: Add a link to a chapter on OnPush components -->
|
|
36
34
|
*
|
|
37
|
-
*
|
|
35
|
+
* @usageNotes
|
|
36
|
+
* ### Example
|
|
38
37
|
*
|
|
39
38
|
* ```typescript
|
|
40
39
|
* @Component({
|
|
@@ -55,73 +54,7 @@ var ViewRef = /** @class */ (function () {
|
|
|
55
54
|
* }
|
|
56
55
|
* ```
|
|
57
56
|
*/
|
|
58
|
-
|
|
59
|
-
* Marks a view and all of its ancestors dirty.
|
|
60
|
-
*
|
|
61
|
-
* It also triggers change detection by calling `scheduleTick` internally, which coalesces
|
|
62
|
-
* multiple `markForCheck` calls to into one change detection run.
|
|
63
|
-
*
|
|
64
|
-
* This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is
|
|
65
|
-
* checked when it needs to be re-rendered but the two normal triggers haven't marked it
|
|
66
|
-
* dirty (i.e. inputs haven't changed and events haven't fired in the view).
|
|
67
|
-
*
|
|
68
|
-
* <!-- TODO: Add a link to a chapter on OnPush components -->
|
|
69
|
-
*
|
|
70
|
-
* ### Example ([live demo](https://stackblitz.com/edit/angular-kx7rrw))
|
|
71
|
-
*
|
|
72
|
-
* ```typescript
|
|
73
|
-
* @Component({
|
|
74
|
-
* selector: 'my-app',
|
|
75
|
-
* template: `Number of ticks: {{numberOfTicks}}`
|
|
76
|
-
* changeDetection: ChangeDetectionStrategy.OnPush,
|
|
77
|
-
* })
|
|
78
|
-
* class AppComponent {
|
|
79
|
-
* numberOfTicks = 0;
|
|
80
|
-
*
|
|
81
|
-
* constructor(private ref: ChangeDetectorRef) {
|
|
82
|
-
* setInterval(() => {
|
|
83
|
-
* this.numberOfTicks++;
|
|
84
|
-
* // the following is required, otherwise the view will not be updated
|
|
85
|
-
* this.ref.markForCheck();
|
|
86
|
-
* }, 1000);
|
|
87
|
-
* }
|
|
88
|
-
* }
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
ViewRef.prototype.markForCheck = /**
|
|
92
|
-
* Marks a view and all of its ancestors dirty.
|
|
93
|
-
*
|
|
94
|
-
* It also triggers change detection by calling `scheduleTick` internally, which coalesces
|
|
95
|
-
* multiple `markForCheck` calls to into one change detection run.
|
|
96
|
-
*
|
|
97
|
-
* This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is
|
|
98
|
-
* checked when it needs to be re-rendered but the two normal triggers haven't marked it
|
|
99
|
-
* dirty (i.e. inputs haven't changed and events haven't fired in the view).
|
|
100
|
-
*
|
|
101
|
-
* <!-- TODO: Add a link to a chapter on OnPush components -->
|
|
102
|
-
*
|
|
103
|
-
* ### Example ([live demo](https://stackblitz.com/edit/angular-kx7rrw))
|
|
104
|
-
*
|
|
105
|
-
* ```typescript
|
|
106
|
-
* @Component({
|
|
107
|
-
* selector: 'my-app',
|
|
108
|
-
* template: `Number of ticks: {{numberOfTicks}}`
|
|
109
|
-
* changeDetection: ChangeDetectionStrategy.OnPush,
|
|
110
|
-
* })
|
|
111
|
-
* class AppComponent {
|
|
112
|
-
* numberOfTicks = 0;
|
|
113
|
-
*
|
|
114
|
-
* constructor(private ref: ChangeDetectorRef) {
|
|
115
|
-
* setInterval(() => {
|
|
116
|
-
* this.numberOfTicks++;
|
|
117
|
-
* // the following is required, otherwise the view will not be updated
|
|
118
|
-
* this.ref.markForCheck();
|
|
119
|
-
* }, 1000);
|
|
120
|
-
* }
|
|
121
|
-
* }
|
|
122
|
-
* ```
|
|
123
|
-
*/
|
|
124
|
-
function () { markViewDirty(this._view); };
|
|
57
|
+
ViewRef.prototype.markForCheck = function () { markViewDirty(this._view); };
|
|
125
58
|
/**
|
|
126
59
|
* Detaches the view from the change detection tree.
|
|
127
60
|
*
|
|
@@ -133,6 +66,7 @@ var ViewRef = /** @class */ (function () {
|
|
|
133
66
|
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
134
67
|
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
135
68
|
*
|
|
69
|
+
* @usageNotes
|
|
136
70
|
* ### Example
|
|
137
71
|
*
|
|
138
72
|
* The following example defines a component with a large list of readonly data.
|
|
@@ -174,111 +108,7 @@ var ViewRef = /** @class */ (function () {
|
|
|
174
108
|
* }
|
|
175
109
|
* ```
|
|
176
110
|
*/
|
|
177
|
-
|
|
178
|
-
* Detaches the view from the change detection tree.
|
|
179
|
-
*
|
|
180
|
-
* Detached views will not be checked during change detection runs until they are
|
|
181
|
-
* re-attached, even if they are dirty. `detach` can be used in combination with
|
|
182
|
-
* {@link ChangeDetectorRef#detectChanges detectChanges} to implement local change
|
|
183
|
-
* detection checks.
|
|
184
|
-
*
|
|
185
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
186
|
-
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
187
|
-
*
|
|
188
|
-
* ### Example
|
|
189
|
-
*
|
|
190
|
-
* The following example defines a component with a large list of readonly data.
|
|
191
|
-
* Imagine the data changes constantly, many times per second. For performance reasons,
|
|
192
|
-
* we want to check and update the list every five seconds. We can do that by detaching
|
|
193
|
-
* the component's change detector and doing a local check every five seconds.
|
|
194
|
-
*
|
|
195
|
-
* ```typescript
|
|
196
|
-
* class DataProvider {
|
|
197
|
-
* // in a real application the returned data will be different every time
|
|
198
|
-
* get data() {
|
|
199
|
-
* return [1,2,3,4,5];
|
|
200
|
-
* }
|
|
201
|
-
* }
|
|
202
|
-
*
|
|
203
|
-
* @Component({
|
|
204
|
-
* selector: 'giant-list',
|
|
205
|
-
* template: `
|
|
206
|
-
* <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
|
|
207
|
-
* `,
|
|
208
|
-
* })
|
|
209
|
-
* class GiantList {
|
|
210
|
-
* constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
|
|
211
|
-
* ref.detach();
|
|
212
|
-
* setInterval(() => {
|
|
213
|
-
* this.ref.detectChanges();
|
|
214
|
-
* }, 5000);
|
|
215
|
-
* }
|
|
216
|
-
* }
|
|
217
|
-
*
|
|
218
|
-
* @Component({
|
|
219
|
-
* selector: 'app',
|
|
220
|
-
* providers: [DataProvider],
|
|
221
|
-
* template: `
|
|
222
|
-
* <giant-list><giant-list>
|
|
223
|
-
* `,
|
|
224
|
-
* })
|
|
225
|
-
* class App {
|
|
226
|
-
* }
|
|
227
|
-
* ```
|
|
228
|
-
*/
|
|
229
|
-
ViewRef.prototype.detach = /**
|
|
230
|
-
* Detaches the view from the change detection tree.
|
|
231
|
-
*
|
|
232
|
-
* Detached views will not be checked during change detection runs until they are
|
|
233
|
-
* re-attached, even if they are dirty. `detach` can be used in combination with
|
|
234
|
-
* {@link ChangeDetectorRef#detectChanges detectChanges} to implement local change
|
|
235
|
-
* detection checks.
|
|
236
|
-
*
|
|
237
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
238
|
-
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
239
|
-
*
|
|
240
|
-
* ### Example
|
|
241
|
-
*
|
|
242
|
-
* The following example defines a component with a large list of readonly data.
|
|
243
|
-
* Imagine the data changes constantly, many times per second. For performance reasons,
|
|
244
|
-
* we want to check and update the list every five seconds. We can do that by detaching
|
|
245
|
-
* the component's change detector and doing a local check every five seconds.
|
|
246
|
-
*
|
|
247
|
-
* ```typescript
|
|
248
|
-
* class DataProvider {
|
|
249
|
-
* // in a real application the returned data will be different every time
|
|
250
|
-
* get data() {
|
|
251
|
-
* return [1,2,3,4,5];
|
|
252
|
-
* }
|
|
253
|
-
* }
|
|
254
|
-
*
|
|
255
|
-
* @Component({
|
|
256
|
-
* selector: 'giant-list',
|
|
257
|
-
* template: `
|
|
258
|
-
* <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
|
|
259
|
-
* `,
|
|
260
|
-
* })
|
|
261
|
-
* class GiantList {
|
|
262
|
-
* constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
|
|
263
|
-
* ref.detach();
|
|
264
|
-
* setInterval(() => {
|
|
265
|
-
* this.ref.detectChanges();
|
|
266
|
-
* }, 5000);
|
|
267
|
-
* }
|
|
268
|
-
* }
|
|
269
|
-
*
|
|
270
|
-
* @Component({
|
|
271
|
-
* selector: 'app',
|
|
272
|
-
* providers: [DataProvider],
|
|
273
|
-
* template: `
|
|
274
|
-
* <giant-list><giant-list>
|
|
275
|
-
* `,
|
|
276
|
-
* })
|
|
277
|
-
* class App {
|
|
278
|
-
* }
|
|
279
|
-
* ```
|
|
280
|
-
*/
|
|
281
|
-
function () { this._view.flags &= ~8 /* Attached */; };
|
|
111
|
+
ViewRef.prototype.detach = function () { this._view.flags &= ~8 /* Attached */; };
|
|
282
112
|
/**
|
|
283
113
|
* Re-attaches a view to the change detection tree.
|
|
284
114
|
*
|
|
@@ -287,7 +117,8 @@ var ViewRef = /** @class */ (function () {
|
|
|
287
117
|
*
|
|
288
118
|
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
289
119
|
*
|
|
290
|
-
*
|
|
120
|
+
* @usageNotes
|
|
121
|
+
* ### Example
|
|
291
122
|
*
|
|
292
123
|
* The following example creates a component displaying `live` data. The component will detach
|
|
293
124
|
* its change detector from the main change detector tree when the component's live property
|
|
@@ -334,117 +165,7 @@ var ViewRef = /** @class */ (function () {
|
|
|
334
165
|
* }
|
|
335
166
|
* ```
|
|
336
167
|
*/
|
|
337
|
-
|
|
338
|
-
* Re-attaches a view to the change detection tree.
|
|
339
|
-
*
|
|
340
|
-
* This can be used to re-attach views that were previously detached from the tree
|
|
341
|
-
* using {@link ChangeDetectorRef#detach detach}. Views are attached to the tree by default.
|
|
342
|
-
*
|
|
343
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
344
|
-
*
|
|
345
|
-
* ### Example ([live demo](https://stackblitz.com/edit/angular-ymgsxw))
|
|
346
|
-
*
|
|
347
|
-
* The following example creates a component displaying `live` data. The component will detach
|
|
348
|
-
* its change detector from the main change detector tree when the component's live property
|
|
349
|
-
* is set to false.
|
|
350
|
-
*
|
|
351
|
-
* ```typescript
|
|
352
|
-
* class DataProvider {
|
|
353
|
-
* data = 1;
|
|
354
|
-
*
|
|
355
|
-
* constructor() {
|
|
356
|
-
* setInterval(() => {
|
|
357
|
-
* this.data = this.data * 2;
|
|
358
|
-
* }, 500);
|
|
359
|
-
* }
|
|
360
|
-
* }
|
|
361
|
-
*
|
|
362
|
-
* @Component({
|
|
363
|
-
* selector: 'live-data',
|
|
364
|
-
* inputs: ['live'],
|
|
365
|
-
* template: 'Data: {{dataProvider.data}}'
|
|
366
|
-
* })
|
|
367
|
-
* class LiveData {
|
|
368
|
-
* constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
|
|
369
|
-
*
|
|
370
|
-
* set live(value) {
|
|
371
|
-
* if (value) {
|
|
372
|
-
* this.ref.reattach();
|
|
373
|
-
* } else {
|
|
374
|
-
* this.ref.detach();
|
|
375
|
-
* }
|
|
376
|
-
* }
|
|
377
|
-
* }
|
|
378
|
-
*
|
|
379
|
-
* @Component({
|
|
380
|
-
* selector: 'my-app',
|
|
381
|
-
* providers: [DataProvider],
|
|
382
|
-
* template: `
|
|
383
|
-
* Live Update: <input type="checkbox" [(ngModel)]="live">
|
|
384
|
-
* <live-data [live]="live"><live-data>
|
|
385
|
-
* `,
|
|
386
|
-
* })
|
|
387
|
-
* class AppComponent {
|
|
388
|
-
* live = true;
|
|
389
|
-
* }
|
|
390
|
-
* ```
|
|
391
|
-
*/
|
|
392
|
-
ViewRef.prototype.reattach = /**
|
|
393
|
-
* Re-attaches a view to the change detection tree.
|
|
394
|
-
*
|
|
395
|
-
* This can be used to re-attach views that were previously detached from the tree
|
|
396
|
-
* using {@link ChangeDetectorRef#detach detach}. Views are attached to the tree by default.
|
|
397
|
-
*
|
|
398
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
399
|
-
*
|
|
400
|
-
* ### Example ([live demo](https://stackblitz.com/edit/angular-ymgsxw))
|
|
401
|
-
*
|
|
402
|
-
* The following example creates a component displaying `live` data. The component will detach
|
|
403
|
-
* its change detector from the main change detector tree when the component's live property
|
|
404
|
-
* is set to false.
|
|
405
|
-
*
|
|
406
|
-
* ```typescript
|
|
407
|
-
* class DataProvider {
|
|
408
|
-
* data = 1;
|
|
409
|
-
*
|
|
410
|
-
* constructor() {
|
|
411
|
-
* setInterval(() => {
|
|
412
|
-
* this.data = this.data * 2;
|
|
413
|
-
* }, 500);
|
|
414
|
-
* }
|
|
415
|
-
* }
|
|
416
|
-
*
|
|
417
|
-
* @Component({
|
|
418
|
-
* selector: 'live-data',
|
|
419
|
-
* inputs: ['live'],
|
|
420
|
-
* template: 'Data: {{dataProvider.data}}'
|
|
421
|
-
* })
|
|
422
|
-
* class LiveData {
|
|
423
|
-
* constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
|
|
424
|
-
*
|
|
425
|
-
* set live(value) {
|
|
426
|
-
* if (value) {
|
|
427
|
-
* this.ref.reattach();
|
|
428
|
-
* } else {
|
|
429
|
-
* this.ref.detach();
|
|
430
|
-
* }
|
|
431
|
-
* }
|
|
432
|
-
* }
|
|
433
|
-
*
|
|
434
|
-
* @Component({
|
|
435
|
-
* selector: 'my-app',
|
|
436
|
-
* providers: [DataProvider],
|
|
437
|
-
* template: `
|
|
438
|
-
* Live Update: <input type="checkbox" [(ngModel)]="live">
|
|
439
|
-
* <live-data [live]="live"><live-data>
|
|
440
|
-
* `,
|
|
441
|
-
* })
|
|
442
|
-
* class AppComponent {
|
|
443
|
-
* live = true;
|
|
444
|
-
* }
|
|
445
|
-
* ```
|
|
446
|
-
*/
|
|
447
|
-
function () { this._view.flags |= 8 /* Attached */; };
|
|
168
|
+
ViewRef.prototype.reattach = function () { this._view.flags |= 8 /* Attached */; };
|
|
448
169
|
/**
|
|
449
170
|
* Checks the view and its children.
|
|
450
171
|
*
|
|
@@ -454,6 +175,7 @@ var ViewRef = /** @class */ (function () {
|
|
|
454
175
|
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
455
176
|
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
456
177
|
*
|
|
178
|
+
* @usageNotes
|
|
457
179
|
* ### Example
|
|
458
180
|
*
|
|
459
181
|
* The following example defines a component with a large list of readonly data.
|
|
@@ -465,66 +187,14 @@ var ViewRef = /** @class */ (function () {
|
|
|
465
187
|
*
|
|
466
188
|
* See {@link ChangeDetectorRef#detach detach} for more information.
|
|
467
189
|
*/
|
|
468
|
-
|
|
469
|
-
* Checks the view and its children.
|
|
470
|
-
*
|
|
471
|
-
* This can also be used in combination with {@link ChangeDetectorRef#detach detach} to implement
|
|
472
|
-
* local change detection checks.
|
|
473
|
-
*
|
|
474
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
475
|
-
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
476
|
-
*
|
|
477
|
-
* ### Example
|
|
478
|
-
*
|
|
479
|
-
* The following example defines a component with a large list of readonly data.
|
|
480
|
-
* Imagine, the data changes constantly, many times per second. For performance reasons,
|
|
481
|
-
* we want to check and update the list every five seconds.
|
|
482
|
-
*
|
|
483
|
-
* We can do that by detaching the component's change detector and doing a local change detection
|
|
484
|
-
* check every five seconds.
|
|
485
|
-
*
|
|
486
|
-
* See {@link ChangeDetectorRef#detach detach} for more information.
|
|
487
|
-
*/
|
|
488
|
-
ViewRef.prototype.detectChanges = /**
|
|
489
|
-
* Checks the view and its children.
|
|
490
|
-
*
|
|
491
|
-
* This can also be used in combination with {@link ChangeDetectorRef#detach detach} to implement
|
|
492
|
-
* local change detection checks.
|
|
493
|
-
*
|
|
494
|
-
* <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
|
|
495
|
-
* <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
|
|
496
|
-
*
|
|
497
|
-
* ### Example
|
|
498
|
-
*
|
|
499
|
-
* The following example defines a component with a large list of readonly data.
|
|
500
|
-
* Imagine, the data changes constantly, many times per second. For performance reasons,
|
|
501
|
-
* we want to check and update the list every five seconds.
|
|
502
|
-
*
|
|
503
|
-
* We can do that by detaching the component's change detector and doing a local change detection
|
|
504
|
-
* check every five seconds.
|
|
505
|
-
*
|
|
506
|
-
* See {@link ChangeDetectorRef#detach detach} for more information.
|
|
507
|
-
*/
|
|
508
|
-
function () { detectChanges(this.context); };
|
|
190
|
+
ViewRef.prototype.detectChanges = function () { detectChanges(this.context); };
|
|
509
191
|
/**
|
|
510
192
|
* Checks the change detector and its children, and throws if any changes are detected.
|
|
511
193
|
*
|
|
512
194
|
* This is used in development mode to verify that running change detection doesn't
|
|
513
195
|
* introduce other changes.
|
|
514
196
|
*/
|
|
515
|
-
|
|
516
|
-
* Checks the change detector and its children, and throws if any changes are detected.
|
|
517
|
-
*
|
|
518
|
-
* This is used in development mode to verify that running change detection doesn't
|
|
519
|
-
* introduce other changes.
|
|
520
|
-
*/
|
|
521
|
-
ViewRef.prototype.checkNoChanges = /**
|
|
522
|
-
* Checks the change detector and its children, and throws if any changes are detected.
|
|
523
|
-
*
|
|
524
|
-
* This is used in development mode to verify that running change detection doesn't
|
|
525
|
-
* introduce other changes.
|
|
526
|
-
*/
|
|
527
|
-
function () { checkNoChanges(this.context); };
|
|
197
|
+
ViewRef.prototype.checkNoChanges = function () { checkNoChanges(this.context); };
|
|
528
198
|
return ViewRef;
|
|
529
199
|
}());
|
|
530
200
|
export { ViewRef };
|
|
@@ -546,7 +216,7 @@ export { EmbeddedViewRef };
|
|
|
546
216
|
*/
|
|
547
217
|
export function createViewRef(view, context) {
|
|
548
218
|
// TODO: add detectChanges back in when implementing ChangeDetectorRef.detectChanges
|
|
549
|
-
return addDestroyable(new ViewRef(
|
|
219
|
+
return addDestroyable(new ViewRef(view, context));
|
|
550
220
|
}
|
|
551
221
|
/**
|
|
552
222
|
* Decorates an object with destroy logic (implementing the DestroyRef interface)
|
|
@@ -566,4 +236,4 @@ export function addDestroyable(obj) {
|
|
|
566
236
|
return obj;
|
|
567
237
|
}
|
|
568
238
|
|
|
569
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3ZpZXdfcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUEsT0FBTyxFQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUV0QyxJQUFBO0lBSUUsaUJBQW9CLEtBQVksRUFBRSxPQUFlO1FBQTdCLFVBQUssR0FBTCxLQUFLLENBQU87UUFBdUIsSUFBSSxDQUFDLE9BQU8sSUFBRyxPQUFTLENBQUEsQ0FBQztLQUFFO0lBRWxGLGdCQUFnQjs7SUFDaEIsc0NBQW9CO0lBQXBCLFVBQXFCLElBQVcsRUFBRSxPQUFVO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0tBQ3hCO0lBRUQseUJBQU8sR0FBUCxjQUFrQixjQUFjLEVBQUUsQ0FBQyxFQUFFO0lBRXJDLDJCQUFTLEdBQVQsVUFBVSxRQUFrQixJQUFJLGNBQWMsRUFBRSxDQUFDLEVBQUU7SUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BZ0NHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0gsOEJBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFaLGNBQXVCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbURHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUNILHdCQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQU4sY0FBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksaUJBQW9CLENBQUMsRUFBRTtJQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0RHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUNILDBCQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQVIsY0FBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG9CQUF1QixDQUFDLEVBQUU7SUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUNILCtCQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFiLGNBQXdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtJQUV0RDs7Ozs7T0FLRzs7Ozs7OztJQUNILGdDQUFjOzs7Ozs7SUFBZCxjQUF5QixjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7a0JBOU0xRDtJQStNQyxDQUFBO0FBL0xELG1CQStMQztBQUdELElBQUE7SUFBd0MsMkNBQVU7SUFNaEQseUJBQVksUUFBbUIsRUFBRSxRQUE4QixFQUFFLE9BQVU7UUFBM0UsWUFDRSxrQkFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUU5QjtRQURDLEtBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDOztLQUM1QjswQkEzTkg7RUFrTndDLE9BQU8sRUFVOUMsQ0FBQTtBQVZELDJCQVVDOzs7Ozs7O0FBUUQsTUFBTSx3QkFBMkIsSUFBa0IsRUFBRSxPQUFVOztJQUU3RCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUEsSUFBTSxDQUFBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUNyRDs7Ozs7Ozs7QUFtQkQsTUFBTSx5QkFBK0IsR0FBUTtJQUMzQyxJQUFJLFNBQVMsR0FBb0IsSUFBSSxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxPQUFPLEdBQUc7UUFDWixTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQUUsSUFBSyxPQUFBLEVBQUUsRUFBRSxFQUFKLENBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0tBQ3ZCLENBQUM7SUFDRixHQUFHLENBQUMsU0FBUyxHQUFHLFVBQUMsRUFBWSxJQUFLLE9BQUEsQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQXhDLENBQXdDLENBQUM7SUFDM0UsTUFBTSxDQUFDLEdBQUcsQ0FBQztDQUNaIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0VtYmVkZGVkVmlld1JlZiBhcyB2aWV3RW5naW5lX0VtYmVkZGVkVmlld1JlZn0gZnJvbSAnLi4vbGlua2VyL3ZpZXdfcmVmJztcblxuaW1wb3J0IHtjaGVja05vQ2hhbmdlcywgZGV0ZWN0Q2hhbmdlcywgbWFya1ZpZXdEaXJ0eX0gZnJvbSAnLi9pbnN0cnVjdGlvbnMnO1xuaW1wb3J0IHtDb21wb25lbnRUZW1wbGF0ZX0gZnJvbSAnLi9pbnRlcmZhY2VzL2RlZmluaXRpb24nO1xuaW1wb3J0IHtMVmlld05vZGV9IGZyb20gJy4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7TFZpZXcsIExWaWV3RmxhZ3N9IGZyb20gJy4vaW50ZXJmYWNlcy92aWV3JztcbmltcG9ydCB7bm90SW1wbGVtZW50ZWR9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UmVmPFQ+IGltcGxlbWVudHMgdmlld0VuZ2luZV9FbWJlZGRlZFZpZXdSZWY8VD4ge1xuICBjb250ZXh0OiBUO1xuICByb290Tm9kZXM6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZpZXc6IExWaWV3LCBjb250ZXh0OiBUfG51bGwsICkgeyB0aGlzLmNvbnRleHQgPSBjb250ZXh0ICE7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9zZXRDb21wb25lbnRDb250ZXh0KHZpZXc6IExWaWV3LCBjb250ZXh0OiBUKSB7XG4gICAgdGhpcy5fdmlldyA9IHZpZXc7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7IG5vdEltcGxlbWVudGVkKCk7IH1cbiAgZGVzdHJveWVkOiBib29sZWFuO1xuICBvbkRlc3Ryb3koY2FsbGJhY2s6IEZ1bmN0aW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH1cblxuICAvKipcbiAgICogTWFya3MgYSB2aWV3IGFuZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyBkaXJ0eS5cbiAgICpcbiAgICogSXQgYWxzbyB0cmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uIGJ5IGNhbGxpbmcgYHNjaGVkdWxlVGlja2AgaW50ZXJuYWxseSwgd2hpY2ggY29hbGVzY2VzXG4gICAqIG11bHRpcGxlIGBtYXJrRm9yQ2hlY2tgIGNhbGxzIHRvIGludG8gb25lIGNoYW5nZSBkZXRlY3Rpb24gcnVuLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSBhbiB7QGxpbmsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kjT25QdXNoIE9uUHVzaH0gY29tcG9uZW50IGlzXG4gICAqIGNoZWNrZWQgd2hlbiBpdCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZCBidXQgdGhlIHR3byBub3JtYWwgdHJpZ2dlcnMgaGF2ZW4ndCBtYXJrZWQgaXRcbiAgICogZGlydHkgKGkuZS4gaW5wdXRzIGhhdmVuJ3QgY2hhbmdlZCBhbmQgZXZlbnRzIGhhdmVuJ3QgZmlyZWQgaW4gdGhlIHZpZXcpLlxuICAgKlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpbmsgdG8gYSBjaGFwdGVyIG9uIE9uUHVzaCBjb21wb25lbnRzIC0tPlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZSAoW2xpdmUgZGVtb10oaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2FuZ3VsYXIta3g3cnJ3KSlcbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBAQ29tcG9uZW50KHtcbiAgICogICBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAqICAgdGVtcGxhdGU6IGBOdW1iZXIgb2YgdGlja3M6IHt7bnVtYmVyT2ZUaWNrc319YFxuICAgKiAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgKiB9KVxuICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgKiAgIG51bWJlck9mVGlja3MgPSAwO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgKiAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgKiAgICAgICB0aGlzLm51bWJlck9mVGlja3MrKztcbiAgICogICAgICAgLy8gdGhlIGZvbGxvd2luZyBpcyByZXF1aXJlZCwgb3RoZXJ3aXNlIHRoZSB2aWV3IHdpbGwgbm90IGJlIHVwZGF0ZWRcbiAgICogICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAqICAgICB9LCAxMDAwKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBtYXJrRm9yQ2hlY2soKTogdm9pZCB7IG1hcmtWaWV3RGlydHkodGhpcy5fdmlldyk7IH1cblxuICAvKipcbiAgICogRGV0YWNoZXMgdGhlIHZpZXcgZnJvbSB0aGUgY2hhbmdlIGRldGVjdGlvbiB0cmVlLlxuICAgKlxuICAgKiBEZXRhY2hlZCB2aWV3cyB3aWxsIG5vdCBiZSBjaGVja2VkIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uIHJ1bnMgdW50aWwgdGhleSBhcmVcbiAgICogcmUtYXR0YWNoZWQsIGV2ZW4gaWYgdGhleSBhcmUgZGlydHkuIGBkZXRhY2hgIGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGhcbiAgICoge0BsaW5rIENoYW5nZURldGVjdG9yUmVmI2RldGVjdENoYW5nZXMgZGV0ZWN0Q2hhbmdlc30gdG8gaW1wbGVtZW50IGxvY2FsIGNoYW5nZVxuICAgKiBkZXRlY3Rpb24gY2hlY2tzLlxuICAgKlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpbmsgdG8gYSBjaGFwdGVyIG9uIGRldGFjaC9yZWF0dGFjaC9sb2NhbCBkaWdlc3QgLS0+XG4gICAqIDwhLS0gVE9ETzogQWRkIGEgbGl2ZSBkZW1vIG9uY2UgcmVmLmRldGVjdENoYW5nZXMgaXMgbWVyZ2VkIGludG8gbWFzdGVyIC0tPlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVmaW5lcyBhIGNvbXBvbmVudCB3aXRoIGEgbGFyZ2UgbGlzdCBvZiByZWFkb25seSBkYXRhLlxuICAgKiBJbWFnaW5lIHRoZSBkYXRhIGNoYW5nZXMgY29uc3RhbnRseSwgbWFueSB0aW1lcyBwZXIgc2Vjb25kLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyxcbiAgICogd2Ugd2FudCB0byBjaGVjayBhbmQgdXBkYXRlIHRoZSBsaXN0IGV2ZXJ5IGZpdmUgc2Vjb25kcy4gV2UgY2FuIGRvIHRoYXQgYnkgZGV0YWNoaW5nXG4gICAqIHRoZSBjb21wb25lbnQncyBjaGFuZ2UgZGV0ZWN0b3IgYW5kIGRvaW5nIGEgbG9jYWwgY2hlY2sgZXZlcnkgZml2ZSBzZWNvbmRzLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNsYXNzIERhdGFQcm92aWRlciB7XG4gICAqICAgLy8gaW4gYSByZWFsIGFwcGxpY2F0aW9uIHRoZSByZXR1cm5lZCBkYXRhIHdpbGwgYmUgZGlmZmVyZW50IGV2ZXJ5IHRpbWVcbiAgICogICBnZXQgZGF0YSgpIHtcbiAgICogICAgIHJldHVybiBbMSwyLDMsNCw1XTtcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQENvbXBvbmVudCh7XG4gICAqICAgc2VsZWN0b3I6ICdnaWFudC1saXN0JyxcbiAgICogICB0ZW1wbGF0ZTogYFxuICAgKiAgICAgPGxpICpuZ0Zvcj1cImxldCBkIG9mIGRhdGFQcm92aWRlci5kYXRhXCI+RGF0YSB7e2R9fTwvbGk+XG4gICAqICAgYCxcbiAgICogfSlcbiAgICogY2xhc3MgR2lhbnRMaXN0IHtcbiAgICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGF0YVByb3ZpZGVyOiBEYXRhUHJvdmlkZXIpIHtcbiAgICogICAgIHJlZi5kZXRhY2goKTtcbiAgICogICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICogICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgKiAgICAgfSwgNTAwMCk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBDb21wb25lbnQoe1xuICAgKiAgIHNlbGVjdG9yOiAnYXBwJyxcbiAgICogICBwcm92aWRlcnM6IFtEYXRhUHJvdmlkZXJdLFxuICAgKiAgIHRlbXBsYXRlOiBgXG4gICAqICAgICA8Z2lhbnQtbGlzdD48Z2lhbnQtbGlzdD5cbiAgICogICBgLFxuICAgKiB9KVxuICAgKiBjbGFzcyBBcHAge1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZGV0YWNoKCk6IHZvaWQgeyB0aGlzLl92aWV3LmZsYWdzICY9IH5MVmlld0ZsYWdzLkF0dGFjaGVkOyB9XG5cbiAgLyoqXG4gICAqIFJlLWF0dGFjaGVzIGEgdmlldyB0byB0aGUgY2hhbmdlIGRldGVjdGlvbiB0cmVlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlLWF0dGFjaCB2aWV3cyB0aGF0IHdlcmUgcHJldmlvdXNseSBkZXRhY2hlZCBmcm9tIHRoZSB0cmVlXG4gICAqIHVzaW5nIHtAbGluayBDaGFuZ2VEZXRlY3RvclJlZiNkZXRhY2ggZGV0YWNofS4gVmlld3MgYXJlIGF0dGFjaGVkIHRvIHRoZSB0cmVlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIDwhLS0gVE9ETzogQWRkIGEgbGluayB0byBhIGNoYXB0ZXIgb24gZGV0YWNoL3JlYXR0YWNoL2xvY2FsIGRpZ2VzdCAtLT5cbiAgICpcbiAgICogIyMjIEV4YW1wbGUgKFtsaXZlIGRlbW9dKGh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9hbmd1bGFyLXltZ3N4dykpXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgY29tcG9uZW50IGRpc3BsYXlpbmcgYGxpdmVgIGRhdGEuIFRoZSBjb21wb25lbnQgd2lsbCBkZXRhY2hcbiAgICogaXRzIGNoYW5nZSBkZXRlY3RvciBmcm9tIHRoZSBtYWluIGNoYW5nZSBkZXRlY3RvciB0cmVlIHdoZW4gdGhlIGNvbXBvbmVudCdzIGxpdmUgcHJvcGVydHlcbiAgICogaXMgc2V0IHRvIGZhbHNlLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNsYXNzIERhdGFQcm92aWRlciB7XG4gICAqICAgZGF0YSA9IDE7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAqICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAqICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YSAqIDI7XG4gICAqICAgICB9LCA1MDApO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAQ29tcG9uZW50KHtcbiAgICogICBzZWxlY3RvcjogJ2xpdmUtZGF0YScsXG4gICAqICAgaW5wdXRzOiBbJ2xpdmUnXSxcbiAgICogICB0ZW1wbGF0ZTogJ0RhdGE6IHt7ZGF0YVByb3ZpZGVyLmRhdGF9fSdcbiAgICogfSlcbiAgICogY2xhc3MgTGl2ZURhdGEge1xuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkYXRhUHJvdmlkZXI6IERhdGFQcm92aWRlcikge31cbiAgICpcbiAgICogICBzZXQgbGl2ZSh2YWx1ZSkge1xuICAgKiAgICAgaWYgKHZhbHVlKSB7XG4gICAqICAgICAgIHRoaXMucmVmLnJlYXR0YWNoKCk7XG4gICAqICAgICB9IGVsc2Uge1xuICAgKiAgICAgICB0aGlzLnJlZi5kZXRhY2goKTtcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQENvbXBvbmVudCh7XG4gICAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgKiAgIHByb3ZpZGVyczogW0RhdGFQcm92aWRlcl0sXG4gICAqICAgdGVtcGxhdGU6IGBcbiAgICogICAgIExpdmUgVXBkYXRlOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaXZlXCI+XG4gICAqICAgICA8bGl2ZS1kYXRhIFtsaXZlXT1cImxpdmVcIj48bGl2ZS1kYXRhPlxuICAgKiAgIGAsXG4gICAqIH0pXG4gICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAqICAgbGl2ZSA9IHRydWU7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICByZWF0dGFjaCgpOiB2b2lkIHsgdGhpcy5fdmlldy5mbGFncyB8PSBMVmlld0ZsYWdzLkF0dGFjaGVkOyB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgdmlldyBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB7QGxpbmsgQ2hhbmdlRGV0ZWN0b3JSZWYjZGV0YWNoIGRldGFjaH0gdG8gaW1wbGVtZW50XG4gICAqIGxvY2FsIGNoYW5nZSBkZXRlY3Rpb24gY2hlY2tzLlxuICAgKlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpbmsgdG8gYSBjaGFwdGVyIG9uIGRldGFjaC9yZWF0dGFjaC9sb2NhbCBkaWdlc3QgLS0+XG4gICAqIDwhLS0gVE9ETzogQWRkIGEgbGl2ZSBkZW1vIG9uY2UgcmVmLmRldGVjdENoYW5nZXMgaXMgbWVyZ2VkIGludG8gbWFzdGVyIC0tPlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVmaW5lcyBhIGNvbXBvbmVudCB3aXRoIGEgbGFyZ2UgbGlzdCBvZiByZWFkb25seSBkYXRhLlxuICAgKiBJbWFnaW5lLCB0aGUgZGF0YSBjaGFuZ2VzIGNvbnN0YW50bHksIG1hbnkgdGltZXMgcGVyIHNlY29uZC4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsXG4gICAqIHdlIHdhbnQgdG8gY2hlY2sgYW5kIHVwZGF0ZSB0aGUgbGlzdCBldmVyeSBmaXZlIHNlY29uZHMuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGF0IGJ5IGRldGFjaGluZyB0aGUgY29tcG9uZW50J3MgY2hhbmdlIGRldGVjdG9yIGFuZCBkb2luZyBhIGxvY2FsIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogY2hlY2sgZXZlcnkgZml2ZSBzZWNvbmRzLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIENoYW5nZURldGVjdG9yUmVmI2RldGFjaCBkZXRhY2h9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHsgZGV0ZWN0Q2hhbmdlcyh0aGlzLmNvbnRleHQpOyB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY2hhbmdlIGRldGVjdG9yIGFuZCBpdHMgY2hpbGRyZW4sIGFuZCB0aHJvd3MgaWYgYW55IGNoYW5nZXMgYXJlIGRldGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZSB0byB2ZXJpZnkgdGhhdCBydW5uaW5nIGNoYW5nZSBkZXRlY3Rpb24gZG9lc24ndFxuICAgKiBpbnRyb2R1Y2Ugb3RoZXIgY2hhbmdlcy5cbiAgICovXG4gIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQgeyBjaGVja05vQ2hhbmdlcyh0aGlzLmNvbnRleHQpOyB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEVtYmVkZGVkVmlld1JlZjxUPiBleHRlbmRzIFZpZXdSZWY8VD4ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfbFZpZXdOb2RlOiBMVmlld05vZGU7XG5cbiAgY29uc3RydWN0b3Iodmlld05vZGU6IExWaWV3Tm9kZSwgdGVtcGxhdGU6IENvbXBvbmVudFRlbXBsYXRlPFQ+LCBjb250ZXh0OiBUKSB7XG4gICAgc3VwZXIodmlld05vZGUuZGF0YSwgY29udGV4dCk7XG4gICAgdGhpcy5fbFZpZXdOb2RlID0gdmlld05vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVmlld1JlZiBidW5kbGVkIHdpdGggZGVzdHJveSBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGlzIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBWaWV3UmVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaWV3UmVmPFQ+KHZpZXc6IExWaWV3IHwgbnVsbCwgY29udGV4dDogVCk6IFZpZXdSZWY8VD4ge1xuICAvLyBUT0RPOiBhZGQgZGV0ZWN0Q2hhbmdlcyBiYWNrIGluIHdoZW4gaW1wbGVtZW50aW5nIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXNcbiAgcmV0dXJuIGFkZERlc3Ryb3lhYmxlKG5ldyBWaWV3UmVmKHZpZXcgISwgY29udGV4dCkpO1xufVxuXG4vKiogSW50ZXJmYWNlIGZvciBkZXN0cm95IGxvZ2ljLiBJbXBsZW1lbnRlZCBieSBhZGREZXN0cm95YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVJlZjxUPiB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBoYXMgYmVlbiBkZXN0cm95ZWQgKi9cbiAgZGVzdHJveWVkOiBib29sZWFuO1xuICAvKiogRGVzdHJveSB0aGUgaW5zdGFuY2UgYW5kIGNhbGwgYWxsIG9uRGVzdHJveSBjYWxsYmFja3MuICovXG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgb25EZXN0cm95ICovXG4gIG9uRGVzdHJveShjYjogRnVuY3Rpb24pOiB2b2lkO1xufVxuXG4vKipcbiAqIERlY29yYXRlcyBhbiBvYmplY3Qgd2l0aCBkZXN0cm95IGxvZ2ljIChpbXBsZW1lbnRpbmcgdGhlIERlc3Ryb3lSZWYgaW50ZXJmYWNlKVxuICogYW5kIHJldHVybnMgdGhlIGVuaGFuY2VkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gZGVjb3JhdGVcbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBkZXN0cm95IGxvZ2ljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZXN0cm95YWJsZTxULCBDPihvYmo6IGFueSk6IFQmRGVzdHJveVJlZjxDPiB7XG4gIGxldCBkZXN0cm95Rm46IEZ1bmN0aW9uW118bnVsbCA9IG51bGw7XG4gIG9iai5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgb2JqLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgICBkZXN0cm95Rm4gJiYgZGVzdHJveUZuLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gIH07XG4gIG9iai5vbkRlc3Ryb3kgPSAoZm46IEZ1bmN0aW9uKSA9PiAoZGVzdHJveUZuIHx8IChkZXN0cm95Rm4gPSBbXSkpLnB1c2goZm4pO1xuICByZXR1cm4gb2JqO1xufVxuIl19
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3ZpZXdfcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFJSCxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUk1RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXRDO0lBSUUsaUJBQW9CLEtBQVksRUFBRSxPQUFlO1FBQTdCLFVBQUssR0FBTCxLQUFLLENBQU87UUFBdUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFTLENBQUM7SUFBQyxDQUFDO0lBRWxGLGdCQUFnQjtJQUNoQixzQ0FBb0IsR0FBcEIsVUFBcUIsSUFBVyxFQUFFLE9BQVU7UUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELHlCQUFPLEdBQVAsY0FBa0IsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJDLDJCQUFTLEdBQVQsVUFBVSxRQUFrQixJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUNHO0lBQ0gsOEJBQVksR0FBWixjQUF1QixhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9ERztJQUNILHdCQUFNLEdBQU4sY0FBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksaUJBQW9CLENBQUMsQ0FBQyxDQUFDO0lBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdURHO0lBQ0gsMEJBQVEsR0FBUixjQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssb0JBQXVCLENBQUMsQ0FBQyxDQUFDO0lBRTdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILCtCQUFhLEdBQWIsY0FBd0IsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEQ7Ozs7O09BS0c7SUFDSCxnQ0FBYyxHQUFkLGNBQXlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELGNBQUM7QUFBRCxDQUFDLEFBbk1ELElBbU1DOztBQUdEO0lBQXdDLDJDQUFVO0lBTWhELHlCQUFZLFFBQW1CLEVBQUUsUUFBOEIsRUFBRSxPQUFVO1FBQTNFLFlBQ0Usa0JBQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsU0FFOUI7UUFEQyxLQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQzs7SUFDN0IsQ0FBQztJQUNILHNCQUFDO0FBQUQsQ0FBQyxBQVZELENBQXdDLE9BQU8sR0FVOUM7O0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLHdCQUEyQixJQUFrQixFQUFFLE9BQVU7SUFDN0Qsb0ZBQW9GO0lBQ3BGLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQVlEOzs7Ozs7R0FNRztBQUNILE1BQU0seUJBQStCLEdBQVE7SUFDM0MsSUFBSSxTQUFTLEdBQW9CLElBQUksQ0FBQztJQUN0QyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixHQUFHLENBQUMsT0FBTyxHQUFHO1FBQ1osU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFFLElBQUssT0FBQSxFQUFFLEVBQUUsRUFBSixDQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsU0FBUyxHQUFHLFVBQUMsRUFBWSxJQUFLLE9BQUEsQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQXhDLENBQXdDLENBQUM7SUFDM0UsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RW1iZWRkZWRWaWV3UmVmIGFzIHZpZXdFbmdpbmVfRW1iZWRkZWRWaWV3UmVmfSBmcm9tICcuLi9saW5rZXIvdmlld19yZWYnO1xuXG5pbXBvcnQge2NoZWNrTm9DaGFuZ2VzLCBkZXRlY3RDaGFuZ2VzLCBtYXJrVmlld0RpcnR5fSBmcm9tICcuL2luc3RydWN0aW9ucyc7XG5pbXBvcnQge0NvbXBvbmVudFRlbXBsYXRlfSBmcm9tICcuL2ludGVyZmFjZXMvZGVmaW5pdGlvbic7XG5pbXBvcnQge0xWaWV3Tm9kZX0gZnJvbSAnLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHtMVmlldywgTFZpZXdGbGFnc30gZnJvbSAnLi9pbnRlcmZhY2VzL3ZpZXcnO1xuaW1wb3J0IHtub3RJbXBsZW1lbnRlZH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGNsYXNzIFZpZXdSZWY8VD4gaW1wbGVtZW50cyB2aWV3RW5naW5lX0VtYmVkZGVkVmlld1JlZjxUPiB7XG4gIGNvbnRleHQ6IFQ7XG4gIHJvb3ROb2RlczogYW55W107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdmlldzogTFZpZXcsIGNvbnRleHQ6IFR8bnVsbCwgKSB7IHRoaXMuY29udGV4dCA9IGNvbnRleHQgITsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3NldENvbXBvbmVudENvbnRleHQodmlldzogTFZpZXcsIGNvbnRleHQ6IFQpIHtcbiAgICB0aGlzLl92aWV3ID0gdmlldztcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHsgbm90SW1wbGVtZW50ZWQoKTsgfVxuICBkZXN0cm95ZWQ6IGJvb2xlYW47XG4gIG9uRGVzdHJveShjYWxsYmFjazogRnVuY3Rpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyBhIHZpZXcgYW5kIGFsbCBvZiBpdHMgYW5jZXN0b3JzIGRpcnR5LlxuICAgKlxuICAgKiBJdCBhbHNvIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24gYnkgY2FsbGluZyBgc2NoZWR1bGVUaWNrYCBpbnRlcm5hbGx5LCB3aGljaCBjb2FsZXNjZXNcbiAgICogbXVsdGlwbGUgYG1hcmtGb3JDaGVja2AgY2FsbHMgdG8gaW50byBvbmUgY2hhbmdlIGRldGVjdGlvbiBydW4uXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5zdXJlIGFuIHtAbGluayBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSNPblB1c2ggT25QdXNofSBjb21wb25lbnQgaXNcbiAgICogY2hlY2tlZCB3aGVuIGl0IG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkIGJ1dCB0aGUgdHdvIG5vcm1hbCB0cmlnZ2VycyBoYXZlbid0IG1hcmtlZCBpdFxuICAgKiBkaXJ0eSAoaS5lLiBpbnB1dHMgaGF2ZW4ndCBjaGFuZ2VkIGFuZCBldmVudHMgaGF2ZW4ndCBmaXJlZCBpbiB0aGUgdmlldykuXG4gICAqXG4gICAqIDwhLS0gVE9ETzogQWRkIGEgbGluayB0byBhIGNoYXB0ZXIgb24gT25QdXNoIGNvbXBvbmVudHMgLS0+XG4gICAqXG4gICAqIEB1c2FnZU5vdGVzXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogQENvbXBvbmVudCh7XG4gICAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgKiAgIHRlbXBsYXRlOiBgTnVtYmVyIG9mIHRpY2tzOiB7e251bWJlck9mVGlja3N9fWBcbiAgICogICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICogfSlcbiAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICogICBudW1iZXJPZlRpY2tzID0gMDtcbiAgICpcbiAgICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICogICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICogICAgICAgdGhpcy5udW1iZXJPZlRpY2tzKys7XG4gICAqICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgcmVxdWlyZWQsIG90aGVyd2lzZSB0aGUgdmlldyB3aWxsIG5vdCBiZSB1cGRhdGVkXG4gICAqICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgKiAgICAgfSwgMTAwMCk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgbWFya0ZvckNoZWNrKCk6IHZvaWQgeyBtYXJrVmlld0RpcnR5KHRoaXMuX3ZpZXcpOyB9XG5cbiAgLyoqXG4gICAqIERldGFjaGVzIHRoZSB2aWV3IGZyb20gdGhlIGNoYW5nZSBkZXRlY3Rpb24gdHJlZS5cbiAgICpcbiAgICogRGV0YWNoZWQgdmlld3Mgd2lsbCBub3QgYmUgY2hlY2tlZCBkdXJpbmcgY2hhbmdlIGRldGVjdGlvbiBydW5zIHVudGlsIHRoZXkgYXJlXG4gICAqIHJlLWF0dGFjaGVkLCBldmVuIGlmIHRoZXkgYXJlIGRpcnR5LiBgZGV0YWNoYCBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoXG4gICAqIHtAbGluayBDaGFuZ2VEZXRlY3RvclJlZiNkZXRlY3RDaGFuZ2VzIGRldGVjdENoYW5nZXN9IHRvIGltcGxlbWVudCBsb2NhbCBjaGFuZ2VcbiAgICogZGV0ZWN0aW9uIGNoZWNrcy5cbiAgICpcbiAgICogPCEtLSBUT0RPOiBBZGQgYSBsaW5rIHRvIGEgY2hhcHRlciBvbiBkZXRhY2gvcmVhdHRhY2gvbG9jYWwgZGlnZXN0IC0tPlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpdmUgZGVtbyBvbmNlIHJlZi5kZXRlY3RDaGFuZ2VzIGlzIG1lcmdlZCBpbnRvIG1hc3RlciAtLT5cbiAgICpcbiAgICogQHVzYWdlTm90ZXNcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlZmluZXMgYSBjb21wb25lbnQgd2l0aCBhIGxhcmdlIGxpc3Qgb2YgcmVhZG9ubHkgZGF0YS5cbiAgICogSW1hZ2luZSB0aGUgZGF0YSBjaGFuZ2VzIGNvbnN0YW50bHksIG1hbnkgdGltZXMgcGVyIHNlY29uZC4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsXG4gICAqIHdlIHdhbnQgdG8gY2hlY2sgYW5kIHVwZGF0ZSB0aGUgbGlzdCBldmVyeSBmaXZlIHNlY29uZHMuIFdlIGNhbiBkbyB0aGF0IGJ5IGRldGFjaGluZ1xuICAgKiB0aGUgY29tcG9uZW50J3MgY2hhbmdlIGRldGVjdG9yIGFuZCBkb2luZyBhIGxvY2FsIGNoZWNrIGV2ZXJ5IGZpdmUgc2Vjb25kcy5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjbGFzcyBEYXRhUHJvdmlkZXIge1xuICAgKiAgIC8vIGluIGEgcmVhbCBhcHBsaWNhdGlvbiB0aGUgcmV0dXJuZWQgZGF0YSB3aWxsIGJlIGRpZmZlcmVudCBldmVyeSB0aW1lXG4gICAqICAgZ2V0IGRhdGEoKSB7XG4gICAqICAgICByZXR1cm4gWzEsMiwzLDQsNV07XG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBDb21wb25lbnQoe1xuICAgKiAgIHNlbGVjdG9yOiAnZ2lhbnQtbGlzdCcsXG4gICAqICAgdGVtcGxhdGU6IGBcbiAgICogICAgIDxsaSAqbmdGb3I9XCJsZXQgZCBvZiBkYXRhUHJvdmlkZXIuZGF0YVwiPkRhdGEge3tkfX08L2xpPlxuICAgKiAgIGAsXG4gICAqIH0pXG4gICAqIGNsYXNzIEdpYW50TGlzdCB7XG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGRhdGFQcm92aWRlcjogRGF0YVByb3ZpZGVyKSB7XG4gICAqICAgICByZWYuZGV0YWNoKCk7XG4gICAqICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAqICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICogICAgIH0sIDUwMDApO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAQ29tcG9uZW50KHtcbiAgICogICBzZWxlY3RvcjogJ2FwcCcsXG4gICAqICAgcHJvdmlkZXJzOiBbRGF0YVByb3ZpZGVyXSxcbiAgICogICB0ZW1wbGF0ZTogYFxuICAgKiAgICAgPGdpYW50LWxpc3Q+PGdpYW50LWxpc3Q+XG4gICAqICAgYCxcbiAgICogfSlcbiAgICogY2xhc3MgQXBwIHtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGRldGFjaCgpOiB2b2lkIHsgdGhpcy5fdmlldy5mbGFncyAmPSB+TFZpZXdGbGFncy5BdHRhY2hlZDsgfVxuXG4gIC8qKlxuICAgKiBSZS1hdHRhY2hlcyBhIHZpZXcgdG8gdGhlIGNoYW5nZSBkZXRlY3Rpb24gdHJlZS5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byByZS1hdHRhY2ggdmlld3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgZGV0YWNoZWQgZnJvbSB0aGUgdHJlZVxuICAgKiB1c2luZyB7QGxpbmsgQ2hhbmdlRGV0ZWN0b3JSZWYjZGV0YWNoIGRldGFjaH0uIFZpZXdzIGFyZSBhdHRhY2hlZCB0byB0aGUgdHJlZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpbmsgdG8gYSBjaGFwdGVyIG9uIGRldGFjaC9yZWF0dGFjaC9sb2NhbCBkaWdlc3QgLS0+XG4gICAqXG4gICAqIEB1c2FnZU5vdGVzXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgY29tcG9uZW50IGRpc3BsYXlpbmcgYGxpdmVgIGRhdGEuIFRoZSBjb21wb25lbnQgd2lsbCBkZXRhY2hcbiAgICogaXRzIGNoYW5nZSBkZXRlY3RvciBmcm9tIHRoZSBtYWluIGNoYW5nZSBkZXRlY3RvciB0cmVlIHdoZW4gdGhlIGNvbXBvbmVudCdzIGxpdmUgcHJvcGVydHlcbiAgICogaXMgc2V0IHRvIGZhbHNlLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNsYXNzIERhdGFQcm92aWRlciB7XG4gICAqICAgZGF0YSA9IDE7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAqICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAqICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YSAqIDI7XG4gICAqICAgICB9LCA1MDApO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAQ29tcG9uZW50KHtcbiAgICogICBzZWxlY3RvcjogJ2xpdmUtZGF0YScsXG4gICAqICAgaW5wdXRzOiBbJ2xpdmUnXSxcbiAgICogICB0ZW1wbGF0ZTogJ0RhdGE6IHt7ZGF0YVByb3ZpZGVyLmRhdGF9fSdcbiAgICogfSlcbiAgICogY2xhc3MgTGl2ZURhdGEge1xuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkYXRhUHJvdmlkZXI6IERhdGFQcm92aWRlcikge31cbiAgICpcbiAgICogICBzZXQgbGl2ZSh2YWx1ZSkge1xuICAgKiAgICAgaWYgKHZhbHVlKSB7XG4gICAqICAgICAgIHRoaXMucmVmLnJlYXR0YWNoKCk7XG4gICAqICAgICB9IGVsc2Uge1xuICAgKiAgICAgICB0aGlzLnJlZi5kZXRhY2goKTtcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQENvbXBvbmVudCh7XG4gICAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgKiAgIHByb3ZpZGVyczogW0RhdGFQcm92aWRlcl0sXG4gICAqICAgdGVtcGxhdGU6IGBcbiAgICogICAgIExpdmUgVXBkYXRlOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaXZlXCI+XG4gICAqICAgICA8bGl2ZS1kYXRhIFtsaXZlXT1cImxpdmVcIj48bGl2ZS1kYXRhPlxuICAgKiAgIGAsXG4gICAqIH0pXG4gICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAqICAgbGl2ZSA9IHRydWU7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICByZWF0dGFjaCgpOiB2b2lkIHsgdGhpcy5fdmlldy5mbGFncyB8PSBMVmlld0ZsYWdzLkF0dGFjaGVkOyB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgdmlldyBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB7QGxpbmsgQ2hhbmdlRGV0ZWN0b3JSZWYjZGV0YWNoIGRldGFjaH0gdG8gaW1wbGVtZW50XG4gICAqIGxvY2FsIGNoYW5nZSBkZXRlY3Rpb24gY2hlY2tzLlxuICAgKlxuICAgKiA8IS0tIFRPRE86IEFkZCBhIGxpbmsgdG8gYSBjaGFwdGVyIG9uIGRldGFjaC9yZWF0dGFjaC9sb2NhbCBkaWdlc3QgLS0+XG4gICAqIDwhLS0gVE9ETzogQWRkIGEgbGl2ZSBkZW1vIG9uY2UgcmVmLmRldGVjdENoYW5nZXMgaXMgbWVyZ2VkIGludG8gbWFzdGVyIC0tPlxuICAgKlxuICAgKiBAdXNhZ2VOb3Rlc1xuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVmaW5lcyBhIGNvbXBvbmVudCB3aXRoIGEgbGFyZ2UgbGlzdCBvZiByZWFkb25seSBkYXRhLlxuICAgKiBJbWFnaW5lLCB0aGUgZGF0YSBjaGFuZ2VzIGNvbnN0YW50bHksIG1hbnkgdGltZXMgcGVyIHNlY29uZC4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsXG4gICAqIHdlIHdhbnQgdG8gY2hlY2sgYW5kIHVwZGF0ZSB0aGUgbGlzdCBldmVyeSBmaXZlIHNlY29uZHMuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGF0IGJ5IGRldGFjaGluZyB0aGUgY29tcG9uZW50J3MgY2hhbmdlIGRldGVjdG9yIGFuZCBkb2luZyBhIGxvY2FsIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogY2hlY2sgZXZlcnkgZml2ZSBzZWNvbmRzLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIENoYW5nZURldGVjdG9yUmVmI2RldGFjaCBkZXRhY2h9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHsgZGV0ZWN0Q2hhbmdlcyh0aGlzLmNvbnRleHQpOyB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY2hhbmdlIGRldGVjdG9yIGFuZCBpdHMgY2hpbGRyZW4sIGFuZCB0aHJvd3MgaWYgYW55IGNoYW5nZXMgYXJlIGRldGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZSB0byB2ZXJpZnkgdGhhdCBydW5uaW5nIGNoYW5nZSBkZXRlY3Rpb24gZG9lc24ndFxuICAgKiBpbnRyb2R1Y2Ugb3RoZXIgY2hhbmdlcy5cbiAgICovXG4gIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQgeyBjaGVja05vQ2hhbmdlcyh0aGlzLmNvbnRleHQpOyB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEVtYmVkZGVkVmlld1JlZjxUPiBleHRlbmRzIFZpZXdSZWY8VD4ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfbFZpZXdOb2RlOiBMVmlld05vZGU7XG5cbiAgY29uc3RydWN0b3Iodmlld05vZGU6IExWaWV3Tm9kZSwgdGVtcGxhdGU6IENvbXBvbmVudFRlbXBsYXRlPFQ+LCBjb250ZXh0OiBUKSB7XG4gICAgc3VwZXIodmlld05vZGUuZGF0YSwgY29udGV4dCk7XG4gICAgdGhpcy5fbFZpZXdOb2RlID0gdmlld05vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVmlld1JlZiBidW5kbGVkIHdpdGggZGVzdHJveSBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGlzIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBWaWV3UmVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaWV3UmVmPFQ+KHZpZXc6IExWaWV3IHwgbnVsbCwgY29udGV4dDogVCk6IFZpZXdSZWY8VD4ge1xuICAvLyBUT0RPOiBhZGQgZGV0ZWN0Q2hhbmdlcyBiYWNrIGluIHdoZW4gaW1wbGVtZW50aW5nIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXNcbiAgcmV0dXJuIGFkZERlc3Ryb3lhYmxlKG5ldyBWaWV3UmVmKHZpZXcgISwgY29udGV4dCkpO1xufVxuXG4vKiogSW50ZXJmYWNlIGZvciBkZXN0cm95IGxvZ2ljLiBJbXBsZW1lbnRlZCBieSBhZGREZXN0cm95YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVJlZjxUPiB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBoYXMgYmVlbiBkZXN0cm95ZWQgKi9cbiAgZGVzdHJveWVkOiBib29sZWFuO1xuICAvKiogRGVzdHJveSB0aGUgaW5zdGFuY2UgYW5kIGNhbGwgYWxsIG9uRGVzdHJveSBjYWxsYmFja3MuICovXG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgb25EZXN0cm95ICovXG4gIG9uRGVzdHJveShjYjogRnVuY3Rpb24pOiB2b2lkO1xufVxuXG4vKipcbiAqIERlY29yYXRlcyBhbiBvYmplY3Qgd2l0aCBkZXN0cm95IGxvZ2ljIChpbXBsZW1lbnRpbmcgdGhlIERlc3Ryb3lSZWYgaW50ZXJmYWNlKVxuICogYW5kIHJldHVybnMgdGhlIGVuaGFuY2VkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gZGVjb3JhdGVcbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBkZXN0cm95IGxvZ2ljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZXN0cm95YWJsZTxULCBDPihvYmo6IGFueSk6IFQmRGVzdHJveVJlZjxDPiB7XG4gIGxldCBkZXN0cm95Rm46IEZ1bmN0aW9uW118bnVsbCA9IG51bGw7XG4gIG9iai5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgb2JqLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgICBkZXN0cm95Rm4gJiYgZGVzdHJveUZuLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gIH07XG4gIG9iai5vbkRlc3Ryb3kgPSAoZm46IEZ1bmN0aW9uKSA9PiAoZGVzdHJveUZuIHx8IChkZXN0cm95Rm4gPSBbXSkpLnB1c2goZm4pO1xuICByZXR1cm4gb2JqO1xufVxuIl19
|