@esotericsoftware/spine-core 4.0.9 → 4.0.13
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/dist/Animation.js +577 -710
- package/dist/AnimationState.js +239 -259
- package/dist/AnimationStateData.js +15 -17
- package/dist/AssetManagerBase.d.ts +3 -0
- package/dist/AssetManagerBase.js +168 -147
- package/dist/AtlasAttachmentLoader.js +20 -22
- package/dist/Bone.js +89 -91
- package/dist/BoneData.js +4 -6
- package/dist/ConstraintData.js +4 -6
- package/dist/Event.js +4 -6
- package/dist/EventData.js +4 -6
- package/dist/IkConstraint.js +48 -50
- package/dist/IkConstraintData.js +12 -31
- package/dist/PathConstraint.js +116 -118
- package/dist/PathConstraintData.js +9 -28
- package/dist/Skeleton.js +189 -192
- package/dist/SkeletonBinary.js +352 -363
- package/dist/SkeletonBounds.js +79 -81
- package/dist/SkeletonClipping.js +86 -88
- package/dist/SkeletonData.js +46 -48
- package/dist/SkeletonJson.js +307 -310
- package/dist/Skin.js +65 -69
- package/dist/Slot.js +16 -18
- package/dist/SlotData.js +4 -6
- package/dist/Texture.js +14 -39
- package/dist/TextureAtlas.js +56 -85
- package/dist/TransformConstraint.js +77 -79
- package/dist/TransformConstraintData.js +20 -39
- package/dist/Triangulator.js +71 -73
- package/dist/Updatable.js +1 -1
- package/dist/Utils.js +183 -245
- package/dist/VertexEffect.js +1 -1
- package/dist/attachments/Attachment.js +41 -62
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +9 -28
- package/dist/attachments/ClippingAttachment.js +9 -28
- package/dist/attachments/MeshAttachment.js +29 -48
- package/dist/attachments/PathAttachment.js +11 -30
- package/dist/attachments/PointAttachment.js +16 -35
- package/dist/attachments/RegionAttachment.js +82 -101
- package/dist/attachments/index.js +1 -1
- package/dist/iife/spine-core.js +62 -22
- package/dist/iife/spine-core.js.map +2 -2
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.js +1 -1
- package/dist/polyfills.js +2 -2
- package/dist/vertexeffects/JitterEffect.js +10 -12
- package/dist/vertexeffects/SwirlEffect.js +18 -20
- package/package.json +1 -1
- package/dist/Animation.js.map +0 -1
- package/dist/AnimationState.js.map +0 -1
- package/dist/AnimationStateData.js.map +0 -1
- package/dist/AssetManagerBase.js.map +0 -1
- package/dist/AtlasAttachmentLoader.js.map +0 -1
- package/dist/Bone.js.map +0 -1
- package/dist/BoneData.js.map +0 -1
- package/dist/ConstraintData.js.map +0 -1
- package/dist/Event.js.map +0 -1
- package/dist/EventData.js.map +0 -1
- package/dist/IkConstraint.js.map +0 -1
- package/dist/IkConstraintData.js.map +0 -1
- package/dist/PathConstraint.js.map +0 -1
- package/dist/PathConstraintData.js.map +0 -1
- package/dist/Skeleton.js.map +0 -1
- package/dist/SkeletonBinary.js.map +0 -1
- package/dist/SkeletonBounds.js.map +0 -1
- package/dist/SkeletonClipping.js.map +0 -1
- package/dist/SkeletonData.js.map +0 -1
- package/dist/SkeletonJson.js.map +0 -1
- package/dist/Skin.js.map +0 -1
- package/dist/Slot.js.map +0 -1
- package/dist/SlotData.js.map +0 -1
- package/dist/Texture.js.map +0 -1
- package/dist/TextureAtlas.js.map +0 -1
- package/dist/TransformConstraint.js.map +0 -1
- package/dist/TransformConstraintData.js.map +0 -1
- package/dist/Triangulator.js.map +0 -1
- package/dist/Updatable.js.map +0 -1
- package/dist/Utils.js.map +0 -1
- package/dist/VertexEffect.js.map +0 -1
- package/dist/attachments/Attachment.js.map +0 -1
- package/dist/attachments/AttachmentLoader.js.map +0 -1
- package/dist/attachments/BoundingBoxAttachment.js.map +0 -1
- package/dist/attachments/ClippingAttachment.js.map +0 -1
- package/dist/attachments/MeshAttachment.js.map +0 -1
- package/dist/attachments/PathAttachment.js.map +0 -1
- package/dist/attachments/PointAttachment.js.map +0 -1
- package/dist/attachments/RegionAttachment.js.map +0 -1
- package/dist/attachments/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/polyfills.js.map +0 -1
- package/dist/vertexeffects/JitterEffect.js.map +0 -1
- package/dist/vertexeffects/SwirlEffect.js.map +0 -1
package/dist/SkeletonBounds.js
CHANGED
|
@@ -30,8 +30,8 @@ import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment";
|
|
|
30
30
|
import { Pool, Utils } from "./Utils";
|
|
31
31
|
/** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
|
|
32
32
|
* provided along with convenience methods for doing hit detection. */
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
export class SkeletonBounds {
|
|
34
|
+
constructor() {
|
|
35
35
|
/** The left edge of the axis aligned bounding box. */
|
|
36
36
|
this.minX = 0;
|
|
37
37
|
/** The bottom edge of the axis aligned bounding box. */
|
|
@@ -44,7 +44,7 @@ var SkeletonBounds = /** @class */ (function () {
|
|
|
44
44
|
this.boundingBoxes = new Array();
|
|
45
45
|
/** The world vertices for the bounding box polygons. */
|
|
46
46
|
this.polygons = new Array();
|
|
47
|
-
this.polygonPool = new Pool(
|
|
47
|
+
this.polygonPool = new Pool(() => {
|
|
48
48
|
return Utils.newFloatArray(16);
|
|
49
49
|
});
|
|
50
50
|
}
|
|
@@ -52,26 +52,26 @@ var SkeletonBounds = /** @class */ (function () {
|
|
|
52
52
|
* box's polygon.
|
|
53
53
|
* @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the
|
|
54
54
|
* SkeletonBounds AABB methods will always return true. */
|
|
55
|
-
|
|
55
|
+
update(skeleton, updateAabb) {
|
|
56
56
|
if (!skeleton)
|
|
57
57
|
throw new Error("skeleton cannot be null.");
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
let boundingBoxes = this.boundingBoxes;
|
|
59
|
+
let polygons = this.polygons;
|
|
60
|
+
let polygonPool = this.polygonPool;
|
|
61
|
+
let slots = skeleton.slots;
|
|
62
|
+
let slotCount = slots.length;
|
|
63
63
|
boundingBoxes.length = 0;
|
|
64
64
|
polygonPool.freeAll(polygons);
|
|
65
65
|
polygons.length = 0;
|
|
66
|
-
for (
|
|
67
|
-
|
|
66
|
+
for (let i = 0; i < slotCount; i++) {
|
|
67
|
+
let slot = slots[i];
|
|
68
68
|
if (!slot.bone.active)
|
|
69
69
|
continue;
|
|
70
|
-
|
|
70
|
+
let attachment = slot.getAttachment();
|
|
71
71
|
if (attachment instanceof BoundingBoxAttachment) {
|
|
72
|
-
|
|
72
|
+
let boundingBox = attachment;
|
|
73
73
|
boundingBoxes.push(boundingBox);
|
|
74
|
-
|
|
74
|
+
let polygon = polygonPool.obtain();
|
|
75
75
|
if (polygon.length != boundingBox.worldVerticesLength) {
|
|
76
76
|
polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);
|
|
77
77
|
}
|
|
@@ -88,16 +88,16 @@ var SkeletonBounds = /** @class */ (function () {
|
|
|
88
88
|
this.maxX = Number.NEGATIVE_INFINITY;
|
|
89
89
|
this.maxY = Number.NEGATIVE_INFINITY;
|
|
90
90
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
for (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
for (
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
}
|
|
92
|
+
aabbCompute() {
|
|
93
|
+
let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
|
|
94
|
+
let polygons = this.polygons;
|
|
95
|
+
for (let i = 0, n = polygons.length; i < n; i++) {
|
|
96
|
+
let polygon = polygons[i];
|
|
97
|
+
let vertices = polygon;
|
|
98
|
+
for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {
|
|
99
|
+
let x = vertices[ii];
|
|
100
|
+
let y = vertices[ii + 1];
|
|
101
101
|
minX = Math.min(minX, x);
|
|
102
102
|
minY = Math.min(minY, y);
|
|
103
103
|
maxX = Math.max(maxX, x);
|
|
@@ -108,90 +108,90 @@ var SkeletonBounds = /** @class */ (function () {
|
|
|
108
108
|
this.minY = minY;
|
|
109
109
|
this.maxX = maxX;
|
|
110
110
|
this.maxY = maxY;
|
|
111
|
-
}
|
|
111
|
+
}
|
|
112
112
|
/** Returns true if the axis aligned bounding box contains the point. */
|
|
113
|
-
|
|
113
|
+
aabbContainsPoint(x, y) {
|
|
114
114
|
return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
|
|
115
|
-
}
|
|
115
|
+
}
|
|
116
116
|
/** Returns true if the axis aligned bounding box intersects the line segment. */
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
aabbIntersectsSegment(x1, y1, x2, y2) {
|
|
118
|
+
let minX = this.minX;
|
|
119
|
+
let minY = this.minY;
|
|
120
|
+
let maxX = this.maxX;
|
|
121
|
+
let maxY = this.maxY;
|
|
122
122
|
if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))
|
|
123
123
|
return false;
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
let m = (y2 - y1) / (x2 - x1);
|
|
125
|
+
let y = m * (minX - x1) + y1;
|
|
126
126
|
if (y > minY && y < maxY)
|
|
127
127
|
return true;
|
|
128
128
|
y = m * (maxX - x1) + y1;
|
|
129
129
|
if (y > minY && y < maxY)
|
|
130
130
|
return true;
|
|
131
|
-
|
|
131
|
+
let x = (minY - y1) / m + x1;
|
|
132
132
|
if (x > minX && x < maxX)
|
|
133
133
|
return true;
|
|
134
134
|
x = (maxY - y1) / m + x1;
|
|
135
135
|
if (x > minX && x < maxX)
|
|
136
136
|
return true;
|
|
137
137
|
return false;
|
|
138
|
-
}
|
|
138
|
+
}
|
|
139
139
|
/** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
|
|
140
|
-
|
|
140
|
+
aabbIntersectsSkeleton(bounds) {
|
|
141
141
|
return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
|
|
142
|
-
}
|
|
142
|
+
}
|
|
143
143
|
/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
|
|
144
144
|
* efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
for (
|
|
145
|
+
containsPoint(x, y) {
|
|
146
|
+
let polygons = this.polygons;
|
|
147
|
+
for (let i = 0, n = polygons.length; i < n; i++)
|
|
148
148
|
if (this.containsPointPolygon(polygons[i], x, y))
|
|
149
149
|
return this.boundingBoxes[i];
|
|
150
150
|
return null;
|
|
151
|
-
}
|
|
151
|
+
}
|
|
152
152
|
/** Returns true if the polygon contains the point. */
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
for (
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
containsPointPolygon(polygon, x, y) {
|
|
154
|
+
let vertices = polygon;
|
|
155
|
+
let nn = polygon.length;
|
|
156
|
+
let prevIndex = nn - 2;
|
|
157
|
+
let inside = false;
|
|
158
|
+
for (let ii = 0; ii < nn; ii += 2) {
|
|
159
|
+
let vertexY = vertices[ii + 1];
|
|
160
|
+
let prevY = vertices[prevIndex + 1];
|
|
161
161
|
if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {
|
|
162
|
-
|
|
162
|
+
let vertexX = vertices[ii];
|
|
163
163
|
if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
|
|
164
164
|
inside = !inside;
|
|
165
165
|
}
|
|
166
166
|
prevIndex = ii;
|
|
167
167
|
}
|
|
168
168
|
return inside;
|
|
169
|
-
}
|
|
169
|
+
}
|
|
170
170
|
/** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
|
|
171
171
|
* is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns
|
|
172
172
|
* true. */
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
for (
|
|
173
|
+
intersectsSegment(x1, y1, x2, y2) {
|
|
174
|
+
let polygons = this.polygons;
|
|
175
|
+
for (let i = 0, n = polygons.length; i < n; i++)
|
|
176
176
|
if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
|
|
177
177
|
return this.boundingBoxes[i];
|
|
178
178
|
return null;
|
|
179
|
-
}
|
|
179
|
+
}
|
|
180
180
|
/** Returns true if the polygon contains any part of the line segment. */
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
for (
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
181
|
+
intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {
|
|
182
|
+
let vertices = polygon;
|
|
183
|
+
let nn = polygon.length;
|
|
184
|
+
let width12 = x1 - x2, height12 = y1 - y2;
|
|
185
|
+
let det1 = x1 * y2 - y1 * x2;
|
|
186
|
+
let x3 = vertices[nn - 2], y3 = vertices[nn - 1];
|
|
187
|
+
for (let ii = 0; ii < nn; ii += 2) {
|
|
188
|
+
let x4 = vertices[ii], y4 = vertices[ii + 1];
|
|
189
|
+
let det2 = x3 * y4 - y3 * x4;
|
|
190
|
+
let width34 = x3 - x4, height34 = y3 - y4;
|
|
191
|
+
let det3 = width12 * height34 - height12 * width34;
|
|
192
|
+
let x = (det1 * width34 - width12 * det2) / det3;
|
|
193
193
|
if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {
|
|
194
|
-
|
|
194
|
+
let y = (det1 * height34 - height12 * det2) / det3;
|
|
195
195
|
if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))
|
|
196
196
|
return true;
|
|
197
197
|
}
|
|
@@ -199,23 +199,21 @@ var SkeletonBounds = /** @class */ (function () {
|
|
|
199
199
|
y3 = y4;
|
|
200
200
|
}
|
|
201
201
|
return false;
|
|
202
|
-
}
|
|
202
|
+
}
|
|
203
203
|
/** Returns the polygon for the specified bounding box, or null. */
|
|
204
|
-
|
|
204
|
+
getPolygon(boundingBox) {
|
|
205
205
|
if (!boundingBox)
|
|
206
206
|
throw new Error("boundingBox cannot be null.");
|
|
207
|
-
|
|
207
|
+
let index = this.boundingBoxes.indexOf(boundingBox);
|
|
208
208
|
return index == -1 ? null : this.polygons[index];
|
|
209
|
-
}
|
|
209
|
+
}
|
|
210
210
|
/** The width of the axis aligned bounding box. */
|
|
211
|
-
|
|
211
|
+
getWidth() {
|
|
212
212
|
return this.maxX - this.minX;
|
|
213
|
-
}
|
|
213
|
+
}
|
|
214
214
|
/** The height of the axis aligned bounding box. */
|
|
215
|
-
|
|
215
|
+
getHeight() {
|
|
216
216
|
return this.maxY - this.minY;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
}());
|
|
220
|
-
export { SkeletonBounds };
|
|
221
|
-
//# sourceMappingURL=SkeletonBounds.js.map
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVFLE9BQU8sRUFBbUIsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2RDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFFQyxzREFBc0Q7UUFDdEQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULHdEQUF3RDtRQUN4RCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRVQsdURBQXVEO1FBQ3ZELFNBQUksR0FBRyxDQUFDLENBQUM7UUFFVCxxREFBcUQ7UUFDckQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULGtDQUFrQztRQUNsQyxrQkFBYSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBRW5ELHdEQUF3RDtRQUN4RCxhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFFaEMsZ0JBQVcsR0FBRyxJQUFJLElBQUksQ0FBa0IsR0FBRyxFQUFFO1lBQ3BELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQThLSixDQUFDO0lBNUtBOzs7d0VBR29FO0lBQ3BFLE1BQU0sQ0FBRSxRQUFrQixFQUFFLFVBQW1CO1FBQzlDLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFD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
|
package/dist/SkeletonClipping.js
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { Triangulator } from "./Triangulator";
|
|
30
30
|
import { Utils } from "./Utils";
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
export class SkeletonClipping {
|
|
32
|
+
constructor() {
|
|
33
33
|
this.triangulator = new Triangulator();
|
|
34
34
|
this.clippingPolygon = new Array();
|
|
35
35
|
this.clipOutput = new Array();
|
|
@@ -37,29 +37,29 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
37
37
|
this.clippedTriangles = new Array();
|
|
38
38
|
this.scratch = new Array();
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
clipStart(slot, clip) {
|
|
41
41
|
if (this.clipAttachment)
|
|
42
42
|
return 0;
|
|
43
43
|
this.clipAttachment = clip;
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
let n = clip.worldVerticesLength;
|
|
45
|
+
let vertices = Utils.setArraySize(this.clippingPolygon, n);
|
|
46
46
|
clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);
|
|
47
|
-
|
|
47
|
+
let clippingPolygon = this.clippingPolygon;
|
|
48
48
|
SkeletonClipping.makeClockwise(clippingPolygon);
|
|
49
|
-
|
|
50
|
-
for (
|
|
51
|
-
|
|
49
|
+
let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
|
|
50
|
+
for (let i = 0, n = clippingPolygons.length; i < n; i++) {
|
|
51
|
+
let polygon = clippingPolygons[i];
|
|
52
52
|
SkeletonClipping.makeClockwise(polygon);
|
|
53
53
|
polygon.push(polygon[0]);
|
|
54
54
|
polygon.push(polygon[1]);
|
|
55
55
|
}
|
|
56
56
|
return clippingPolygons.length;
|
|
57
|
-
}
|
|
58
|
-
|
|
57
|
+
}
|
|
58
|
+
clipEndWithSlot(slot) {
|
|
59
59
|
if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)
|
|
60
60
|
this.clipEnd();
|
|
61
|
-
}
|
|
62
|
-
|
|
61
|
+
}
|
|
62
|
+
clipEnd() {
|
|
63
63
|
if (!this.clipAttachment)
|
|
64
64
|
return;
|
|
65
65
|
this.clipAttachment = null;
|
|
@@ -67,52 +67,52 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
67
67
|
this.clippedVertices.length = 0;
|
|
68
68
|
this.clippedTriangles.length = 0;
|
|
69
69
|
this.clippingPolygon.length = 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
70
|
+
}
|
|
71
|
+
isClipping() {
|
|
72
72
|
return this.clipAttachment != null;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
}
|
|
74
|
+
clipTriangles(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
|
|
75
|
+
let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
|
|
76
|
+
let clippedTriangles = this.clippedTriangles;
|
|
77
|
+
let polygons = this.clippingPolygons;
|
|
78
|
+
let polygonsCount = this.clippingPolygons.length;
|
|
79
|
+
let vertexSize = twoColor ? 12 : 8;
|
|
80
|
+
let index = 0;
|
|
81
81
|
clippedVertices.length = 0;
|
|
82
82
|
clippedTriangles.length = 0;
|
|
83
|
-
outer: for (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
outer: for (let i = 0; i < trianglesLength; i += 3) {
|
|
84
|
+
let vertexOffset = triangles[i] << 1;
|
|
85
|
+
let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
|
|
86
|
+
let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
|
|
87
87
|
vertexOffset = triangles[i + 1] << 1;
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
|
|
89
|
+
let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
|
|
90
90
|
vertexOffset = triangles[i + 2] << 1;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
for (
|
|
94
|
-
|
|
91
|
+
let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
|
|
92
|
+
let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
|
|
93
|
+
for (let p = 0; p < polygonsCount; p++) {
|
|
94
|
+
let s = clippedVertices.length;
|
|
95
95
|
if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
|
|
96
|
-
|
|
96
|
+
let clipOutputLength = clipOutput.length;
|
|
97
97
|
if (clipOutputLength == 0)
|
|
98
98
|
continue;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
for (
|
|
105
|
-
|
|
99
|
+
let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
|
|
100
|
+
let d = 1 / (d0 * d2 + d1 * (y1 - y3));
|
|
101
|
+
let clipOutputCount = clipOutputLength >> 1;
|
|
102
|
+
let clipOutputItems = this.clipOutput;
|
|
103
|
+
let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
|
|
104
|
+
for (let ii = 0; ii < clipOutputLength; ii += 2) {
|
|
105
|
+
let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
|
|
106
106
|
clippedVerticesItems[s] = x;
|
|
107
107
|
clippedVerticesItems[s + 1] = y;
|
|
108
108
|
clippedVerticesItems[s + 2] = light.r;
|
|
109
109
|
clippedVerticesItems[s + 3] = light.g;
|
|
110
110
|
clippedVerticesItems[s + 4] = light.b;
|
|
111
111
|
clippedVerticesItems[s + 5] = light.a;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
let c0 = x - x3, c1 = y - y3;
|
|
113
|
+
let a = (d0 * c0 + d1 * c1) * d;
|
|
114
|
+
let b = (d4 * c0 + d2 * c1) * d;
|
|
115
|
+
let c = 1 - a - b;
|
|
116
116
|
clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
|
|
117
117
|
clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
|
|
118
118
|
if (twoColor) {
|
|
@@ -124,9 +124,9 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
124
124
|
s += vertexSize;
|
|
125
125
|
}
|
|
126
126
|
s = clippedTriangles.length;
|
|
127
|
-
|
|
127
|
+
let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
|
|
128
128
|
clipOutputCount--;
|
|
129
|
-
for (
|
|
129
|
+
for (let ii = 1; ii < clipOutputCount; ii++) {
|
|
130
130
|
clippedTrianglesItems[s] = index;
|
|
131
131
|
clippedTrianglesItems[s + 1] = (index + ii);
|
|
132
132
|
clippedTrianglesItems[s + 2] = (index + ii + 1);
|
|
@@ -135,7 +135,7 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
135
135
|
index += clipOutputCount + 1;
|
|
136
136
|
}
|
|
137
137
|
else {
|
|
138
|
-
|
|
138
|
+
let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
|
|
139
139
|
clippedVerticesItems[s] = x1;
|
|
140
140
|
clippedVerticesItems[s + 1] = y1;
|
|
141
141
|
clippedVerticesItems[s + 2] = light.r;
|
|
@@ -195,7 +195,7 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
195
195
|
clippedVerticesItems[s + 35] = dark.a;
|
|
196
196
|
}
|
|
197
197
|
s = clippedTriangles.length;
|
|
198
|
-
|
|
198
|
+
let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
|
|
199
199
|
clippedTrianglesItems[s] = index;
|
|
200
200
|
clippedTrianglesItems[s + 1] = (index + 1);
|
|
201
201
|
clippedTrianglesItems[s + 2] = (index + 2);
|
|
@@ -204,14 +204,14 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
}
|
|
207
|
+
}
|
|
208
208
|
/** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping
|
|
209
209
|
* area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
clip(x1, y1, x2, y2, x3, y3, clippingArea, output) {
|
|
211
|
+
let originalOutput = output;
|
|
212
|
+
let clipped = false;
|
|
213
213
|
// Avoid copy at the end.
|
|
214
|
-
|
|
214
|
+
let input = null;
|
|
215
215
|
if (clippingArea.length % 4 >= 2) {
|
|
216
216
|
input = output;
|
|
217
217
|
output = this.scratch;
|
|
@@ -228,18 +228,18 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
228
228
|
input.push(x1);
|
|
229
229
|
input.push(y1);
|
|
230
230
|
output.length = 0;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
for (
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
for (
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
231
|
+
let clippingVertices = clippingArea;
|
|
232
|
+
let clippingVerticesLast = clippingArea.length - 4;
|
|
233
|
+
for (let i = 0;; i += 2) {
|
|
234
|
+
let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
|
|
235
|
+
let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
|
|
236
|
+
let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
|
|
237
|
+
let inputVertices = input;
|
|
238
|
+
let inputVerticesLength = input.length - 2, outputStart = output.length;
|
|
239
|
+
for (let ii = 0; ii < inputVerticesLength; ii += 2) {
|
|
240
|
+
let inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
|
|
241
|
+
let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
|
|
242
|
+
let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
|
|
243
243
|
if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
|
|
244
244
|
if (side2) { // v1 inside, v2 inside
|
|
245
245
|
output.push(inputX2);
|
|
@@ -247,10 +247,10 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
247
247
|
continue;
|
|
248
248
|
}
|
|
249
249
|
// v1 inside, v2 outside
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
|
|
251
|
+
let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
|
|
252
252
|
if (Math.abs(s) > 0.000001) {
|
|
253
|
-
|
|
253
|
+
let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
|
|
254
254
|
output.push(edgeX + (edgeX2 - edgeX) * ua);
|
|
255
255
|
output.push(edgeY + (edgeY2 - edgeY) * ua);
|
|
256
256
|
}
|
|
@@ -260,10 +260,10 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
else if (side2) { // v1 outside, v2 inside
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
|
|
264
|
+
let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
|
|
265
265
|
if (Math.abs(s) > 0.000001) {
|
|
266
|
-
|
|
266
|
+
let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
|
|
267
267
|
output.push(edgeX + (edgeX2 - edgeX) * ua);
|
|
268
268
|
output.push(edgeY + (edgeY2 - edgeY) * ua);
|
|
269
269
|
}
|
|
@@ -284,25 +284,25 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
284
284
|
output.push(output[1]);
|
|
285
285
|
if (i == clippingVerticesLast)
|
|
286
286
|
break;
|
|
287
|
-
|
|
287
|
+
let temp = output;
|
|
288
288
|
output = input;
|
|
289
289
|
output.length = 0;
|
|
290
290
|
input = temp;
|
|
291
291
|
}
|
|
292
292
|
if (originalOutput != output) {
|
|
293
293
|
originalOutput.length = 0;
|
|
294
|
-
for (
|
|
294
|
+
for (let i = 0, n = output.length - 2; i < n; i++)
|
|
295
295
|
originalOutput[i] = output[i];
|
|
296
296
|
}
|
|
297
297
|
else
|
|
298
298
|
originalOutput.length = originalOutput.length - 2;
|
|
299
299
|
return clipped;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
for (
|
|
300
|
+
}
|
|
301
|
+
static makeClockwise(polygon) {
|
|
302
|
+
let vertices = polygon;
|
|
303
|
+
let verticeslength = polygon.length;
|
|
304
|
+
let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
|
|
305
|
+
for (let i = 0, n = verticeslength - 3; i < n; i += 2) {
|
|
306
306
|
p1x = vertices[i];
|
|
307
307
|
p1y = vertices[i + 1];
|
|
308
308
|
p2x = vertices[i + 2];
|
|
@@ -311,16 +311,14 @@ var SkeletonClipping = /** @class */ (function () {
|
|
|
311
311
|
}
|
|
312
312
|
if (area < 0)
|
|
313
313
|
return;
|
|
314
|
-
for (
|
|
315
|
-
|
|
316
|
-
|
|
314
|
+
for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
|
|
315
|
+
let x = vertices[i], y = vertices[i + 1];
|
|
316
|
+
let other = lastX - i;
|
|
317
317
|
vertices[i] = vertices[other];
|
|
318
318
|
vertices[i + 1] = vertices[other + 1];
|
|
319
319
|
vertices[other] = x;
|
|
320
320
|
vertices[other + 1] = y;
|
|
321
321
|
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
}());
|
|
325
|
-
export { SkeletonClipping };
|
|
326
|
-
//# sourceMappingURL=SkeletonClipping.js.map
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25DbGlwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvbkNsaXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBMEIsTUFBTSxTQUFTLENBQUM7QUFFeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNTLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDdEMsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDekMsb0JBQWUsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDL0IsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFxVHZDLENBQUM7SUFoVEEsU0FBUyxDQUFFLElBQVUsRUFBRSxJQUF3QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLGdCQUFnQixDQUFDLGFBQWEsQ0FB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QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFFakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBRWxDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNsQzt5QkFBTTt3QkFDTixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDckMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3JDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFFdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUV0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFD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QUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7cUJBQzNDO3lCQUFNO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25CO2lCQUNEO3FCQUFNLElBQUksS0FBSyxFQUFFLEVBQUUsd0JBQXdCO29CQUMzQyxJQUFJLEVBQUUsR0FBRyxPQUFPLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO29CQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO29CQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFO3dCQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FB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
|