angular-three 2.0.0-beta.7 → 2.0.0-beta.8
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/README.md +4 -147
- package/esm2022/angular-three.mjs +1 -1
- package/esm2022/index.mjs +10 -9
- package/esm2022/lib/before-render.mjs +13 -0
- package/esm2022/lib/canvas.mjs +129 -161
- package/esm2022/lib/directives/args.mjs +14 -12
- package/esm2022/lib/directives/common.mjs +28 -27
- package/esm2022/lib/directives/key.mjs +29 -0
- package/esm2022/lib/directives/parent.mjs +13 -11
- package/esm2022/lib/directives/repeat.mjs +5 -6
- package/esm2022/lib/dom/events.mjs +6 -1
- package/esm2022/lib/events.mjs +75 -58
- package/esm2022/lib/instance.mjs +65 -0
- package/esm2022/lib/loader.mjs +17 -20
- package/esm2022/lib/loop.mjs +6 -3
- package/esm2022/lib/portal.mjs +103 -112
- package/esm2022/lib/ref.mjs +48 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +409 -0
- package/esm2022/lib/renderer/store.mjs +62 -39
- package/esm2022/lib/renderer/utils.mjs +26 -43
- package/esm2022/lib/roots.mjs +249 -0
- package/esm2022/lib/routed-scene.mjs +6 -7
- package/esm2022/lib/store.mjs +207 -0
- package/esm2022/lib/three-types.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +14 -8
- package/esm2022/lib/utils/assert-injection-context.mjs +14 -0
- package/esm2022/lib/utils/attach.mjs +2 -2
- package/esm2022/lib/utils/create-injection-token.mjs +47 -0
- package/esm2022/lib/utils/is.mjs +1 -1
- package/esm2022/lib/utils/make.mjs +1 -1
- package/esm2022/lib/utils/safe-detect-changes.mjs +15 -13
- package/esm2022/lib/utils/signal-store.mjs +91 -0
- package/esm2022/lib/utils/update.mjs +1 -1
- package/fesm2022/angular-three.mjs +1580 -1430
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +10 -8
- package/lib/{di/before-render.d.ts → before-render.d.ts} +1 -1
- package/lib/canvas.d.ts +81 -11
- package/lib/directives/args.d.ts +2 -2
- package/lib/directives/common.d.ts +5 -1
- package/lib/directives/key.d.ts +10 -0
- package/lib/directives/parent.d.ts +5 -5
- package/lib/dom/events.d.ts +3 -2
- package/lib/events.d.ts +78 -2
- package/lib/instance.d.ts +36 -0
- package/lib/loader.d.ts +13 -2
- package/lib/loop.d.ts +64 -6
- package/lib/portal.d.ts +21 -12
- package/lib/{di/ref.d.ts → ref.d.ts} +3 -2
- package/lib/renderer/catalogue.d.ts +9 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +5 -0
- package/lib/renderer/store.d.ts +21 -15
- package/lib/renderer/utils.d.ts +29 -19
- package/lib/roots.d.ts +11 -0
- package/lib/routed-scene.d.ts +1 -1
- package/lib/store.d.ts +143 -0
- package/lib/three-types.d.ts +5 -5
- package/lib/types.d.ts +1 -310
- package/lib/utils/apply-props.d.ts +4 -2
- package/lib/utils/attach.d.ts +4 -2
- package/lib/utils/create-injection-token.d.ts +27 -0
- package/lib/utils/is.d.ts +3 -2
- package/lib/utils/make.d.ts +12 -1
- package/lib/utils/safe-detect-changes.d.ts +2 -2
- package/lib/utils/signal-store.d.ts +17 -0
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -0
- package/package.json +4 -4
- package/plugin/README.md +11 -0
- package/plugin/generators.json +39 -0
- package/plugin/package.json +6 -0
- package/plugin/src/generators/init/compat.d.ts +2 -0
- package/plugin/src/generators/init/compat.js +6 -0
- package/plugin/src/generators/init/compat.js.map +1 -0
- package/plugin/src/generators/init/generator.d.ts +2 -0
- package/plugin/src/generators/init/generator.js +48 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +6 -0
- package/plugin/src/generators/init-postprocessing/compat.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/compat.js +6 -0
- package/plugin/src/generators/init-postprocessing/compat.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/generator.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/generator.js +20 -0
- package/plugin/src/generators/init-postprocessing/generator.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/schema.json +6 -0
- package/plugin/src/generators/init-soba/compat.d.ts +2 -0
- package/plugin/src/generators/init-soba/compat.js +6 -0
- package/plugin/src/generators/init-soba/compat.js.map +1 -0
- package/plugin/src/generators/init-soba/generator.d.ts +2 -0
- package/plugin/src/generators/init-soba/generator.js +24 -0
- package/plugin/src/generators/init-soba/generator.js.map +1 -0
- package/plugin/src/generators/init-soba/schema.json +6 -0
- package/plugin/src/generators/versions.d.ts +9 -0
- package/plugin/src/generators/versions.js +13 -0
- package/plugin/src/generators/versions.js.map +1 -0
- package/plugin/src/index.d.ts +3 -0
- package/plugin/src/index.js +10 -0
- package/plugin/src/index.js.map +1 -0
- package/web-types.json +1 -0
- package/esm2022/lib/di/before-render.mjs +0 -13
- package/esm2022/lib/di/catalogue.mjs +0 -7
- package/esm2022/lib/di/ref.mjs +0 -54
- package/esm2022/lib/renderer/di.mjs +0 -3
- package/esm2022/lib/renderer/enums.mjs +0 -2
- package/esm2022/lib/renderer/provider.mjs +0 -18
- package/esm2022/lib/renderer/renderer.mjs +0 -368
- package/esm2022/lib/stores/signal.store.mjs +0 -78
- package/esm2022/lib/stores/store.mjs +0 -420
- package/esm2022/lib/utils/assert-in-injection-context.mjs +0 -14
- package/esm2022/lib/utils/instance.mjs +0 -67
- package/esm2022/lib/utils/timing.mjs +0 -9
- package/lib/di/catalogue.d.ts +0 -3
- package/lib/renderer/di.d.ts +0 -2
- package/lib/renderer/enums.d.ts +0 -26
- package/lib/renderer/provider.d.ts +0 -8
- package/lib/renderer/renderer.d.ts +0 -49
- package/lib/stores/signal.store.d.ts +0 -21
- package/lib/stores/store.d.ts +0 -13
- package/lib/utils/instance.d.ts +0 -4
- package/lib/utils/timing.d.ts +0 -2
- /package/lib/utils/{assert-in-injection-context.d.ts → assert-injection-context.d.ts} +0 -0
|
@@ -1,28 +1,10 @@
|
|
|
1
1
|
import { EventEmitter, untracked } from '@angular/core';
|
|
2
2
|
import { removeInteractivity } from '../events';
|
|
3
|
+
import { getLocalState, invalidateInstance } from '../instance';
|
|
3
4
|
import { attach, detach } from '../utils/attach';
|
|
4
|
-
import { getLocalState, invalidateInstance } from '../utils/instance';
|
|
5
5
|
import { is } from '../utils/is';
|
|
6
6
|
import { safeDetectChanges } from '../utils/safe-detect-changes';
|
|
7
|
-
|
|
8
|
-
export const SPECIAL_INTERNAL_ADD_COMMENT = '__ngt_renderer_add_comment__';
|
|
9
|
-
export const SPECIAL_DOM_TAG = {
|
|
10
|
-
NGT_PORTAL: 'ngt-portal',
|
|
11
|
-
NGT_PRIMITIVE: 'ngt-primitive',
|
|
12
|
-
NGT_VALUE: 'ngt-value',
|
|
13
|
-
};
|
|
14
|
-
export const SPECIAL_PROPERTIES = {
|
|
15
|
-
COMPOUND: 'ngtCompound',
|
|
16
|
-
RENDER_PRIORITY: 'priority',
|
|
17
|
-
ATTACH: 'attach',
|
|
18
|
-
VALUE: 'rawValue',
|
|
19
|
-
REF: 'ref',
|
|
20
|
-
};
|
|
21
|
-
const SPECIAL_EVENTS = {
|
|
22
|
-
BEFORE_RENDER: 'beforeRender',
|
|
23
|
-
AFTER_UPDATE: 'afterUpdate',
|
|
24
|
-
AFTER_ATTACH: 'afterAttach',
|
|
25
|
-
};
|
|
7
|
+
import { SPECIAL_EVENTS } from './constants';
|
|
26
8
|
export function attachThreeChild(parent, child) {
|
|
27
9
|
const pLS = getLocalState(parent);
|
|
28
10
|
const cLS = getLocalState(child);
|
|
@@ -33,7 +15,7 @@ export function attachThreeChild(parent, child) {
|
|
|
33
15
|
let added = false;
|
|
34
16
|
// assign store on child if not already exist
|
|
35
17
|
// or child store is the parent of parent store
|
|
36
|
-
if (!cLS.store || cLS.store === pLS.store.get('
|
|
18
|
+
if (!cLS.store || cLS.store === pLS.store.get('previousRoot')) {
|
|
37
19
|
cLS.store = pLS.store;
|
|
38
20
|
}
|
|
39
21
|
if (cLS.attach) {
|
|
@@ -59,8 +41,10 @@ export function attachThreeChild(parent, child) {
|
|
|
59
41
|
}
|
|
60
42
|
// attach
|
|
61
43
|
if (cLS.isRaw) {
|
|
62
|
-
if (cLS.parent) {
|
|
63
|
-
|
|
44
|
+
if (cLS.parent && cLS.parent() !== parent) {
|
|
45
|
+
untracked(() => {
|
|
46
|
+
cLS.parent.set(parent);
|
|
47
|
+
});
|
|
64
48
|
}
|
|
65
49
|
// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach
|
|
66
50
|
if (child.__ngt_renderer__[11 /* NgtRendererClassId.rawValue */] === undefined)
|
|
@@ -79,8 +63,10 @@ export function attachThreeChild(parent, child) {
|
|
|
79
63
|
added = true;
|
|
80
64
|
}
|
|
81
65
|
pLS.add(child, added ? 'objects' : 'nonObjects');
|
|
82
|
-
if (cLS.parent) {
|
|
83
|
-
|
|
66
|
+
if (cLS.parent && cLS.parent() !== parent) {
|
|
67
|
+
untracked(() => {
|
|
68
|
+
cLS.parent.set(parent);
|
|
69
|
+
});
|
|
84
70
|
}
|
|
85
71
|
if (cLS.afterAttach)
|
|
86
72
|
cLS.afterAttach.emit({ parent, node: child });
|
|
@@ -91,7 +77,9 @@ export function removeThreeChild(parent, child, dispose) {
|
|
|
91
77
|
const pLS = getLocalState(parent);
|
|
92
78
|
const cLS = getLocalState(child);
|
|
93
79
|
// clear parent ref
|
|
94
|
-
|
|
80
|
+
untracked(() => {
|
|
81
|
+
cLS.parent?.set(null);
|
|
82
|
+
});
|
|
95
83
|
// remove child from parent
|
|
96
84
|
if (untracked(pLS.objects))
|
|
97
85
|
pLS.remove(child, 'objects');
|
|
@@ -119,7 +107,15 @@ function removeThreeRecursive(array, parent, dispose) {
|
|
|
119
107
|
if (array)
|
|
120
108
|
[...array].forEach((child) => removeThreeChild(parent, child, dispose));
|
|
121
109
|
}
|
|
122
|
-
export function
|
|
110
|
+
export function kebabToPascal(str) {
|
|
111
|
+
// split the string at each hyphen
|
|
112
|
+
const parts = str.split('-');
|
|
113
|
+
// map over the parts, capitalizing the first letter of each part
|
|
114
|
+
const pascalParts = parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1));
|
|
115
|
+
// join the parts together to create the final PascalCase string
|
|
116
|
+
return pascalParts.join('');
|
|
117
|
+
}
|
|
118
|
+
export function processThreeEvent(instance, priority, eventName, callback, zone, rootCdr, targetCdr) {
|
|
123
119
|
const lS = getLocalState(instance);
|
|
124
120
|
if (eventName === SPECIAL_EVENTS.BEFORE_RENDER) {
|
|
125
121
|
return lS.store
|
|
@@ -143,8 +139,7 @@ export function processThreeEvent(instance, priority, eventName, callback, zone,
|
|
|
143
139
|
previousHandler(event);
|
|
144
140
|
zone.run(() => {
|
|
145
141
|
callback(event);
|
|
146
|
-
safeDetectChanges(targetCdr);
|
|
147
|
-
safeDetectChanges(cdr);
|
|
142
|
+
safeDetectChanges(targetCdr, rootCdr);
|
|
148
143
|
});
|
|
149
144
|
};
|
|
150
145
|
Object.assign(lS.handlers, { [eventName]: updatedCallback });
|
|
@@ -158,6 +153,7 @@ export function processThreeEvent(instance, priority, eventName, callback, zone,
|
|
|
158
153
|
return () => {
|
|
159
154
|
const localState = getLocalState(instance);
|
|
160
155
|
if (localState && localState.eventCount) {
|
|
156
|
+
localState.eventCount -= 1;
|
|
161
157
|
const index = localState.store
|
|
162
158
|
.get('internal', 'interaction')
|
|
163
159
|
.findIndex((obj) => obj.uuid === instance.uuid);
|
|
@@ -166,17 +162,4 @@ export function processThreeEvent(instance, priority, eventName, callback, zone,
|
|
|
166
162
|
}
|
|
167
163
|
};
|
|
168
164
|
}
|
|
169
|
-
export function eventToHandler(callback) {
|
|
170
|
-
return (event) => {
|
|
171
|
-
callback(event);
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
export function kebabToPascal(str) {
|
|
175
|
-
// split the string at each hyphen
|
|
176
|
-
const parts = str.split('-');
|
|
177
|
-
// map over the parts, capitalizing the first letter of each part
|
|
178
|
-
const pascalParts = parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1));
|
|
179
|
-
// join the parts together to create the final PascalCase string
|
|
180
|
-
return pascalParts.join('');
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFFN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHakUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUMzQixVQUFVLEVBQUUsWUFBWTtJQUN4QixhQUFhLEVBQUUsZUFBZTtJQUM5QixTQUFTLEVBQUUsV0FBVztDQUNoQixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsUUFBUSxFQUFFLGFBQWE7SUFDdkIsZUFBZSxFQUFFLFVBQVU7SUFDM0IsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLFVBQVU7SUFDakIsR0FBRyxFQUFFLEtBQUs7Q0FDSixDQUFDO0FBRVgsTUFBTSxjQUFjLEdBQUc7SUFDbkIsYUFBYSxFQUFFLGNBQWM7SUFDN0IsWUFBWSxFQUFFLGFBQWE7SUFDM0IsWUFBWSxFQUFFLGFBQWE7Q0FDckIsQ0FBQztBQUVYLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUF1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QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3JDLGtDQUFrQztJQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdCLGlFQUFpRTtJQUNqRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0RixnRUFBZ0U7SUFDaEUsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIHVudHJhY2tlZCwgdHlwZSBDaGFuZ2VEZXRlY3RvclJlZiwgdHlwZSBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50cyB9IGZyb20gJy4uL2RvbS9ldmVudHMnO1xuaW1wb3J0IHsgcmVtb3ZlSW50ZXJhY3Rpdml0eSB9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ndEV2ZW50SGFuZGxlcnMsIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGF0dGFjaCwgZGV0YWNoIH0gZnJvbSAnLi4vdXRpbHMvYXR0YWNoJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIGludmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgY29uc3QgUk9VVEVEX1NDRU5FID0gJ19fbmd0X3JlbmRlcmVyX2lzX3JvdXRlZF9zY2VuZV9fJztcbmV4cG9ydCBjb25zdCBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UID0gJ19fbmd0X3JlbmRlcmVyX2FkZF9jb21tZW50X18nO1xuXG5leHBvcnQgY29uc3QgU1BFQ0lBTF9ET01fVEFHID0ge1xuICAgIE5HVF9QT1JUQUw6ICduZ3QtcG9ydGFsJyxcbiAgICBOR1RfUFJJTUlUSVZFOiAnbmd0LXByaW1pdGl2ZScsXG4gICAgTkdUX1ZBTFVFOiAnbmd0LXZhbHVlJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBTUEVDSUFMX1BST1BFUlRJRVMgPSB7XG4gICAgQ09NUE9VTkQ6ICduZ3RDb21wb3VuZCcsXG4gICAgUkVOREVSX1BSSU9SSVRZOiAncHJpb3JpdHknLFxuICAgIEFUVEFDSDogJ2F0dGFjaCcsXG4gICAgVkFMVUU6ICdyYXdWYWx1ZScsXG4gICAgUkVGOiAncmVmJyxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFNQRUNJQUxfRVZFTlRTID0ge1xuICAgIEJFRk9SRV9SRU5ERVI6ICdiZWZvcmVSZW5kZXInLFxuICAgIEFGVEVSX1VQREFURTogJ2FmdGVyVXBkYXRlJyxcbiAgICBBRlRFUl9BVFRBQ0g6ICdhZnRlckF0dGFjaCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSkge1xuICAgIGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcbiAgICBjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKGNoaWxkKTtcblxuICAgIGlmICghcExTIHx8ICFjTFMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBUSFJFRSBpbnN0YW5jZXMgbmVlZCB0byBiZSBwcmVwYXJlZCB3aXRoIGxvY2FsIHN0YXRlLmApO1xuICAgIH1cblxuICAgIC8vIHdoZXRoZXIgdGhlIGNoaWxkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgd2l0aCBwYXJlbnQuYWRkKClcbiAgICBsZXQgYWRkZWQgPSBmYWxzZTtcblxuICAgIC8vIGFzc2lnbiBzdG9yZSBvbiBjaGlsZCBpZiBub3QgYWxyZWFkeSBleGlzdFxuICAgIC8vIG9yIGNoaWxkIHN0b3JlIGlzIHRoZSBwYXJlbnQgb2YgcGFyZW50IHN0b3JlXG4gICAgaWYgKCFjTFMuc3RvcmUgfHwgY0xTLnN0b3JlID09PSBwTFMuc3RvcmUuZ2V0KCdwcmV2aW91c1N0b3JlJykpIHtcbiAgICAgICAgY0xTLnN0b3JlID0gcExTLnN0b3JlO1xuICAgIH1cblxuICAgIGlmIChjTFMuYXR0YWNoKSB7XG4gICAgICAgIGNvbnN0IGF0dGFjaFByb3AgPSBjTFMuYXR0YWNoO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXR0YWNoUHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNoQ2xlYW5VcCA9IGF0dGFjaFByb3AocGFyZW50LCBjaGlsZCwgY0xTLnN0b3JlKTtcbiAgICAgICAgICAgIGlmIChhdHRhY2hDbGVhblVwKSBjTFMucHJldmlvdXNBdHRhY2ggPSBhdHRhY2hDbGVhblVwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gd2Ugc2tpcCBhdHRhY2ggbm9uZSBpZiBzZXQgZXhwbGljaXRseVxuICAgICAgICAgICAgaWYgKGF0dGFjaFByb3BbMF0gPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGVJbnN0YW5jZShjaGlsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgbWF0ZXJpYWwgYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhdHRhY2hQcm9wWzBdID09PSAnbWF0ZXJpYWwnICYmXG4gICAgICAgICAgICAgICAgYXR0YWNoUHJvcFsxXSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBOdW1iZXIoYXR0YWNoUHJvcFsxXSkgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgaXMubWF0ZXJpYWwoY2hpbGQpICYmXG4gICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGFyZW50WydtYXRlcmlhbCddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50WydtYXRlcmlhbCddID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGF0dGFjaFxuICAgICAgICAgICAgaWYgKGNMUy5pc1Jhdykge1xuICAgICAgICAgICAgICAgIGlmIChjTFMucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNMUy5wYXJlbnQubmV4dChwYXJlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGRvbid0IGhhdmUgcmF3VmFsdWUgeWV0LCBzbyB3ZSBiYWlsIGFuZCB3YWl0IHVudGlsIHRoZSBSZW5kZXJlciByZWNhbGxzIGF0dGFjaFxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF0dGFjaChwYXJlbnQsIGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSwgYXR0YWNoUHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dGFjaChwYXJlbnQsIGNoaWxkLCBhdHRhY2hQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNhdmUgdmFsdWVcbiAgICAgICAgICAgIGNMUy5wcmV2aW91c0F0dGFjaCA9IGF0dGFjaFByb3AucmVkdWNlKCh2YWx1ZSwgcHJvcGVydHkpID0+IHZhbHVlW3Byb3BlcnR5XSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXMub2JqZWN0M0QocGFyZW50KSAmJiBpcy5vYmplY3QzRChjaGlsZCkpIHtcbiAgICAgICAgcGFyZW50LmFkZChjaGlsZCk7XG4gICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwTFMuYWRkKGNoaWxkLCBhZGRlZCA/ICdvYmplY3RzJyA6ICdub25PYmplY3RzJyk7XG5cbiAgICBpZiAoY0xTLnBhcmVudCkge1xuICAgICAgICBjTFMucGFyZW50Lm5leHQocGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoY0xTLmFmdGVyQXR0YWNoKSBjTFMuYWZ0ZXJBdHRhY2guZW1pdCh7IHBhcmVudCwgbm9kZTogY2hpbGQgfSk7XG5cbiAgICBpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuICAgIGludmFsaWRhdGVJbnN0YW5jZShwYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG4gICAgY29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cbiAgICAvLyBjbGVhciBwYXJlbnQgcmVmXG4gICAgY0xTLnBhcmVudD8ubmV4dChudWxsKTtcblxuICAgIC8vIHJlbW92ZSBjaGlsZCBmcm9tIHBhcmVudFxuICAgIGlmICh1bnRyYWNrZWQocExTLm9iamVjdHMpKSBwTFMucmVtb3ZlKGNoaWxkLCAnb2JqZWN0cycpO1xuICAgIGlmICh1bnRyYWNrZWQocExTLm5vbk9iamVjdHMpKSBwTFMucmVtb3ZlKGNoaWxkLCAnbm9uT2JqZWN0cycpO1xuXG4gICAgaWYgKGNMUy5hdHRhY2gpIHtcbiAgICAgICAgZGV0YWNoKHBhcmVudCwgY2hpbGQsIGNMUy5hdHRhY2gpO1xuICAgIH0gZWxzZSBpZiAoaXMub2JqZWN0M0QocGFyZW50KSAmJiBpcy5vYmplY3QzRChjaGlsZCkpIHtcbiAgICAgICAgcGFyZW50LnJlbW92ZShjaGlsZCk7XG4gICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkoY0xTLnN0b3JlIHx8IHBMUy5zdG9yZSwgY2hpbGQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzUHJpbWl0aXZlID0gY0xTLnByaW1pdGl2ZTtcbiAgICBpZiAoIWlzUHJpbWl0aXZlKSB7XG4gICAgICAgIHJlbW92ZVRocmVlUmVjdXJzaXZlKGNMUy5vYmplY3RzID8gdW50cmFja2VkKGNMUy5vYmplY3RzKSA6IFtdLCBjaGlsZCwgISFkaXNwb3NlKTtcbiAgICAgICAgcmVtb3ZlVGhyZWVSZWN1cnNpdmUoY2hpbGQuY2hpbGRyZW4sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuICAgIH1cblxuICAgIC8vIGRpc3Bvc2VcbiAgICBpZiAoIWlzUHJpbWl0aXZlICYmIGNoaWxkWydkaXNwb3NlJ10gJiYgIWlzLnNjZW5lKGNoaWxkKSkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjaGlsZFsnZGlzcG9zZSddKCkpO1xuICAgIH1cblxuICAgIGludmFsaWRhdGVJbnN0YW5jZShwYXJlbnQpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVUaHJlZVJlY3Vyc2l2ZShhcnJheTogTmd0SW5zdGFuY2VOb2RlW10sIHBhcmVudDogTmd0SW5zdGFuY2VOb2RlLCBkaXNwb3NlOiBib29sZWFuKSB7XG4gICAgaWYgKGFycmF5KSBbLi4uYXJyYXldLmZvckVhY2goKGNoaWxkKSA9PiByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgY2hpbGQsIGRpc3Bvc2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUaHJlZUV2ZW50KFxuICAgIGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsXG4gICAgcHJpb3JpdHk6IG51bWJlcixcbiAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4gICAgem9uZTogTmdab25lLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdGFyZ2V0Q2RyPzogQ2hhbmdlRGV0ZWN0b3JSZWYgfCBudWxsXG4pOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBsUyA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuICAgIGlmIChldmVudE5hbWUgPT09IFNQRUNJQUxfRVZFTlRTLkJFRk9SRV9SRU5ERVIpIHtcbiAgICAgICAgcmV0dXJuIGxTLnN0b3JlXG4gICAgICAgICAgICAuZ2V0KCdpbnRlcm5hbCcpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4gY2FsbGJhY2soeyBzdGF0ZSwgb2JqZWN0OiBpbnN0YW5jZSB9KSwgcHJpb3JpdHkgfHwgbFMucHJpb3JpdHkgfHwgMCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQUZURVJfVVBEQVRFIHx8IGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQUZURVJfQVRUQUNIKSB7XG4gICAgICAgIGxldCBlbWl0dGVyID0gbFNbZXZlbnROYW1lXTtcbiAgICAgICAgaWYgKCFlbWl0dGVyKSBlbWl0dGVyID0gbFNbZXZlbnROYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgY29uc3Qgc3ViID0gZW1pdHRlci5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc3ViLnVuc3Vic2NyaWJlLmJpbmQoc3ViKTtcbiAgICB9XG5cbiAgICBpZiAoIWxTLmhhbmRsZXJzKSBsUy5oYW5kbGVycyA9IHt9O1xuXG4gICAgLy8gdHJ5IHRvIGdldCB0aGUgcHJldmlvdXMgaGFuZGxlci4gY29tcG91bmQgbWlnaHQgaGF2ZSBvbmUsIHRoZSBUSFJFRSBvYmplY3QgbWlnaHQgYWxzbyBoYXZlIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgICBjb25zdCBwcmV2aW91c0hhbmRsZXIgPSBsUy5oYW5kbGVyc1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIGxTLmhhbmRsZXJzXTtcbiAgICAvLyByZWFkanVzdCB0aGUgY2FsbGJhY2tcbiAgICBjb25zdCB1cGRhdGVkQ2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAocHJldmlvdXNIYW5kbGVyKSBwcmV2aW91c0hhbmRsZXIoZXZlbnQpO1xuICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBzYWZlRGV0ZWN0Q2hhbmdlcyh0YXJnZXRDZHIpO1xuICAgICAgICAgICAgc2FmZURldGVjdENoYW5nZXMoY2RyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24obFMuaGFuZGxlcnMsIHsgW2V2ZW50TmFtZV06IHVwZGF0ZWRDYWxsYmFjayB9KTtcblxuICAgIC8vIGluY3JlbWVudCB0aGUgY291bnQgZXZlcnl0aW1lXG4gICAgbFMuZXZlbnRDb3VudCArPSAxO1xuICAgIC8vIGJ1dCBvbmx5IGFkZCB0aGUgaW5zdGFuY2UgKHRhcmdldCkgdG8gdGhlIGludGVyYWN0aW9uIGFycmF5IChzbyB0aGF0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIEV2ZW50TWFuYWdlciB3aXRoIFJheWNhc3QpXG4gICAgLy8gdGhlIGZpcnN0IHRpbWUgZXZlbnRDb3VudCBpcyBpbmNyZW1lbnRlZFxuICAgIGlmIChsUy5ldmVudENvdW50ID09PSAxICYmIGluc3RhbmNlWydyYXljYXN0J10pIGxTLnN0b3JlLmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKS5wdXNoKGluc3RhbmNlKTtcblxuICAgIC8vIGNsZWFuIHVwIHRoZSBldmVudCBsaXN0ZW5lciBieSByZW1vdmluZyB0aGUgdGFyZ2V0IGZyb20gdGhlIGludGVyYWN0aW9uIGFycmF5XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuICAgICAgICBpZiAobG9jYWxTdGF0ZSAmJiBsb2NhbFN0YXRlLmV2ZW50Q291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbG9jYWxTdGF0ZS5zdG9yZVxuICAgICAgICAgICAgICAgIC5nZXQoJ2ludGVybmFsJywgJ2ludGVyYWN0aW9uJylcbiAgICAgICAgICAgICAgICAuZmluZEluZGV4KChvYmopID0+IG9iai51dWlkID09PSBpbnN0YW5jZS51dWlkKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSBsb2NhbFN0YXRlLnN0b3JlLmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50VG9IYW5kbGVyKGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkge1xuICAgIHJldHVybiAoZXZlbnQ6IFBhcmFtZXRlcnM8RXhjbHVkZTxOZ3RFdmVudEhhbmRsZXJzWyh0eXBlb2Ygc3VwcG9ydGVkRXZlbnRzKVtudW1iZXJdXSwgdW5kZWZpbmVkPj5bMF0pID0+IHtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrZWJhYlRvUGFzY2FsKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzcGxpdCB0aGUgc3RyaW5nIGF0IGVhY2ggaHlwaGVuXG4gICAgY29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy0nKTtcblxuICAgIC8vIG1hcCBvdmVyIHRoZSBwYXJ0cywgY2FwaXRhbGl6aW5nIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBwYXJ0XG4gICAgY29uc3QgcGFzY2FsUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0LnNsaWNlKDEpKTtcblxuICAgIC8vIGpvaW4gdGhlIHBhcnRzIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZmluYWwgUGFzY2FsQ2FzZSBzdHJpbmdcbiAgICByZXR1cm4gcGFzY2FsUGFydHMuam9pbignJyk7XG59XG4iXX0=
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQXdCLE1BQU0sYUFBYSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBa0M3QyxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBdUIsRUFBRSxLQUFzQjtJQUMvRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0tBQy9FO0lBRUQsNkRBQTZEO0lBQzdELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVsQiw2Q0FBNkM7SUFDN0MsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDOUQsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0tBQ3RCO0lBRUQsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUU5QixJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxhQUFhO2dCQUFFLEdBQUcsQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1NBQ3REO2FBQU07WUFDTix3Q0FBd0M7WUFDeEMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO2dCQUM3QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsT0FBTzthQUNQO1lBRUQsd0JBQXdCO1lBQ3hCLElBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVU7Z0JBQzVCLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtnQkFDekMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDakM7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUN4QjtZQUVELFNBQVM7WUFDVCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxNQUFNLEVBQUU7b0JBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2lCQUNIO2dCQUNELGtHQUFrRztnQkFDbEcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLHNDQUE2QixLQUFLLFNBQVM7b0JBQUUsT0FBTztnQkFDOUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsZ0JBQWdCLHNDQUE2QixFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNOLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsYUFBYTtZQUNiLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyRjtLQUNEO1NBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixLQUFLLEdBQUcsSUFBSSxDQUFDO0tBQ2I7SUFFRCxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFakQsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxNQUFNLEVBQUU7UUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0tBQ0g7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXO1FBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFbkUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUF1QixFQUFFLEtBQXNCLEVBQUUsT0FBaUI7SUFDbEcsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqQyxtQkFBbUI7SUFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsMkJBQTJCO0lBQzNCLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFL0QsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2YsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xDO1NBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDakIsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEYsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsVUFBVTtJQUNWLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6RCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN6QztJQUVELGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQXdCLEVBQUUsTUFBdUIsRUFBRSxPQUFnQjtJQUNoRyxJQUFJLEtBQUs7UUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN4QyxrQ0FBa0M7SUFDbEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU3QixpRUFBaUU7SUFDakUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEYsZ0VBQWdFO0lBQ2hFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUNoQyxRQUF5QixFQUN6QixRQUFnQixFQUNoQixTQUFpQixFQUNqQixRQUE4QixFQUM5QixJQUFZLEVBQ1osT0FBMEIsRUFDMUIsU0FBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLElBQUksU0FBUyxLQUFLLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDL0MsT0FBTyxFQUFFLENBQUMsS0FBSzthQUNiLEdBQUcsQ0FBQyxVQUFVLENBQUM7YUFDZixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM1RjtJQUVELElBQUksU0FBUyxLQUFLLGNBQWMsQ0FBQyxZQUFZLElBQUksU0FBUyxLQUFLLGNBQWMsQ0FBQyxZQUFZLEVBQUU7UUFDM0YsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQztJQUVELElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUTtRQUFFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBRW5DLG9IQUFvSDtJQUNwSCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQXFDLENBQUMsQ0FBQztJQUMzRSx3QkFBd0I7SUFDeEIsTUFBTSxlQUFlLEdBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEQsSUFBSSxlQUFlO1lBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUU3RCxnQ0FBZ0M7SUFDaEMsRUFBRSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7SUFDbkIsdUhBQXVIO0lBQ3ZILDJDQUEyQztJQUMzQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZHLGdGQUFnRjtJQUNoRixPQUFPLEdBQUcsRUFBRTtRQUNYLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQ3hDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQzNCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLO2lCQUM1QixHQUFHLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLEtBQUssSUFBSSxDQUFDO2dCQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIsIE5nWm9uZSwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZW1vdmVJbnRlcmFjdGl2aXR5IH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIGludmFsaWRhdGVJbnN0YW5jZSwgdHlwZSBOZ3RJbnN0YW5jZU5vZGUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBhdHRhY2gsIGRldGFjaCB9IGZyb20gJy4uL3V0aWxzL2F0dGFjaCc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnLi4vdXRpbHMvc2FmZS1kZXRlY3QtY2hhbmdlcyc7XG5pbXBvcnQgeyBTUEVDSUFMX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gQGludGVybmFsXG5leHBvcnQgY29uc3QgZW51bSBOZ3RSZW5kZXJlckNsYXNzSWQge1xuXHR0eXBlLFxuXHRwYXJlbnQsXG5cdGluamVjdGVkUGFyZW50LFxuXHRjaGlsZHJlbixcblx0ZGVzdHJveWVkLFxuXHRjb21wb3VuZCxcblx0Y29tcG91bmRQYXJlbnQsXG5cdGNvbXBvdW5kZWQsXG5cdHF1ZXVlT3BzLFxuXHRhdHRyaWJ1dGVzLFxuXHRwcm9wZXJ0aWVzLFxuXHRyYXdWYWx1ZSxcblx0cmVmLFxuXHRwb3J0YWxDb250YWluZXIsXG5cdGluamVjdG9yRmFjdG9yeSxcbn1cblxuLy8gQGludGVybmFsXG5leHBvcnQgY29uc3QgZW51bSBOZ3RDb21wb3VuZENsYXNzSWQge1xuXHRhcHBseUZpcnN0LFxuXHRwcm9wcyxcbn1cblxuLy8gQGludGVybmFsXG5leHBvcnQgY29uc3QgZW51bSBOZ3RRdWV1ZU9wQ2xhc3NJZCB7XG5cdHR5cGUsXG5cdG9wLFxuXHRkb25lLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG5cdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXG5cdGlmICghcExTIHx8ICFjTFMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIFRIUkVFIGluc3RhbmNlcyBuZWVkIHRvIGJlIHByZXBhcmVkIHdpdGggbG9jYWwgc3RhdGUuYCk7XG5cdH1cblxuXHQvLyB3aGV0aGVyIHRoZSBjaGlsZCBpcyBhZGRlZCB0byB0aGUgcGFyZW50IHdpdGggcGFyZW50LmFkZCgpXG5cdGxldCBhZGRlZCA9IGZhbHNlO1xuXG5cdC8vIGFzc2lnbiBzdG9yZSBvbiBjaGlsZCBpZiBub3QgYWxyZWFkeSBleGlzdFxuXHQvLyBvciBjaGlsZCBzdG9yZSBpcyB0aGUgcGFyZW50IG9mIHBhcmVudCBzdG9yZVxuXHRpZiAoIWNMUy5zdG9yZSB8fCBjTFMuc3RvcmUgPT09IHBMUy5zdG9yZS5nZXQoJ3ByZXZpb3VzUm9vdCcpKSB7XG5cdFx0Y0xTLnN0b3JlID0gcExTLnN0b3JlO1xuXHR9XG5cblx0aWYgKGNMUy5hdHRhY2gpIHtcblx0XHRjb25zdCBhdHRhY2hQcm9wID0gY0xTLmF0dGFjaDtcblxuXHRcdGlmICh0eXBlb2YgYXR0YWNoUHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc3QgYXR0YWNoQ2xlYW5VcCA9IGF0dGFjaFByb3AocGFyZW50LCBjaGlsZCwgY0xTLnN0b3JlKTtcblx0XHRcdGlmIChhdHRhY2hDbGVhblVwKSBjTFMucHJldmlvdXNBdHRhY2ggPSBhdHRhY2hDbGVhblVwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB3ZSBza2lwIGF0dGFjaCBub25lIGlmIHNldCBleHBsaWNpdGx5XG5cdFx0XHRpZiAoYXR0YWNoUHJvcFswXSA9PT0gJ25vbmUnKSB7XG5cdFx0XHRcdGludmFsaWRhdGVJbnN0YW5jZShjaGlsZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gaGFuZGxlIG1hdGVyaWFsIGFycmF5XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGF0dGFjaFByb3BbMF0gPT09ICdtYXRlcmlhbCcgJiZcblx0XHRcdFx0YXR0YWNoUHJvcFsxXSAmJlxuXHRcdFx0XHR0eXBlb2YgTnVtYmVyKGF0dGFjaFByb3BbMV0pID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0XHRpcy5tYXRlcmlhbChjaGlsZCkgJiZcblx0XHRcdFx0IUFycmF5LmlzQXJyYXkocGFyZW50WydtYXRlcmlhbCddKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHBhcmVudFsnbWF0ZXJpYWwnXSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBhdHRhY2hcblx0XHRcdGlmIChjTFMuaXNSYXcpIHtcblx0XHRcdFx0aWYgKGNMUy5wYXJlbnQgJiYgY0xTLnBhcmVudCgpICE9PSBwYXJlbnQpIHtcblx0XHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y0xTLnBhcmVudC5zZXQocGFyZW50KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBhdCB0aGlzIHBvaW50IHdlIGRvbid0IGhhdmUgcmF3VmFsdWUgeWV0LCBzbyB3ZSBiYWlsIGFuZCB3YWl0IHVudGlsIHRoZSBSZW5kZXJlciByZWNhbGxzIGF0dGFjaFxuXHRcdFx0XHRpZiAoY2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRcdFx0YXR0YWNoKHBhcmVudCwgY2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdLCBhdHRhY2hQcm9wKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF0dGFjaChwYXJlbnQsIGNoaWxkLCBhdHRhY2hQcm9wKTtcblx0XHRcdH1cblx0XHRcdC8vIHNhdmUgdmFsdWVcblx0XHRcdGNMUy5wcmV2aW91c0F0dGFjaCA9IGF0dGFjaFByb3AucmVkdWNlKCh2YWx1ZSwgcHJvcGVydHkpID0+IHZhbHVlW3Byb3BlcnR5XSwgcGFyZW50KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXMub2JqZWN0M0QocGFyZW50KSAmJiBpcy5vYmplY3QzRChjaGlsZCkpIHtcblx0XHRwYXJlbnQuYWRkKGNoaWxkKTtcblx0XHRhZGRlZCA9IHRydWU7XG5cdH1cblxuXHRwTFMuYWRkKGNoaWxkLCBhZGRlZCA/ICdvYmplY3RzJyA6ICdub25PYmplY3RzJyk7XG5cblx0aWYgKGNMUy5wYXJlbnQgJiYgY0xTLnBhcmVudCgpICE9PSBwYXJlbnQpIHtcblx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0Y0xTLnBhcmVudC5zZXQocGFyZW50KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChjTFMuYWZ0ZXJBdHRhY2gpIGNMUy5hZnRlckF0dGFjaC5lbWl0KHsgcGFyZW50LCBub2RlOiBjaGlsZCB9KTtcblxuXHRpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuXHRpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGNoaWxkOiBOZ3RJbnN0YW5jZU5vZGUsIGRpc3Bvc2U/OiBib29sZWFuKSB7XG5cdGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcblx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cblx0Ly8gY2xlYXIgcGFyZW50IHJlZlxuXHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdGNMUy5wYXJlbnQ/LnNldChudWxsKTtcblx0fSk7XG5cblx0Ly8gcmVtb3ZlIGNoaWxkIGZyb20gcGFyZW50XG5cdGlmICh1bnRyYWNrZWQocExTLm9iamVjdHMpKSBwTFMucmVtb3ZlKGNoaWxkLCAnb2JqZWN0cycpO1xuXHRpZiAodW50cmFja2VkKHBMUy5ub25PYmplY3RzKSkgcExTLnJlbW92ZShjaGlsZCwgJ25vbk9iamVjdHMnKTtcblxuXHRpZiAoY0xTLmF0dGFjaCkge1xuXHRcdGRldGFjaChwYXJlbnQsIGNoaWxkLCBjTFMuYXR0YWNoKTtcblx0fSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuXHRcdHBhcmVudC5yZW1vdmUoY2hpbGQpO1xuXHRcdHJlbW92ZUludGVyYWN0aXZpdHkoY0xTLnN0b3JlIHx8IHBMUy5zdG9yZSwgY2hpbGQpO1xuXHR9XG5cblx0Y29uc3QgaXNQcmltaXRpdmUgPSBjTFMucHJpbWl0aXZlO1xuXHRpZiAoIWlzUHJpbWl0aXZlKSB7XG5cdFx0cmVtb3ZlVGhyZWVSZWN1cnNpdmUoY0xTLm9iamVjdHMgPyB1bnRyYWNrZWQoY0xTLm9iamVjdHMpIDogW10sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuXHRcdHJlbW92ZVRocmVlUmVjdXJzaXZlKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCwgISFkaXNwb3NlKTtcblx0fVxuXG5cdC8vIGRpc3Bvc2Vcblx0aWYgKCFpc1ByaW1pdGl2ZSAmJiBjaGlsZFsnZGlzcG9zZSddICYmICFpcy5zY2VuZShjaGlsZCkpIHtcblx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiBjaGlsZFsnZGlzcG9zZSddKCkpO1xuXHR9XG5cblx0aW52YWxpZGF0ZUluc3RhbmNlKHBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRocmVlUmVjdXJzaXZlKGFycmF5OiBOZ3RJbnN0YW5jZU5vZGVbXSwgcGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGRpc3Bvc2U6IGJvb2xlYW4pIHtcblx0aWYgKGFycmF5KSBbLi4uYXJyYXldLmZvckVhY2goKGNoaWxkKSA9PiByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgY2hpbGQsIGRpc3Bvc2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGtlYmFiVG9QYXNjYWwoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvLyBzcGxpdCB0aGUgc3RyaW5nIGF0IGVhY2ggaHlwaGVuXG5cdGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCctJyk7XG5cblx0Ly8gbWFwIG92ZXIgdGhlIHBhcnRzLCBjYXBpdGFsaXppbmcgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHBhcnRcblx0Y29uc3QgcGFzY2FsUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0LnNsaWNlKDEpKTtcblxuXHQvLyBqb2luIHRoZSBwYXJ0cyB0b2dldGhlciB0byBjcmVhdGUgdGhlIGZpbmFsIFBhc2NhbENhc2Ugc3RyaW5nXG5cdHJldHVybiBwYXNjYWxQYXJ0cy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUaHJlZUV2ZW50KFxuXHRpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlLFxuXHRwcmlvcml0eTogbnVtYmVyLFxuXHRldmVudE5hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkLFxuXHR6b25lOiBOZ1pvbmUsXG5cdHJvb3RDZHI6IENoYW5nZURldGVjdG9yUmVmLFxuXHR0YXJnZXRDZHI/OiBDaGFuZ2VEZXRlY3RvclJlZiB8IG51bGwsXG4pOiAoKSA9PiB2b2lkIHtcblx0Y29uc3QgbFMgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQkVGT1JFX1JFTkRFUikge1xuXHRcdHJldHVybiBsUy5zdG9yZVxuXHRcdFx0LmdldCgnaW50ZXJuYWwnKVxuXHRcdFx0LnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHsgc3RhdGUsIG9iamVjdDogaW5zdGFuY2UgfSksIHByaW9yaXR5IHx8IGxTLnByaW9yaXR5IHx8IDApO1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQUZURVJfVVBEQVRFIHx8IGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQUZURVJfQVRUQUNIKSB7XG5cdFx0bGV0IGVtaXR0ZXIgPSBsU1tldmVudE5hbWVdO1xuXHRcdGlmICghZW1pdHRlcikgZW1pdHRlciA9IGxTW2V2ZW50TmFtZV0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdFx0Y29uc3Qgc3ViID0gZW1pdHRlci5zdWJzY3JpYmUoY2FsbGJhY2spO1xuXHRcdHJldHVybiBzdWIudW5zdWJzY3JpYmUuYmluZChzdWIpO1xuXHR9XG5cblx0aWYgKCFsUy5oYW5kbGVycykgbFMuaGFuZGxlcnMgPSB7fTtcblxuXHQvLyB0cnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBoYW5kbGVyLiBjb21wb3VuZCBtaWdodCBoYXZlIG9uZSwgdGhlIFRIUkVFIG9iamVjdCBtaWdodCBhbHNvIGhhdmUgb25lIHdpdGggdGhlIHNhbWUgbmFtZVxuXHRjb25zdCBwcmV2aW91c0hhbmRsZXIgPSBsUy5oYW5kbGVyc1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIGxTLmhhbmRsZXJzXTtcblx0Ly8gcmVhZGp1c3QgdGhlIGNhbGxiYWNrXG5cdGNvbnN0IHVwZGF0ZWRDYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG5cdFx0aWYgKHByZXZpb3VzSGFuZGxlcikgcHJldmlvdXNIYW5kbGVyKGV2ZW50KTtcblx0XHR6b25lLnJ1bigoKSA9PiB7XG5cdFx0XHRjYWxsYmFjayhldmVudCk7XG5cdFx0XHRzYWZlRGV0ZWN0Q2hhbmdlcyh0YXJnZXRDZHIsIHJvb3RDZHIpO1xuXHRcdH0pO1xuXHR9O1xuXG5cdE9iamVjdC5hc3NpZ24obFMuaGFuZGxlcnMsIHsgW2V2ZW50TmFtZV06IHVwZGF0ZWRDYWxsYmFjayB9KTtcblxuXHQvLyBpbmNyZW1lbnQgdGhlIGNvdW50IGV2ZXJ5dGltZVxuXHRsUy5ldmVudENvdW50ICs9IDE7XG5cdC8vIGJ1dCBvbmx5IGFkZCB0aGUgaW5zdGFuY2UgKHRhcmdldCkgdG8gdGhlIGludGVyYWN0aW9uIGFycmF5IChzbyB0aGF0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIEV2ZW50TWFuYWdlciB3aXRoIFJheWNhc3QpXG5cdC8vIHRoZSBmaXJzdCB0aW1lIGV2ZW50Q291bnQgaXMgaW5jcmVtZW50ZWRcblx0aWYgKGxTLmV2ZW50Q291bnQgPT09IDEgJiYgaW5zdGFuY2VbJ3JheWNhc3QnXSkgbFMuc3RvcmUuZ2V0KCdpbnRlcm5hbCcsICdpbnRlcmFjdGlvbicpLnB1c2goaW5zdGFuY2UpO1xuXG5cdC8vIGNsZWFuIHVwIHRoZSBldmVudCBsaXN0ZW5lciBieSByZW1vdmluZyB0aGUgdGFyZ2V0IGZyb20gdGhlIGludGVyYWN0aW9uIGFycmF5XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuXHRcdGlmIChsb2NhbFN0YXRlICYmIGxvY2FsU3RhdGUuZXZlbnRDb3VudCkge1xuXHRcdFx0bG9jYWxTdGF0ZS5ldmVudENvdW50IC09IDE7XG5cdFx0XHRjb25zdCBpbmRleCA9IGxvY2FsU3RhdGUuc3RvcmVcblx0XHRcdFx0LmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKVxuXHRcdFx0XHQuZmluZEluZGV4KChvYmopID0+IG9iai51dWlkID09PSBpbnN0YW5jZS51dWlkKTtcblx0XHRcdGlmIChpbmRleCA+PSAwKSBsb2NhbFN0YXRlLnN0b3JlLmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { DestroyRef, effect, inject, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { prepare } from './instance';
|
|
4
|
+
import { injectNgtLoop } from './loop';
|
|
5
|
+
import { injectNgtStore } from './store';
|
|
6
|
+
import { applyProps } from './utils/apply-props';
|
|
7
|
+
import { assertInjectionContext } from './utils/assert-injection-context';
|
|
8
|
+
import { is } from './utils/is';
|
|
9
|
+
import { makeDefaultCamera, makeDefaultRenderer, makeDpr } from './utils/make';
|
|
10
|
+
import { checkNeedsUpdate } from './utils/update';
|
|
11
|
+
const shallowLoose = { objects: 'shallow', strict: false };
|
|
12
|
+
export const roots = new Map();
|
|
13
|
+
export function injectCanvasRootInitializer(injector) {
|
|
14
|
+
injector = assertInjectionContext(injectCanvasRootInitializer, injector);
|
|
15
|
+
return runInInjectionContext(injector, () => {
|
|
16
|
+
const injectedStore = injectNgtStore();
|
|
17
|
+
const loop = injectNgtLoop();
|
|
18
|
+
const destroyRef = inject(DestroyRef);
|
|
19
|
+
return (canvas) => {
|
|
20
|
+
const exist = roots.has(canvas);
|
|
21
|
+
let store = roots.get(canvas);
|
|
22
|
+
if (store) {
|
|
23
|
+
console.warn('[NGT] Same canvas root is being created twice');
|
|
24
|
+
}
|
|
25
|
+
store ||= injectedStore;
|
|
26
|
+
if (!store) {
|
|
27
|
+
throw new Error('[NGT] No store initialized');
|
|
28
|
+
}
|
|
29
|
+
if (!exist) {
|
|
30
|
+
roots.set(canvas, store);
|
|
31
|
+
}
|
|
32
|
+
let isConfigured = false;
|
|
33
|
+
let invalidateRef;
|
|
34
|
+
destroyRef.onDestroy(() => invalidateRef?.destroy());
|
|
35
|
+
return {
|
|
36
|
+
isConfigured,
|
|
37
|
+
destroy: (timeout = 500) => {
|
|
38
|
+
const root = roots.get(canvas);
|
|
39
|
+
if (root) {
|
|
40
|
+
root.set((state) => ({ internal: { ...state.internal, active: false } }));
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
try {
|
|
43
|
+
const state = root.get();
|
|
44
|
+
state.events.disconnect?.();
|
|
45
|
+
state.gl?.renderLists?.dispose?.();
|
|
46
|
+
state.gl?.forceContextLoss?.();
|
|
47
|
+
if (state.gl?.xr)
|
|
48
|
+
state.xr.disconnect();
|
|
49
|
+
dispose(state);
|
|
50
|
+
roots.delete(canvas);
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error('[NGT] Unexpected error while destroying Canvas Root', e);
|
|
54
|
+
}
|
|
55
|
+
}, timeout);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
configure: (inputs) => {
|
|
59
|
+
const { gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, scene: sceneOptions, events, orthographic, lookAt, shadows, linear, legacy, flat, dpr, frameloop, performance, } = inputs;
|
|
60
|
+
const state = store.get();
|
|
61
|
+
const stateToUpdate = {};
|
|
62
|
+
// setup renderer
|
|
63
|
+
let gl = state.gl;
|
|
64
|
+
if (!state.gl)
|
|
65
|
+
stateToUpdate.gl = gl = makeDefaultRenderer(glOptions, canvas);
|
|
66
|
+
// setup raycaster
|
|
67
|
+
let raycaster = state.raycaster;
|
|
68
|
+
if (!raycaster)
|
|
69
|
+
stateToUpdate.raycaster = raycaster = new THREE.Raycaster();
|
|
70
|
+
// set raycaster options
|
|
71
|
+
const { params, ...options } = raycasterOptions || {};
|
|
72
|
+
if (!is.equ(options, raycaster, shallowLoose))
|
|
73
|
+
applyProps(raycaster, { ...options });
|
|
74
|
+
if (!is.equ(params, raycaster.params, shallowLoose)) {
|
|
75
|
+
applyProps(raycaster, { params: { ...raycaster.params, ...(params || {}) } });
|
|
76
|
+
}
|
|
77
|
+
// create default camera
|
|
78
|
+
if (!state.camera) {
|
|
79
|
+
const isCamera = is.camera(cameraOptions);
|
|
80
|
+
let camera = isCamera ? cameraOptions : makeDefaultCamera(orthographic || false, state.size);
|
|
81
|
+
if (!isCamera) {
|
|
82
|
+
if (cameraOptions)
|
|
83
|
+
applyProps(camera, cameraOptions);
|
|
84
|
+
// set position.z
|
|
85
|
+
if (!cameraOptions?.position)
|
|
86
|
+
camera.position.z = 5;
|
|
87
|
+
// always look at center or passed-in lookAt by default
|
|
88
|
+
if (!cameraOptions?.rotation && !cameraOptions?.quaternion) {
|
|
89
|
+
if (Array.isArray(lookAt))
|
|
90
|
+
camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);
|
|
91
|
+
else if (lookAt instanceof THREE.Vector3)
|
|
92
|
+
camera.lookAt(lookAt);
|
|
93
|
+
else
|
|
94
|
+
camera.lookAt(0, 0, 0);
|
|
95
|
+
}
|
|
96
|
+
// update projection matrix after applyprops
|
|
97
|
+
camera.updateProjectionMatrix?.();
|
|
98
|
+
}
|
|
99
|
+
if (!is.instance(camera))
|
|
100
|
+
camera = prepare(camera, { store });
|
|
101
|
+
stateToUpdate.camera = camera;
|
|
102
|
+
}
|
|
103
|
+
// Set up scene (one time only!)
|
|
104
|
+
if (!state.scene) {
|
|
105
|
+
let scene;
|
|
106
|
+
if (sceneOptions instanceof THREE.Scene) {
|
|
107
|
+
scene = prepare(sceneOptions, { store });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
scene = prepare(new THREE.Scene(), { store });
|
|
111
|
+
if (sceneOptions)
|
|
112
|
+
applyProps(scene, sceneOptions);
|
|
113
|
+
}
|
|
114
|
+
stateToUpdate.scene = scene;
|
|
115
|
+
}
|
|
116
|
+
// Set up XR (one time only!)
|
|
117
|
+
if (!state.xr) {
|
|
118
|
+
// Handle frame behavior in WebXR
|
|
119
|
+
const handleXRFrame = (timestamp, frame) => {
|
|
120
|
+
const state = store.get();
|
|
121
|
+
if (state.frameloop === 'never')
|
|
122
|
+
return;
|
|
123
|
+
loop.advance(timestamp, true, store, frame);
|
|
124
|
+
};
|
|
125
|
+
// Toggle render switching on session
|
|
126
|
+
const handleSessionChange = () => {
|
|
127
|
+
const state = store.get();
|
|
128
|
+
state.gl.xr.enabled = state.gl.xr.isPresenting;
|
|
129
|
+
state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);
|
|
130
|
+
if (!state.gl.xr.isPresenting)
|
|
131
|
+
loop.invalidate(store);
|
|
132
|
+
};
|
|
133
|
+
// WebXR session manager
|
|
134
|
+
const xr = {
|
|
135
|
+
connect: () => {
|
|
136
|
+
gl.xr.addEventListener('sessionstart', handleSessionChange);
|
|
137
|
+
gl.xr.addEventListener('sessionend', handleSessionChange);
|
|
138
|
+
},
|
|
139
|
+
disconnect: () => {
|
|
140
|
+
gl.xr.removeEventListener('sessionstart', handleSessionChange);
|
|
141
|
+
gl.xr.removeEventListener('sessionend', handleSessionChange);
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
// Subscribe to WebXR session events
|
|
145
|
+
if (gl.xr && typeof gl.xr.addEventListener === 'function')
|
|
146
|
+
xr.connect();
|
|
147
|
+
stateToUpdate.xr = xr;
|
|
148
|
+
}
|
|
149
|
+
// Set shadowmap
|
|
150
|
+
if (gl.shadowMap) {
|
|
151
|
+
const oldEnabled = gl.shadowMap.enabled;
|
|
152
|
+
const oldType = gl.shadowMap.type;
|
|
153
|
+
gl.shadowMap.enabled = !!shadows;
|
|
154
|
+
if (typeof shadows === 'boolean') {
|
|
155
|
+
gl.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
156
|
+
}
|
|
157
|
+
else if (typeof shadows === 'string') {
|
|
158
|
+
const types = {
|
|
159
|
+
basic: THREE.BasicShadowMap,
|
|
160
|
+
percentage: THREE.PCFShadowMap,
|
|
161
|
+
soft: THREE.PCFSoftShadowMap,
|
|
162
|
+
variance: THREE.VSMShadowMap,
|
|
163
|
+
};
|
|
164
|
+
gl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap;
|
|
165
|
+
}
|
|
166
|
+
else if (is.obj(shadows)) {
|
|
167
|
+
Object.assign(gl.shadowMap, shadows);
|
|
168
|
+
}
|
|
169
|
+
if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type)
|
|
170
|
+
checkNeedsUpdate(gl.shadowMap);
|
|
171
|
+
}
|
|
172
|
+
// Safely set color management if available.
|
|
173
|
+
// Avoid accessing THREE.ColorManagement to play nice with older versions
|
|
174
|
+
if (THREE.ColorManagement) {
|
|
175
|
+
const ColorManagement = THREE.ColorManagement;
|
|
176
|
+
if ('enabled' in ColorManagement)
|
|
177
|
+
ColorManagement['enabled'] = !legacy ?? false;
|
|
178
|
+
else if ('legacyMode' in ColorManagement)
|
|
179
|
+
ColorManagement['legacyMode'] = legacy ?? true;
|
|
180
|
+
}
|
|
181
|
+
// set color space and tonemapping preferences
|
|
182
|
+
const LinearEncoding = 3000;
|
|
183
|
+
const sRGBEncoding = 3001;
|
|
184
|
+
applyProps(gl, {
|
|
185
|
+
outputEncoding: linear ? LinearEncoding : sRGBEncoding,
|
|
186
|
+
toneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping,
|
|
187
|
+
});
|
|
188
|
+
// Update color management state
|
|
189
|
+
if (state.legacy !== legacy)
|
|
190
|
+
stateToUpdate.legacy = legacy;
|
|
191
|
+
if (state.linear !== linear)
|
|
192
|
+
stateToUpdate.linear = linear;
|
|
193
|
+
if (state.flat !== flat)
|
|
194
|
+
stateToUpdate.flat = flat;
|
|
195
|
+
// Set gl props
|
|
196
|
+
gl.setClearAlpha(0);
|
|
197
|
+
gl.setPixelRatio(makeDpr(state.viewport.dpr));
|
|
198
|
+
gl.setSize(state.size.width, state.size.height);
|
|
199
|
+
if (is.obj(glOptions) &&
|
|
200
|
+
!(typeof glOptions === 'function') &&
|
|
201
|
+
!is.renderer(glOptions) &&
|
|
202
|
+
!is.equ(glOptions, gl, shallowLoose)) {
|
|
203
|
+
applyProps(gl, glOptions);
|
|
204
|
+
}
|
|
205
|
+
// Store events internally
|
|
206
|
+
if (events && !state.events.handlers)
|
|
207
|
+
stateToUpdate.events = events(store);
|
|
208
|
+
// Check performance
|
|
209
|
+
if (performance && !is.equ(performance, state.performance, shallowLoose)) {
|
|
210
|
+
stateToUpdate.performance = { ...state.performance, ...performance };
|
|
211
|
+
}
|
|
212
|
+
store.set(stateToUpdate);
|
|
213
|
+
// Check size, allow it to take on container bounds initially
|
|
214
|
+
const size = computeInitialSize(canvas, sizeOptions);
|
|
215
|
+
if (!is.equ(size, state.size, shallowLoose)) {
|
|
216
|
+
state.setSize(size.width, size.height, size.top, size.left);
|
|
217
|
+
}
|
|
218
|
+
// Check pixelratio
|
|
219
|
+
if (dpr && state.viewport.dpr !== makeDpr(dpr))
|
|
220
|
+
state.setDpr(dpr);
|
|
221
|
+
// Check frameloop
|
|
222
|
+
if (state.frameloop !== frameloop)
|
|
223
|
+
state.setFrameloop(frameloop);
|
|
224
|
+
isConfigured = true;
|
|
225
|
+
invalidateRef?.destroy();
|
|
226
|
+
invalidateRef = effect(() => void store.state().invalidate(), { manualCleanup: true, injector });
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
function computeInitialSize(canvas, defaultSize) {
|
|
233
|
+
if (defaultSize)
|
|
234
|
+
return defaultSize;
|
|
235
|
+
if (canvas instanceof HTMLCanvasElement && canvas.parentElement) {
|
|
236
|
+
return canvas.parentElement.getBoundingClientRect();
|
|
237
|
+
}
|
|
238
|
+
return { width: 0, height: 0, top: 0, left: 0 };
|
|
239
|
+
}
|
|
240
|
+
// Disposes an object and all its properties
|
|
241
|
+
function dispose(obj) {
|
|
242
|
+
if (obj.dispose && obj.type !== 'Scene')
|
|
243
|
+
obj.dispose();
|
|
244
|
+
for (const p in obj) {
|
|
245
|
+
p.dispose?.();
|
|
246
|
+
delete obj[p];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yb290cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUErQixNQUFNLFNBQVMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBK0MsQ0FBQztBQUU1RSxNQUFNLFVBQVUsMkJBQTJCLENBQUMsUUFBbUI7SUFDOUQsUUFBUSxHQUFHLHNCQUFzQixDQUFDLDJCQUEyQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFN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ekIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbEcsQ0FBQzthQUNELENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFJRCxTQUFTLGtCQUFrQixDQUFDLE1BQWlELEVBQUUsV0FBcUI7SUFDbkcsSUFBSSxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFcEMsSUFBSSxNQUFNLFlBQVksaUJBQWlCLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtRQUNoRSxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztLQUNwRDtJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxTQUFTLE9BQU8sQ0FBMkUsR0FBUztJQUNuRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ25CLENBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Q7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBFZmZlY3RSZWYsIHR5cGUgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FudmFzSW5wdXRzIH0gZnJvbSAnLi9jYW52YXMnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0TG9vcCB9IGZyb20gJy4vbG9vcCc7XG5pbXBvcnQgeyBpbmplY3ROZ3RTdG9yZSwgdHlwZSBOZ3RTaXplLCB0eXBlIE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0RXF1Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnLi91dGlscy9hc3NlcnQtaW5qZWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IG1ha2VEZWZhdWx0Q2FtZXJhLCBtYWtlRGVmYXVsdFJlbmRlcmVyLCBtYWtlRHByIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5jb25zdCBzaGFsbG93TG9vc2UgPSB7IG9iamVjdHM6ICdzaGFsbG93Jywgc3RyaWN0OiBmYWxzZSB9IGFzIE5ndEVxdUNvbmZpZztcblxuZXhwb3J0IGNvbnN0IHJvb3RzID0gbmV3IE1hcDxIVE1MQ2FudmFzRWxlbWVudCwgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyKGluamVjdG9yPzogSW5qZWN0b3IpIHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplciwgaW5qZWN0b3IpO1xuXG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBpbmplY3RlZFN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0XHRjb25zdCBsb29wID0gaW5qZWN0Tmd0TG9vcCgpO1xuXHRcdGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cblx0XHRyZXR1cm4gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IGV4aXN0ID0gcm9vdHMuaGFzKGNhbnZhcyk7XG5cdFx0XHRsZXQgc3RvcmUgPSByb290cy5nZXQoY2FudmFzKSBhcyBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT47XG5cblx0XHRcdGlmIChzdG9yZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1tOR1RdIFNhbWUgY2FudmFzIHJvb3QgaXMgYmVpbmcgY3JlYXRlZCB0d2ljZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdG9yZSB8fD0gaW5qZWN0ZWRTdG9yZTtcblxuXHRcdFx0aWYgKCFzdG9yZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1tOR1RdIE5vIHN0b3JlIGluaXRpYWxpemVkJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghZXhpc3QpIHtcblx0XHRcdFx0cm9vdHMuc2V0KGNhbnZhcywgc3RvcmUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaXNDb25maWd1cmVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaW52YWxpZGF0ZVJlZjogRWZmZWN0UmVmO1xuXG5cdFx0XHRkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBpbnZhbGlkYXRlUmVmPy5kZXN0cm95KCkpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0NvbmZpZ3VyZWQsXG5cdFx0XHRcdGRlc3Ryb3k6ICh0aW1lb3V0ID0gNTAwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IHJvb3RzLmdldChjYW52YXMpO1xuXHRcdFx0XHRcdGlmIChyb290KSB7XG5cdFx0XHRcdFx0XHRyb290LnNldCgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IGZhbHNlIH0gfSkpO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LmdldCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZS5nbD8ucmVuZGVyTGlzdHM/LmRpc3Bvc2U/LigpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmdsPy5mb3JjZUNvbnRleHRMb3NzPy4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZ2w/LnhyKSBzdGF0ZS54ci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcG9zZShzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdFx0cm9vdHMuZGVsZXRlKGNhbnZhcyk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbTkdUXSBVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGRlc3Ryb3lpbmcgQ2FudmFzIFJvb3QnLCBlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25maWd1cmU6IChpbnB1dHM6IE5ndENhbnZhc0lucHV0cykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGdsOiBnbE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRzaXplOiBzaXplT3B0aW9ucyxcblx0XHRcdFx0XHRcdGNhbWVyYTogY2FtZXJhT3B0aW9ucyxcblx0XHRcdFx0XHRcdHJheWNhc3RlcjogcmF5Y2FzdGVyT3B0aW9ucyxcblx0XHRcdFx0XHRcdHNjZW5lOiBzY2VuZU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRldmVudHMsXG5cdFx0XHRcdFx0XHRvcnRob2dyYXBoaWMsXG5cdFx0XHRcdFx0XHRsb29rQXQsXG5cdFx0XHRcdFx0XHRzaGFkb3dzLFxuXHRcdFx0XHRcdFx0bGluZWFyLFxuXHRcdFx0XHRcdFx0bGVnYWN5LFxuXHRcdFx0XHRcdFx0ZmxhdCxcblx0XHRcdFx0XHRcdGRwcixcblx0XHRcdFx0XHRcdGZyYW1lbG9vcCxcblx0XHRcdFx0XHRcdHBlcmZvcm1hbmNlLFxuXHRcdFx0XHRcdH0gPSBpbnB1dHM7XG5cblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0XHRcdGNvbnN0IHN0YXRlVG9VcGRhdGU6IFBhcnRpYWw8Tmd0U3RhdGU+ID0ge307XG5cblx0XHRcdFx0XHQvLyBzZXR1cCByZW5kZXJlclxuXHRcdFx0XHRcdGxldCBnbCA9IHN0YXRlLmdsO1xuXHRcdFx0XHRcdGlmICghc3RhdGUuZ2wpIHN0YXRlVG9VcGRhdGUuZ2wgPSBnbCA9IG1ha2VEZWZhdWx0UmVuZGVyZXIoZ2xPcHRpb25zLCBjYW52YXMpO1xuXG5cdFx0XHRcdFx0Ly8gc2V0dXAgcmF5Y2FzdGVyXG5cdFx0XHRcdFx0bGV0IHJheWNhc3RlciA9IHN0YXRlLnJheWNhc3Rlcjtcblx0XHRcdFx0XHRpZiAoIXJheWNhc3Rlcikgc3RhdGVUb1VwZGF0ZS5yYXljYXN0ZXIgPSByYXljYXN0ZXIgPSBuZXcgVEhSRUUuUmF5Y2FzdGVyKCk7XG5cblx0XHRcdFx0XHQvLyBzZXQgcmF5Y2FzdGVyIG9wdGlvbnNcblx0XHRcdFx0XHRjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcblx0XHRcdFx0XHRpZiAoIWlzLmVxdShvcHRpb25zLCByYXljYXN0ZXIsIHNoYWxsb3dMb29zZSkpIGFwcGx5UHJvcHMocmF5Y2FzdGVyLCB7IC4uLm9wdGlvbnMgfSk7XG5cdFx0XHRcdFx0aWYgKCFpcy5lcXUocGFyYW1zLCByYXljYXN0ZXIucGFyYW1zLCBzaGFsbG93TG9vc2UpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVByb3BzKHJheWNhc3RlciwgeyBwYXJhbXM6IHsgLi4ucmF5Y2FzdGVyLnBhcmFtcywgLi4uKHBhcmFtcyB8fCB7fSkgfSB9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBjcmVhdGUgZGVmYXVsdCBjYW1lcmFcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmNhbWVyYSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDYW1lcmEgPSBpcy5jYW1lcmEoY2FtZXJhT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRsZXQgY2FtZXJhID0gaXNDYW1lcmEgPyBjYW1lcmFPcHRpb25zIDogbWFrZURlZmF1bHRDYW1lcmEob3J0aG9ncmFwaGljIHx8IGZhbHNlLCBzdGF0ZS5zaXplKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFpc0NhbWVyYSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FtZXJhT3B0aW9ucykgYXBwbHlQcm9wcyhjYW1lcmEsIGNhbWVyYU9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIHNldCBwb3NpdGlvbi56XG5cdFx0XHRcdFx0XHRcdGlmICghY2FtZXJhT3B0aW9ucz8ucG9zaXRpb24pIGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcblxuXHRcdFx0XHRcdFx0XHQvLyBhbHdheXMgbG9vayBhdCBjZW50ZXIgb3IgcGFzc2VkLWluIGxvb2tBdCBieSBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdGlmICghY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIGNhbWVyYS5sb29rQXQobG9va0F0KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlwcm9wc1xuXHRcdFx0XHRcdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmUgfSk7XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNldCB1cCBzY2VuZSAob25lIHRpbWUgb25seSEpXG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5zY2VuZSkge1xuXHRcdFx0XHRcdFx0bGV0IHNjZW5lOiBUSFJFRS5TY2VuZTtcblxuXHRcdFx0XHRcdFx0aWYgKHNjZW5lT3B0aW9ucyBpbnN0YW5jZW9mIFRIUkVFLlNjZW5lKSB7XG5cdFx0XHRcdFx0XHRcdHNjZW5lID0gcHJlcGFyZShzY2VuZU9wdGlvbnMsIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzY2VuZSA9IHByZXBhcmUobmV3IFRIUkVFLlNjZW5lKCksIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0XHRcdGlmIChzY2VuZU9wdGlvbnMpIGFwcGx5UHJvcHMoc2NlbmUsIHNjZW5lT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuc2NlbmUgPSBzY2VuZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuXHRcdFx0XHRcdGlmICghc3RhdGUueHIpIHtcblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmcmFtZSBiZWhhdmlvciBpbiBXZWJYUlxuXHRcdFx0XHRcdFx0Y29uc3QgaGFuZGxlWFJGcmFtZTogWFJGcmFtZVJlcXVlc3RDYWxsYmFjayA9ICh0aW1lc3RhbXA6IG51bWJlciwgZnJhbWU/OiBYUkZyYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0bG9vcC5hZHZhbmNlKHRpbWVzdGFtcCwgdHJ1ZSwgc3RvcmUsIGZyYW1lKTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cblx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLmdsLnhyLmVuYWJsZWQgPSBzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmc7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUuZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcgPyBoYW5kbGVYUkZyYW1lIDogbnVsbCk7XG5cdFx0XHRcdFx0XHRcdGlmICghc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nKSBsb29wLmludmFsaWRhdGUoc3RvcmUpO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gV2ViWFIgc2Vzc2lvbiBtYW5hZ2VyXG5cdFx0XHRcdFx0XHRjb25zdCB4ciA9IHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdC8vIFN1YnNjcmliZSB0byBXZWJYUiBzZXNzaW9uIGV2ZW50c1xuXHRcdFx0XHRcdFx0aWYgKGdsLnhyICYmIHR5cGVvZiBnbC54ci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB4ci5jb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRzdGF0ZVRvVXBkYXRlLnhyID0geHI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHNoYWRvd21hcFxuXHRcdFx0XHRcdGlmIChnbC5zaGFkb3dNYXApIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZEVuYWJsZWQgPSBnbC5zaGFkb3dNYXAuZW5hYmxlZDtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZFR5cGUgPSBnbC5zaGFkb3dNYXAudHlwZTtcblx0XHRcdFx0XHRcdGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0XHRnbC5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0eXBlcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRiYXNpYzogVEhSRUUuQmFzaWNTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0cGVyY2VudGFnZTogVEhSRUUuUENGU2hhZG93TWFwLFxuXHRcdFx0XHRcdFx0XHRcdHNvZnQ6IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFuY2U6IFRIUkVFLlZTTVNoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Z2wuc2hhZG93TWFwLnR5cGUgPSB0eXBlc1tzaGFkb3dzXSA/PyBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpcy5vYmooc2hhZG93cykpIHtcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihnbC5zaGFkb3dNYXAsIHNoYWRvd3MpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob2xkRW5hYmxlZCAhPT0gZ2wuc2hhZG93TWFwLmVuYWJsZWQgfHwgb2xkVHlwZSAhPT0gZ2wuc2hhZG93TWFwLnR5cGUpXG5cdFx0XHRcdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUoZ2wuc2hhZG93TWFwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTYWZlbHkgc2V0IGNvbG9yIG1hbmFnZW1lbnQgaWYgYXZhaWxhYmxlLlxuXHRcdFx0XHRcdC8vIEF2b2lkIGFjY2Vzc2luZyBUSFJFRS5Db2xvck1hbmFnZW1lbnQgdG8gcGxheSBuaWNlIHdpdGggb2xkZXIgdmVyc2lvbnNcblx0XHRcdFx0XHRpZiAoVEhSRUUuQ29sb3JNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBDb2xvck1hbmFnZW1lbnQgPSBUSFJFRS5Db2xvck1hbmFnZW1lbnQgYXMgTmd0QW55UmVjb3JkO1xuXHRcdFx0XHRcdFx0aWYgKCdlbmFibGVkJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnZW5hYmxlZCddID0gIWxlZ2FjeSA/PyBmYWxzZTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKCdsZWdhY3lNb2RlJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnbGVnYWN5TW9kZSddID0gbGVnYWN5ID8/IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc2V0IGNvbG9yIHNwYWNlIGFuZCB0b25lbWFwcGluZyBwcmVmZXJlbmNlc1xuXHRcdFx0XHRcdGNvbnN0IExpbmVhckVuY29kaW5nID0gMzAwMDtcblx0XHRcdFx0XHRjb25zdCBzUkdCRW5jb2RpbmcgPSAzMDAxO1xuXHRcdFx0XHRcdGFwcGx5UHJvcHMoZ2wsIHtcblx0XHRcdFx0XHRcdG91dHB1dEVuY29kaW5nOiBsaW5lYXIgPyBMaW5lYXJFbmNvZGluZyA6IHNSR0JFbmNvZGluZyxcblx0XHRcdFx0XHRcdHRvbmVNYXBwaW5nOiBmbGF0ID8gVEhSRUUuTm9Ub25lTWFwcGluZyA6IFRIUkVFLkFDRVNGaWxtaWNUb25lTWFwcGluZyxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHN0YXRlXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmxlZ2FjeSAhPT0gbGVnYWN5KSBzdGF0ZVRvVXBkYXRlLmxlZ2FjeSA9IGxlZ2FjeTtcblx0XHRcdFx0XHRpZiAoc3RhdGUubGluZWFyICE9PSBsaW5lYXIpIHN0YXRlVG9VcGRhdGUubGluZWFyID0gbGluZWFyO1xuXHRcdFx0XHRcdGlmIChzdGF0ZS5mbGF0ICE9PSBmbGF0KSBzdGF0ZVRvVXBkYXRlLmZsYXQgPSBmbGF0O1xuXG5cdFx0XHRcdFx0Ly8gU2V0IGdsIHByb3BzXG5cdFx0XHRcdFx0Z2wuc2V0Q2xlYXJBbHBoYSgwKTtcblx0XHRcdFx0XHRnbC5zZXRQaXhlbFJhdGlvKG1ha2VEcHIoc3RhdGUudmlld3BvcnQuZHByKSk7XG5cdFx0XHRcdFx0Z2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpcy5vYmooZ2xPcHRpb25zKSAmJlxuXHRcdFx0XHRcdFx0ISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRcdFx0IWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcblx0XHRcdFx0XHRcdCFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhnbCwgZ2xPcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuXHRcdFx0XHRcdGlmIChldmVudHMgJiYgIXN0YXRlLmV2ZW50cy5oYW5kbGVycykgc3RhdGVUb1VwZGF0ZS5ldmVudHMgPSBldmVudHMoc3RvcmUpO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGVyZm9ybWFuY2Vcblx0XHRcdFx0XHRpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUucGVyZm9ybWFuY2UgPSB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0b3JlLnNldChzdGF0ZVRvVXBkYXRlKTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIHNpemUsIGFsbG93IGl0IHRvIHRha2Ugb24gY29udGFpbmVyIGJvdW5kcyBpbml0aWFsbHlcblx0XHRcdFx0XHRjb25zdCBzaXplID0gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhcywgc2l6ZU9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KHNpemUsIHN0YXRlLnNpemUsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHNpemUudG9wLCBzaXplLmxlZnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDaGVjayBwaXhlbHJhdGlvXG5cdFx0XHRcdFx0aWYgKGRwciAmJiBzdGF0ZS52aWV3cG9ydC5kcHIgIT09IG1ha2VEcHIoZHByKSkgc3RhdGUuc2V0RHByKGRwcik7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZnJhbWVsb29wXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmZyYW1lbG9vcCAhPT0gZnJhbWVsb29wKSBzdGF0ZS5zZXRGcmFtZWxvb3AoZnJhbWVsb29wKTtcblxuXHRcdFx0XHRcdGlzQ29uZmlndXJlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRpbnZhbGlkYXRlUmVmPy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0aW52YWxpZGF0ZVJlZiA9IGVmZmVjdCgoKSA9PiB2b2lkIHN0b3JlLnN0YXRlKCkuaW52YWxpZGF0ZSgpLCB7IG1hbnVhbENsZWFudXA6IHRydWUsIGluamVjdG9yIH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0fTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FudmFzQ29uZmlndXJhdG9yID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXI+PjtcblxuZnVuY3Rpb24gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBUSFJFRS5PZmZzY3JlZW5DYW52YXMsIGRlZmF1bHRTaXplPzogTmd0U2l6ZSk6IE5ndFNpemUge1xuXHRpZiAoZGVmYXVsdFNpemUpIHJldHVybiBkZWZhdWx0U2l6ZTtcblxuXHRpZiAoY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgJiYgY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdH1cblxuXHRyZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IDAsIGxlZnQ6IDAgfTtcbn1cblxuLy8gRGlzcG9zZXMgYW4gb2JqZWN0IGFuZCBhbGwgaXRzIHByb3BlcnRpZXNcbmZ1bmN0aW9uIGRpc3Bvc2U8VE9iaiBleHRlbmRzIHsgZGlzcG9zZT86ICgpID0+IHZvaWQ7IHR5cGU/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9PihvYmo6IFRPYmopIHtcblx0aWYgKG9iai5kaXNwb3NlICYmIG9iai50eXBlICE9PSAnU2NlbmUnKSBvYmouZGlzcG9zZSgpO1xuXHRmb3IgKGNvbnN0IHAgaW4gb2JqKSB7XG5cdFx0KHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcblx0XHRkZWxldGUgb2JqW3BdO1xuXHR9XG59XG4iXX0=
|
|
@@ -3,11 +3,11 @@ import { ChangeDetectorRef, Component } from '@angular/core';
|
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { ActivationEnd, Router, RouterOutlet } from '@angular/router';
|
|
5
5
|
import { filter } from 'rxjs';
|
|
6
|
-
import { ROUTED_SCENE } from './renderer/
|
|
6
|
+
import { ROUTED_SCENE } from './renderer/constants';
|
|
7
7
|
import { safeDetectChanges } from './utils/safe-detect-changes';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "@angular/router";
|
|
10
|
-
class NgtRoutedScene {
|
|
10
|
+
export class NgtRoutedScene {
|
|
11
11
|
static { _a = ROUTED_SCENE; }
|
|
12
12
|
static { this[_a] = true; }
|
|
13
13
|
constructor(router, cdr) {
|
|
@@ -15,11 +15,10 @@ class NgtRoutedScene {
|
|
|
15
15
|
.pipe(filter((event) => event instanceof ActivationEnd), takeUntilDestroyed())
|
|
16
16
|
.subscribe(() => safeDetectChanges(cdr));
|
|
17
17
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtRoutedScene, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `<router-outlet />`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
23
22
|
type: Component,
|
|
24
23
|
args: [{
|
|
25
24
|
standalone: true,
|
|
@@ -28,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
28
27
|
imports: [RouterOutlet],
|
|
29
28
|
}]
|
|
30
29
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ChangeDetectorRef }]; } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXNjZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcm91dGVkLXNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFRaEUsTUFBTSxPQUFPLGNBQWM7a0JBQ2xCLFlBQVk7YUFBYixRQUFjLEdBQUcsSUFBSSxBQUFQLENBQVE7SUFFN0IsWUFBWSxNQUFjLEVBQUUsR0FBc0I7UUFDakQsTUFBTSxDQUFDLE1BQU07YUFDWCxJQUFJLENBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLEVBQ2pELGtCQUFrQixFQUFFLENBQ3BCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0FWVyxjQUFjO2tHQUFkLGNBQWMsNEVBSGhCLG1CQUFtQiw0REFDbkIsWUFBWTs7MkZBRVYsY0FBYztrQkFOMUIsU0FBUzttQkFBQztvQkFDVixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUk9VVEVEX1NDRU5FIH0gZnJvbSAnLi9yZW5kZXJlci9jb25zdGFudHMnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMnO1xuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c2VsZWN0b3I6ICduZ3Qtcm91dGVkLXNjZW5lJyxcblx0dGVtcGxhdGU6IGA8cm91dGVyLW91dGxldCAvPmAsXG5cdGltcG9ydHM6IFtSb3V0ZXJPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RSb3V0ZWRTY2VuZSB7XG5cdHN0YXRpYyBbUk9VVEVEX1NDRU5FXSA9IHRydWU7XG5cblx0Y29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcblx0XHRyb3V0ZXIuZXZlbnRzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSxcblx0XHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKCksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHNhZmVEZXRlY3RDaGFuZ2VzKGNkcikpO1xuXHR9XG59XG4iXX0=
|