angular-three-soba 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/assets/distort.vert.glsl +1 -0
  2. package/esm2020/materials/angular-three-soba-materials.mjs +5 -0
  3. package/esm2020/materials/index.mjs +4 -0
  4. package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +74 -0
  5. package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +328 -0
  6. package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +67 -0
  7. package/esm2020/shaders/index.mjs +6 -1
  8. package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +61 -0
  9. package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +94 -0
  10. package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +55 -0
  11. package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  12. package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  13. package/fesm2015/angular-three-soba-materials.mjs +468 -0
  14. package/fesm2015/angular-three-soba-materials.mjs.map +1 -0
  15. package/fesm2015/angular-three-soba-shaders.mjs +467 -1
  16. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
  17. package/fesm2020/angular-three-soba-materials.mjs +468 -0
  18. package/fesm2020/angular-three-soba-materials.mjs.map +1 -0
  19. package/fesm2020/angular-three-soba-shaders.mjs +466 -1
  20. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
  21. package/materials/README.md +3 -0
  22. package/materials/index.d.ts +3 -0
  23. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +19 -0
  24. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +41 -0
  25. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +14 -0
  26. package/package.json +37 -28
  27. package/plugin/package.json +1 -1
  28. package/shaders/index.d.ts +5 -0
  29. package/shaders/lib/blur-pass/blur-pass.d.ts +23 -0
  30. package/shaders/lib/convolution-material/convolution-material.d.ts +7 -0
  31. package/shaders/lib/mesh-distort-material/mesh-distort-material.d.ts +144 -0
  32. package/shaders/lib/mesh-reflector-material/mesh-reflector-material.d.ts +50 -0
  33. package/shaders/lib/mesh-wobble-material/mesh-wobble-material.d.ts +15 -0
@@ -0,0 +1 @@
1
+ #pragma glslify: snoise3 = require(glsl-noise/simplex/3d)
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLW1hdGVyaWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21hdGVyaWFscy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLW1hdGVyaWFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './lib/mesh-distort-material/mesh-distort-material';
2
+ export * from './lib/mesh-reflector-material/mesh-reflector-material';
3
+ export * from './lib/mesh-wobble-material/mesh-wobble-material';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
@@ -0,0 +1,74 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
2
+ import { injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
3
+ import { NGTS_DISTORT_MATERIAL_SHADER } from 'angular-three-soba/shaders';
4
+ import * as i0 from "@angular/core";
5
+ export class NgtsMeshDistortMaterial extends NgtRxStore {
6
+ set time(time) {
7
+ this.set({ time });
8
+ }
9
+ set distort(distort) {
10
+ this.set({ distort });
11
+ }
12
+ set radius(radius) {
13
+ this.set({ radius });
14
+ }
15
+ set speed(speed) {
16
+ this.set({ speed });
17
+ }
18
+ initialize() {
19
+ super.initialize();
20
+ this.set({ speed: 1, time: 0, distort: 0.4, radius: 1 });
21
+ }
22
+ constructor() {
23
+ super();
24
+ this.MeshDistortMaterial = inject(NGTS_DISTORT_MATERIAL_SHADER);
25
+ this.material = new this.MeshDistortMaterial();
26
+ this.materialRef = injectNgtRef();
27
+ injectBeforeRender(({ clock }) => {
28
+ this.material.time = clock.getElapsedTime() * this.get('speed');
29
+ });
30
+ }
31
+ }
32
+ NgtsMeshDistortMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
+ NgtsMeshDistortMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { materialRef: "materialRef", time: "time", distort: "distort", radius: "radius", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
34
+ <ngt-primitive
35
+ *args="[material]"
36
+ [ref]="materialRef"
37
+ [time]="get('time')"
38
+ [distort]="get('distort')"
39
+ [radius]="get('radius')"
40
+ ngtCompound
41
+ attach="material"
42
+ />
43
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
45
+ type: Component,
46
+ args: [{
47
+ selector: 'ngts-mesh-distort-material',
48
+ standalone: true,
49
+ template: `
50
+ <ngt-primitive
51
+ *args="[material]"
52
+ [ref]="materialRef"
53
+ [time]="get('time')"
54
+ [distort]="get('distort')"
55
+ [radius]="get('radius')"
56
+ ngtCompound
57
+ attach="material"
58
+ />
59
+ `,
60
+ imports: [NgtArgs],
61
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
62
+ }]
63
+ }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
64
+ type: Input
65
+ }], time: [{
66
+ type: Input
67
+ }], distort: [{
68
+ type: Input
69
+ }], radius: [{
70
+ type: Input
71
+ }], speed: [{
72
+ type: Input
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1CMUUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQVU7SUFPbkQsSUFBYSxJQUFJLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVEsVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUE1Qkgsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFM0QsYUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFMUMsZ0JBQVcsR0FBRyxZQUFZLEVBQW1DLENBQUM7UUF5Qm5FLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7b0hBakNRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlOQWR0Qjs7Ozs7Ozs7OztLQVVULDREQUNTLE9BQU87MkZBR1IsdUJBQXVCO2tCQWpCbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0tBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBTVksV0FBVztzQkFBbkIsS0FBSztnQkFFTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0QXJncywgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLW1lc2gtZGlzdG9ydC1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgKmFyZ3M9XCJbbWF0ZXJpYWxdXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW3RpbWVdPVwiZ2V0KCd0aW1lJylcIlxuICAgICAgICAgICAgW2Rpc3RvcnRdPVwiZ2V0KCdkaXN0b3J0JylcIlxuICAgICAgICAgICAgW3JhZGl1c109XCJnZXQoJ3JhZGl1cycpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIHJlYWRvbmx5IE1lc2hEaXN0b3J0TWF0ZXJpYWwgPSBpbmplY3QoTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUik7XG5cbiAgICByZWFkb25seSBtYXRlcmlhbCA9IG5ldyB0aGlzLk1lc2hEaXN0b3J0TWF0ZXJpYWwoKTtcblxuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPHR5cGVvZiB0aGlzLk1lc2hEaXN0b3J0TWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0aW1lIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXN0b3J0KGRpc3RvcnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc3RvcnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJhZGl1cyhyYWRpdXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3BlZWQoc3BlZWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoeyBzcGVlZDogMSwgdGltZTogMCwgZGlzdG9ydDogMC40LCByYWRpdXM6IDEgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBjbG9jayB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRpbWUgPSBjbG9jay5nZXRFbGFwc2VkVGltZSgpICogdGhpcy5nZXQoJ3NwZWVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,328 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtArgs, NgtPush, NgtRxStore, NgtStore, startWithUndefined, } from 'angular-three';
4
+ import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/shaders';
5
+ import { combineLatest, debounceTime, map } from 'rxjs';
6
+ import * as THREE from 'three';
7
+ import * as i0 from "@angular/core";
8
+ extend({ MeshReflectorMaterial });
9
+ export class NgtsMeshReflectorMaterial extends NgtRxStore {
10
+ set resolution(resolution) {
11
+ this.set({ resolution });
12
+ }
13
+ set mixBlur(mixBlur) {
14
+ this.set({ mixBlur });
15
+ }
16
+ set mixStrength(mixStrength) {
17
+ this.set({ mixStrength });
18
+ }
19
+ set blur(blur) {
20
+ this.set({ blur });
21
+ }
22
+ set mirror(mirror) {
23
+ this.set({ mirror });
24
+ }
25
+ set minDepthThreshold(minDepthThreshold) {
26
+ this.set({ minDepthThreshold });
27
+ }
28
+ set maxDepthThreshold(maxDepthThreshold) {
29
+ this.set({ maxDepthThreshold });
30
+ }
31
+ set depthScale(depthScale) {
32
+ this.set({ depthScale });
33
+ }
34
+ set depthToBlurRatioBias(depthToBlurRatioBias) {
35
+ this.set({ depthToBlurRatioBias });
36
+ }
37
+ set distortionMap(distortionMap) {
38
+ this.set({ distortionMap });
39
+ }
40
+ set distortion(distortion) {
41
+ this.set({ distortion });
42
+ }
43
+ set mixContrast(mixContrast) {
44
+ this.set({ mixContrast });
45
+ }
46
+ set reflectorOffset(reflectorOffset) {
47
+ this.set({ reflectorOffset });
48
+ }
49
+ get reflectorProps() {
50
+ return this.get('reflectorEntities', 'reflectorProps');
51
+ }
52
+ initialize() {
53
+ super.initialize();
54
+ this.set({
55
+ mixBlur: 0,
56
+ mixStrength: 1,
57
+ resolution: 256,
58
+ blur: [0, 0],
59
+ minDepthThreshold: 0.9,
60
+ maxDepthThreshold: 1,
61
+ depthScale: 0,
62
+ depthToBlurRatioBias: 0.25,
63
+ mirror: 0,
64
+ distortion: 1,
65
+ mixContrast: 1,
66
+ reflectorOffset: 0,
67
+ });
68
+ }
69
+ constructor() {
70
+ super();
71
+ this.materialRef = injectNgtRef();
72
+ this.defines$ = this.select('reflectorEntities', 'reflectorProps', 'defines').pipe(debounceTime(0));
73
+ this.store = inject(NgtStore);
74
+ this.reflectorPlane = new THREE.Plane();
75
+ this.normal = new THREE.Vector3();
76
+ this.reflectorWorldPosition = new THREE.Vector3();
77
+ this.cameraWorldPosition = new THREE.Vector3();
78
+ this.rotationMatrix = new THREE.Matrix4();
79
+ this.lookAtPosition = new THREE.Vector3(0, 0, -1);
80
+ this.clipPlane = new THREE.Vector4();
81
+ this.view = new THREE.Vector3();
82
+ this.target = new THREE.Vector3();
83
+ this.q = new THREE.Vector4();
84
+ this.textureMatrix = new THREE.Matrix4();
85
+ this.virtualCamera = new THREE.PerspectiveCamera();
86
+ this.connect('normalizedBlur', this.select('blur').pipe(map((blur) => (Array.isArray(blur) ? blur : [blur, blur]))));
87
+ this.connect('hasBlur', this.select('normalizedBlur').pipe(map(([x, y]) => x + y > 0)));
88
+ this.connect('reflectorEntities', combineLatest([
89
+ this.store.select('gl'),
90
+ this.select('normalizedBlur'),
91
+ this.select('resolution'),
92
+ this.select('mirror'),
93
+ this.select('hasBlur'),
94
+ this.select('mixBlur'),
95
+ this.select('mixStrength'),
96
+ this.select('minDepthThreshold'),
97
+ this.select('maxDepthThreshold'),
98
+ this.select('depthScale'),
99
+ this.select('depthToBlurRatioBias'),
100
+ this.select('distortion'),
101
+ this.select('distortionMap').pipe(startWithUndefined()),
102
+ this.select('mixContrast'),
103
+ ]).pipe(map(([gl, blur, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast,]) => {
104
+ const parameters = {
105
+ minFilter: THREE.LinearFilter,
106
+ magFilter: THREE.LinearFilter,
107
+ encoding: gl.outputEncoding,
108
+ type: THREE.HalfFloatType,
109
+ };
110
+ const fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
111
+ fbo1.depthBuffer = true;
112
+ fbo1.depthTexture = new THREE.DepthTexture(resolution, resolution);
113
+ fbo1.depthTexture.format = THREE.DepthFormat;
114
+ fbo1.depthTexture.type = THREE.UnsignedShortType;
115
+ const fbo2 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
116
+ const blurPass = new BlurPass({
117
+ gl,
118
+ resolution,
119
+ width: blur[0],
120
+ height: blur[1],
121
+ minDepthThreshold,
122
+ maxDepthThreshold,
123
+ depthScale,
124
+ depthToBlurRatioBias,
125
+ });
126
+ const reflectorProps = {
127
+ mirror,
128
+ textureMatrix: this.textureMatrix,
129
+ mixBlur,
130
+ tDiffuse: fbo1.texture,
131
+ tDepth: fbo1.depthTexture,
132
+ tDiffuseBlur: fbo2.texture,
133
+ hasBlur,
134
+ mixStrength,
135
+ minDepthThreshold,
136
+ maxDepthThreshold,
137
+ depthScale,
138
+ depthToBlurRatioBias,
139
+ distortion,
140
+ distortionMap,
141
+ mixContrast,
142
+ defines: {
143
+ USE_BLUR: hasBlur ? '' : undefined,
144
+ USE_DEPTH: depthScale > 0 ? '' : undefined,
145
+ USE_DISTORTION: distortionMap ? '' : undefined,
146
+ },
147
+ };
148
+ return { fbo1, fbo2, blurPass, reflectorProps };
149
+ })));
150
+ injectBeforeRender(this.onBeforeRender.bind(this));
151
+ console.log(this.materialRef);
152
+ }
153
+ beforeRender(state) {
154
+ const parent = getLocalState(this.materialRef.nativeElement).parent;
155
+ if (!parent)
156
+ return;
157
+ const { camera } = state;
158
+ this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
159
+ this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
160
+ this.rotationMatrix.extractRotation(parent.matrixWorld);
161
+ this.normal.set(0, 0, 1);
162
+ this.normal.applyMatrix4(this.rotationMatrix);
163
+ this.reflectorWorldPosition.addScaledVector(this.normal, this.get('reflectorOffset'));
164
+ this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
165
+ // Avoid rendering when reflector is facing away
166
+ if (this.view.dot(this.normal) > 0)
167
+ return;
168
+ this.view.reflect(this.normal).negate();
169
+ this.view.add(this.reflectorWorldPosition);
170
+ this.rotationMatrix.extractRotation(camera.matrixWorld);
171
+ this.lookAtPosition.set(0, 0, -1);
172
+ this.lookAtPosition.applyMatrix4(this.rotationMatrix);
173
+ this.lookAtPosition.add(this.cameraWorldPosition);
174
+ this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
175
+ this.target.reflect(this.normal).negate();
176
+ this.target.add(this.reflectorWorldPosition);
177
+ this.virtualCamera.position.copy(this.view);
178
+ this.virtualCamera.up.set(0, 1, 0);
179
+ this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
180
+ this.virtualCamera.up.reflect(this.normal);
181
+ this.virtualCamera.lookAt(this.target);
182
+ this.virtualCamera.far = camera.far; // Used in WebGLBackground
183
+ this.virtualCamera.updateMatrixWorld();
184
+ this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
185
+ // Update the texture matrix
186
+ this.textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
187
+ this.textureMatrix.multiply(this.virtualCamera.projectionMatrix);
188
+ this.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
189
+ this.textureMatrix.multiply(parent.matrixWorld);
190
+ // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
191
+ // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
192
+ this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
193
+ this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
194
+ this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
195
+ const projectionMatrix = this.virtualCamera.projectionMatrix;
196
+ this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
197
+ this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
198
+ this.q.z = -1.0;
199
+ this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
200
+ // Calculate the scaled plane vector
201
+ this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
202
+ // Replacing the third row of the projection matrix
203
+ projectionMatrix.elements[2] = this.clipPlane.x;
204
+ projectionMatrix.elements[6] = this.clipPlane.y;
205
+ projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
206
+ projectionMatrix.elements[14] = this.clipPlane.w;
207
+ }
208
+ onBeforeRender(state) {
209
+ if (!this.materialRef.nativeElement)
210
+ return;
211
+ const parent = getLocalState(this.materialRef.nativeElement).parent;
212
+ if (!parent)
213
+ return;
214
+ const { gl, scene } = state;
215
+ const { hasBlur } = this.get();
216
+ const { fbo1, fbo2, blurPass } = this.get('reflectorEntities');
217
+ if (fbo1 && fbo2 && blurPass) {
218
+ parent.visible = false;
219
+ const currentXrEnabled = gl.xr.enabled;
220
+ const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
221
+ this.beforeRender(state);
222
+ gl.xr.enabled = false;
223
+ gl.shadowMap.autoUpdate = false;
224
+ gl.setRenderTarget(fbo1);
225
+ gl.state.buffers.depth.setMask(true);
226
+ if (!gl.autoClear)
227
+ gl.clear();
228
+ gl.render(scene, this.virtualCamera);
229
+ if (hasBlur)
230
+ blurPass.render(gl, fbo1, fbo2);
231
+ gl.xr.enabled = currentXrEnabled;
232
+ gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
233
+ parent.visible = true;
234
+ gl.setRenderTarget(null);
235
+ }
236
+ }
237
+ }
238
+ NgtsMeshReflectorMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
239
+ NgtsMeshReflectorMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", resolution: "resolution", mixBlur: "mixBlur", mixStrength: "mixStrength", blur: "blur", mirror: "mirror", minDepthThreshold: "minDepthThreshold", maxDepthThreshold: "maxDepthThreshold", depthScale: "depthScale", depthToBlurRatioBias: "depthToBlurRatioBias", distortionMap: "distortionMap", distortion: "distortion", mixContrast: "mixContrast", reflectorOffset: "reflectorOffset" }, usesInheritance: true, ngImport: i0, template: `
240
+ <ngt-mesh-reflector-material
241
+ ngtCompound
242
+ attach="material"
243
+ *ngIf="defines$ | ngtPush as defines"
244
+ [ref]="materialRef"
245
+ [defines]="defines"
246
+ [mirror]="reflectorProps.mirror"
247
+ [textureMatrix]="reflectorProps.textureMatrix"
248
+ [mixBlur]="reflectorProps.mixBlur"
249
+ [tDiffuse]="reflectorProps.tDiffuse"
250
+ [tDepth]="reflectorProps.tDepth"
251
+ [tDiffuseBlur]="reflectorProps.tDiffuseBlur"
252
+ [hasBlur]="reflectorProps.hasBlur"
253
+ [mixStrength]="reflectorProps.mixStrength"
254
+ [minDepthThreshold]="reflectorProps.minDepthThreshold"
255
+ [maxDepthThreshold]="reflectorProps.maxDepthThreshold"
256
+ [depthScale]="reflectorProps.depthScale"
257
+ [depthToBlurRatioBias]="reflectorProps.depthToBlurRatioBias"
258
+ [distortion]="reflectorProps.distortion"
259
+ [distortionMap]="reflectorProps.distortionMap"
260
+ [mixContrast]="reflectorProps.mixContrast"
261
+ >
262
+ <ng-content />
263
+ </ngt-mesh-reflector-material>
264
+ `, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
266
+ type: Component,
267
+ args: [{
268
+ selector: 'ngts-mesh-reflector-material',
269
+ standalone: true,
270
+ template: `
271
+ <ngt-mesh-reflector-material
272
+ ngtCompound
273
+ attach="material"
274
+ *ngIf="defines$ | ngtPush as defines"
275
+ [ref]="materialRef"
276
+ [defines]="defines"
277
+ [mirror]="reflectorProps.mirror"
278
+ [textureMatrix]="reflectorProps.textureMatrix"
279
+ [mixBlur]="reflectorProps.mixBlur"
280
+ [tDiffuse]="reflectorProps.tDiffuse"
281
+ [tDepth]="reflectorProps.tDepth"
282
+ [tDiffuseBlur]="reflectorProps.tDiffuseBlur"
283
+ [hasBlur]="reflectorProps.hasBlur"
284
+ [mixStrength]="reflectorProps.mixStrength"
285
+ [minDepthThreshold]="reflectorProps.minDepthThreshold"
286
+ [maxDepthThreshold]="reflectorProps.maxDepthThreshold"
287
+ [depthScale]="reflectorProps.depthScale"
288
+ [depthToBlurRatioBias]="reflectorProps.depthToBlurRatioBias"
289
+ [distortion]="reflectorProps.distortion"
290
+ [distortionMap]="reflectorProps.distortionMap"
291
+ [mixContrast]="reflectorProps.mixContrast"
292
+ >
293
+ <ng-content />
294
+ </ngt-mesh-reflector-material>
295
+ `,
296
+ imports: [NgtArgs, NgtPush, NgIf],
297
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
298
+ }]
299
+ }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
300
+ type: Input
301
+ }], resolution: [{
302
+ type: Input
303
+ }], mixBlur: [{
304
+ type: Input
305
+ }], mixStrength: [{
306
+ type: Input
307
+ }], blur: [{
308
+ type: Input
309
+ }], mirror: [{
310
+ type: Input
311
+ }], minDepthThreshold: [{
312
+ type: Input
313
+ }], maxDepthThreshold: [{
314
+ type: Input
315
+ }], depthScale: [{
316
+ type: Input
317
+ }], depthToBlurRatioBias: [{
318
+ type: Input
319
+ }], distortionMap: [{
320
+ type: Input
321
+ }], distortion: [{
322
+ type: Input
323
+ }], mixContrast: [{
324
+ type: Input
325
+ }], reflectorOffset: [{
326
+ type: Input
327
+ }] } });
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFDSCxNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFFUCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGtCQUFrQixHQUNyQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFrQ2xDLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxVQUFVO0lBR3JELElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFdBQVcsQ0FBQyxXQUFtQjtRQUN4QyxJQUFJ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QnhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJULHVEQUNrQixPQUFPLGdEQUFFLElBQUk7MkZBR3ZCLHlCQUF5QjtrQkFoQ3JDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXlCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIGV4dGVuZCxcbiAgICBnZXRMb2NhbFN0YXRlLFxuICAgIGluamVjdEJlZm9yZVJlbmRlcixcbiAgICBpbmplY3ROZ3RSZWYsXG4gICAgTmd0QXJncyxcbiAgICBOZ3RQdXNoLFxuICAgIE5ndFJlbmRlclN0YXRlLFxuICAgIE5ndFJ4U3RvcmUsXG4gICAgTmd0U3RvcmUsXG4gICAgc3RhcnRXaXRoVW5kZWZpbmVkLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJsdXJQYXNzLCBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5leHRlbmQoeyBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsXG4gICAgICAgICAgICBuZ3RDb21wb3VuZFxuICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgKm5nSWY9XCJkZWZpbmVzJCB8IG5ndFB1c2ggYXMgZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVmXT1cIm1hdGVyaWFsUmVmXCJcbiAgICAgICAgICAgIFtkZWZpbmVzXT1cImRlZmluZXNcIlxuICAgICAgICAgICAgW21pcnJvcl09XCJyZWZsZWN0b3JQcm9wcy5taXJyb3JcIlxuICAgICAgICAgICAgW3RleHR1cmVNYXRyaXhdPVwicmVmbGVjdG9yUHJvcHMudGV4dHVyZU1hdHJpeFwiXG4gICAgICAgICAgICBbbWl4Qmx1cl09XCJyZWZsZWN0b3JQcm9wcy5taXhCbHVyXCJcbiAgICAgICAgICAgIFt0RGlmZnVzZV09XCJyZWZsZWN0b3JQcm9wcy50RGlmZnVzZVwiXG4gICAgICAgICAgICBbdERlcHRoXT1cInJlZmxlY3RvclByb3BzLnREZXB0aFwiXG4gICAgICAgICAgICBbdERpZmZ1c2VCbHVyXT1cInJlZmxlY3RvclByb3BzLnREaWZmdXNlQmx1clwiXG4gICAgICAgICAgICBbaGFzQmx1cl09XCJyZWZsZWN0b3JQcm9wcy5oYXNCbHVyXCJcbiAgICAgICAgICAgIFttaXhTdHJlbmd0aF09XCJyZWZsZWN0b3JQcm9wcy5taXhTdHJlbmd0aFwiXG4gICAgICAgICAgICBbbWluRGVwdGhUaHJlc2hvbGRdPVwicmVmbGVjdG9yUHJvcHMubWluRGVwdGhUaHJlc2hvbGRcIlxuICAgICAgICAgICAgW21heERlcHRoVGhyZXNob2xkXT1cInJlZmxlY3RvclByb3BzLm1heERlcHRoVGhyZXNob2xkXCJcbiAgICAgICAgICAgIFtkZXB0aFNjYWxlXT1cInJlZmxlY3RvclByb3BzLmRlcHRoU2NhbGVcIlxuICAgICAgICAgICAgW2RlcHRoVG9CbHVyUmF0aW9CaWFzXT1cInJlZmxlY3RvclByb3BzLmRlcHRoVG9CbHVyUmF0aW9CaWFzXCJcbiAgICAgICAgICAgIFtkaXN0b3J0aW9uXT1cInJlZmxlY3RvclByb3BzLmRpc3RvcnRpb25cIlxuICAgICAgICAgICAgW2Rpc3RvcnRpb25NYXBdPVwicmVmbGVjdG9yUHJvcHMuZGlzdG9ydGlvbk1hcFwiXG4gICAgICAgICAgICBbbWl4Q29udHJhc3RdPVwicmVmbGVjdG9yUHJvcHMubWl4Q29udHJhc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICA8L25ndC1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzLCBOZ3RQdXNoLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoUmVmbGVjdG9yTWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvbihyZXNvbHV0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZXNvbHV0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaXhCbHVyKG1peEJsdXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1peEJsdXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1peFN0cmVuZ3RoKG1peFN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaXhTdHJlbmd0aCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYmx1cihibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmx1ciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWlycm9yKG1pcnJvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWlycm9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaW5EZXB0aFRocmVzaG9sZChtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWluRGVwdGhUaHJlc2hvbGQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1heERlcHRoVGhyZXNob2xkKG1heERlcHRoVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXhEZXB0aFRocmVzaG9sZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhTY2FsZShkZXB0aFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aFNjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZXB0aFRvQmx1clJhdGlvQmlhcyhkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVwdGhUb0JsdXJSYXRpb0JpYXMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpc3RvcnRpb25NYXAoZGlzdG9ydGlvbk1hcDogVEhSRUUuVGV4dHVyZSkge1xuICAgICAgICB0aGlzLnNldCh7IGRpc3RvcnRpb25NYXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpc3RvcnRpb24oZGlzdG9ydGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGlzdG9ydGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWl4Q29udHJhc3QobWl4Q29udHJhc3Q6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1peENvbnRyYXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZWZsZWN0b3JPZmZzZXQocmVmbGVjdG9yT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZWZsZWN0b3JPZmZzZXQgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgZGVmaW5lcyQgPSB0aGlzLnNlbGVjdCgncmVmbGVjdG9yRW50aXRpZXMnLCAncmVmbGVjdG9yUHJvcHMnLCAnZGVmaW5lcycpLnBpcGUoZGVib3VuY2VUaW1lKDApKTtcblxuICAgIGdldCByZWZsZWN0b3JQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdyZWZsZWN0b3JFbnRpdGllcycsICdyZWZsZWN0b3JQcm9wcycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWZsZWN0b3JQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9ybWFsID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FtZXJhV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3RhdGlvbk1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb29rQXRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIC0xKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaXBQbGFuZSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBxID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRleHR1cmVNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbENhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBtaXhCbHVyOiAwLFxuICAgICAgICAgICAgbWl4U3RyZW5ndGg6IDEsXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAyNTYsXG4gICAgICAgICAgICBibHVyOiBbMCwgMF0sXG4gICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZDogMC45LFxuICAgICAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQ6IDEsXG4gICAgICAgICAgICBkZXB0aFNjYWxlOiAwLFxuICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXM6IDAuMjUsXG4gICAgICAgICAgICBtaXJyb3I6IDAsXG4gICAgICAgICAgICBkaXN0b3J0aW9uOiAxLFxuICAgICAgICAgICAgbWl4Q29udHJhc3Q6IDEsXG4gICAgICAgICAgICByZWZsZWN0b3JPZmZzZXQ6IDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdub3JtYWxpemVkQmx1cicsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCgnYmx1cicpLnBpcGUobWFwKChibHVyKSA9PiAoQXJyYXkuaXNBcnJheShibHVyKSA/IGJsdXIgOiBbYmx1ciwgYmx1cl0pKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdoYXNCbHVyJywgdGhpcy5zZWxlY3QoJ25vcm1hbGl6ZWRCbHVyJykucGlwZShtYXAoKFt4LCB5XSkgPT4geCArIHkgPiAwKSkpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAncmVmbGVjdG9yRW50aXRpZXMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ25vcm1hbGl6ZWRCbHVyJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnbWlycm9yJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2hhc0JsdXInKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnbWl4Qmx1cicpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaXhTdHJlbmd0aCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaW5EZXB0aFRocmVzaG9sZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtYXhEZXB0aFRocmVzaG9sZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdkZXB0aFNjYWxlJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Rpc3RvcnRpb24nKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnZGlzdG9ydGlvbk1hcCcpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaXhDb250cmFzdCcpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICBnbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peEJsdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaXhTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0b3J0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peENvbnRyYXN0LFxuICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBnbC5vdXRwdXRFbmNvZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUSFJFRS5IYWxmRmxvYXRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZibzEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYm8xLmRlcHRoQnVmZmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZibzEuZGVwdGhUZXh0dXJlID0gbmV3IFRIUkVFLkRlcHRoVGV4dHVyZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmJvMS5kZXB0aFRleHR1cmUudHlwZSA9IFRIUkVFLlVuc2lnbmVkU2hvcnRUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYm8yID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJsdXJbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBibHVyWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZmxlY3RvclByb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0cml4OiB0aGlzLnRleHR1cmVNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4Qmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREZXB0aDogZmJvMS5kZXB0aFRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdERpZmZ1c2VCbHVyOiBmYm8yLnRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RvcnRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhDb250cmFzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9CTFVSOiBoYXNCbHVyID8gJycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9ERVBUSDogZGVwdGhTY2FsZSA+IDAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNFX0RJU1RPUlRJT046IGRpc3RvcnRpb25NYXAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZmJvMSwgZmJvMiwgYmx1clBhc3MsIHJlZmxlY3RvclByb3BzIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKHRoaXMub25CZWZvcmVSZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWF0ZXJpYWxSZWYpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgY2FtZXJhIH0gPSBzdGF0ZTtcblxuICAgICAgICB0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy5ub3JtYWwuc2V0KDAsIDAsIDEpO1xuICAgICAgICB0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWwsIHRoaXMuZ2V0KCdyZWZsZWN0b3JPZmZzZXQnKSk7XG4gICAgICAgIHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgLy8gQXZvaWQgcmVuZGVyaW5nIHdoZW4gcmVmbGVjdG9yIGlzIGZhY2luZyBhd2F5XG4gICAgICAgIGlmICh0aGlzLnZpZXcuZG90KHRoaXMubm9ybWFsKSA+IDApIHJldHVybjtcbiAgICAgICAgdGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMucm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcbiAgICAgICAgdGhpcy5sb29rQXRQb3NpdGlvbi5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMubG9va0F0UG9zaXRpb24uYWRkKHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy50YXJnZXQucmVmbGVjdCh0aGlzLm5vcm1hbCkubmVnYXRlKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0LmFkZCh0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24pO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAuc2V0KDAsIDEsIDApO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAuYXBwbHlNYXRyaXg0KHRoaXMucm90YXRpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG4gICAgICAgIHRoaXMudmlydHVhbENhbWVyYS5sb29rQXQodGhpcy50YXJnZXQpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEuZmFyID0gY2FtZXJhLmZhcjsgLy8gVXNlZCBpbiBXZWJHTEJhY2tncm91bmRcbiAgICAgICAgdGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG4gICAgICAgIHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHRleHR1cmUgbWF0cml4XG4gICAgICAgIHRoaXMudGV4dHVyZU1hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICAgICAgdGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgdGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMudmlydHVhbENhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuICAgICAgICB0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkocGFyZW50Lm1hdHJpeFdvcmxkKTtcbiAgICAgICAgLy8gTm93IHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIG5ldyBjbGlwIHBsYW5lLCBpbXBsZW1lbnRpbmcgY29kZSBmcm9tOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL29ibGlxdWUuaHRtbFxuICAgICAgICAvLyBQYXBlciBleHBsYWluaW5nIHRoaXMgdGVjaG5pcXVlOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9sZW5neWVsL0xlbmd5ZWwtT2JsaXF1ZS5wZGZcbiAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLm5vcm1hbCwgdGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG4gICAgICAgIHRoaXMuY2xpcFBsYW5lLnNldChcbiAgICAgICAgICAgIHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLngsXG4gICAgICAgICAgICB0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC55LFxuICAgICAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueixcbiAgICAgICAgICAgIHRoaXMucmVmbGVjdG9yUGxhbmUuY29uc3RhbnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4O1xuICAgICAgICB0aGlzLnEueCA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG4gICAgICAgIHRoaXMucS55ID0gKE1hdGguc2lnbih0aGlzLmNsaXBQbGFuZS55KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOV0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s1XTtcbiAgICAgICAgdGhpcy5xLnogPSAtMS4wO1xuICAgICAgICB0aGlzLnEudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZWQgcGxhbmUgdmVjdG9yXG4gICAgICAgIHRoaXMuY2xpcFBsYW5lLm11bHRpcGx5U2NhbGFyKDIuMCAvIHRoaXMuY2xpcFBsYW5lLmRvdCh0aGlzLnEpKTtcbiAgICAgICAgLy8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMl0gPSB0aGlzLmNsaXBQbGFuZS54O1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzZdID0gdGhpcy5jbGlwUGxhbmUueTtcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLmNsaXBQbGFuZS56ICsgMS4wO1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XSA9IHRoaXMuY2xpcFBsYW5lLnc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkJlZm9yZVJlbmRlcihzdGF0ZTogTmd0UmVuZGVyU3RhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZSh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGdsLCBzY2VuZSB9ID0gc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgaGFzQmx1ciB9ID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3QgeyBmYm8xLCBmYm8yLCBibHVyUGFzcyB9ID0gdGhpcy5nZXQoJ3JlZmxlY3RvckVudGl0aWVzJyk7XG5cbiAgICAgICAgaWYgKGZibzEgJiYgZmJvMiAmJiBibHVyUGFzcykge1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSBnbC54ci5lbmFibGVkO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNoYWRvd0F1dG9VcGRhdGUgPSBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyKHN0YXRlKTtcbiAgICAgICAgICAgIGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQoZmJvMSk7XG4gICAgICAgICAgICBnbC5zdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWdsLmF1dG9DbGVhcikgZ2wuY2xlYXIoKTtcbiAgICAgICAgICAgIGdsLnJlbmRlcihzY2VuZSwgdGhpcy52aXJ0dWFsQ2FtZXJhKTtcbiAgICAgICAgICAgIGlmIChoYXNCbHVyKSBibHVyUGFzcy5yZW5kZXIoZ2wsIGZibzEsIGZibzIpO1xuICAgICAgICAgICAgZ2wueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG4gICAgICAgICAgICBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlO1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgZ2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -0,0 +1,67 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
2
+ import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
3
+ import { MeshWobbleMaterial } from 'angular-three-soba/shaders';
4
+ import * as i0 from "@angular/core";
5
+ extend({ MeshWobbleMaterial });
6
+ export class NgtsMeshWobbleMaterial extends NgtRxStore {
7
+ set time(time) {
8
+ this.set({ time });
9
+ }
10
+ set factor(factor) {
11
+ this.set({ factor });
12
+ }
13
+ set speed(speed) {
14
+ this.set({ speed });
15
+ }
16
+ initialize() {
17
+ super.initialize();
18
+ this.set({ speed: 1, time: 0, factor: 1 });
19
+ }
20
+ constructor() {
21
+ super();
22
+ this.material = new MeshWobbleMaterial();
23
+ this.materialRef = injectNgtRef();
24
+ injectBeforeRender(({ clock }) => {
25
+ this.material.time = clock.getElapsedTime() * this.get('speed');
26
+ });
27
+ }
28
+ }
29
+ NgtsMeshWobbleMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshWobbleMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ NgtsMeshWobbleMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshWobbleMaterial, isStandalone: true, selector: "ngts-mesh-wobble-material", inputs: { materialRef: "materialRef", time: "time", factor: "factor", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
31
+ <ngt-primitive
32
+ *args="[material]"
33
+ [ref]="materialRef"
34
+ [time]="get('time')"
35
+ [factor]="get('factor')"
36
+ attach="material"
37
+ ngtCompound
38
+ />
39
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshWobbleMaterial, decorators: [{
41
+ type: Component,
42
+ args: [{
43
+ selector: 'ngts-mesh-wobble-material',
44
+ standalone: true,
45
+ template: `
46
+ <ngt-primitive
47
+ *args="[material]"
48
+ [ref]="materialRef"
49
+ [time]="get('time')"
50
+ [factor]="get('factor')"
51
+ attach="material"
52
+ ngtCompound
53
+ />
54
+ `,
55
+ imports: [NgtArgs],
56
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
57
+ }]
58
+ }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
59
+ type: Input
60
+ }], time: [{
61
+ type: Input
62
+ }], factor: [{
63
+ type: Input
64
+ }], speed: [{
65
+ type: Input
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC13b2JibGUtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVoRSxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFrQi9CLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxVQUFVO0lBS2xELElBQWEsSUFBSSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXRCSCxhQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRXBDLGdCQUFXLEdBQUcsWUFBWSxFQUFzQixDQUFDO1FBcUJ0RCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O21IQTNCUSxzQkFBc0I7dUdBQXRCLHNCQUFzQixvTUFickI7Ozs7Ozs7OztLQVNULDREQUNTLE9BQU87MkZBR1Isc0JBQXNCO2tCQWhCbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7S0FTVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFJWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0QXJncywgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTWVzaFdvYmJsZU1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuXG5leHRlbmQoeyBNZXNoV29iYmxlTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1tZXNoLXdvYmJsZS1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgKmFyZ3M9XCJbbWF0ZXJpYWxdXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW3RpbWVdPVwiZ2V0KCd0aW1lJylcIlxuICAgICAgICAgICAgW2ZhY3Rvcl09XCJnZXQoJ2ZhY3RvcicpXCJcbiAgICAgICAgICAgIGF0dGFjaD1cIm1hdGVyaWFsXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFdvYmJsZU1hdGVyaWFsIGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgcmVhZG9ubHkgbWF0ZXJpYWwgPSBuZXcgTWVzaFdvYmJsZU1hdGVyaWFsKCk7XG5cbiAgICBASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoV29iYmxlTWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0aW1lIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmYWN0b3IoZmFjdG9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWN0b3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNwZWVkKHNwZWVkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzcGVlZCB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgc3BlZWQ6IDEsIHRpbWU6IDAsIGZhY3RvcjogMSB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNsb2NrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudGltZSA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCkgKiB0aGlzLmdldCgnc3BlZWQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1,2 +1,7 @@
1
+ export * from './lib/blur-pass/blur-pass';
2
+ export * from './lib/convolution-material/convolution-material';
3
+ export * from './lib/mesh-distort-material/mesh-distort-material';
4
+ export * from './lib/mesh-reflector-material/mesh-reflector-material';
5
+ export * from './lib/mesh-wobble-material/mesh-wobble-material';
1
6
  export * from './lib/shader-material/shader-material';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JsdXItcGFzcy9ibHVyLXBhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcbiJdfQ==