@esotericsoftware/spine-core 4.2.115 → 4.3.0
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.d.ts +426 -274
- package/dist/Animation.js +1174 -1210
- package/dist/AnimationState.d.ts +246 -201
- package/dist/AnimationState.js +508 -471
- package/dist/AnimationStateData.d.ts +12 -10
- package/dist/AnimationStateData.js +19 -20
- package/dist/AssetManagerBase.d.ts +29 -23
- package/dist/AssetManagerBase.js +67 -43
- package/dist/AtlasAttachmentLoader.d.ts +18 -12
- package/dist/AtlasAttachmentLoader.js +28 -39
- package/dist/Bone.d.ts +15 -109
- package/dist/Bone.js +22 -362
- package/dist/BoneData.d.ts +13 -28
- package/dist/BoneData.js +20 -29
- package/dist/BonePose.d.ts +130 -0
- package/dist/BonePose.js +426 -0
- package/dist/Constraint.d.ts +41 -0
- package/dist/Constraint.js +38 -0
- package/dist/ConstraintData.d.ts +7 -5
- package/dist/ConstraintData.js +5 -9
- package/dist/DrawOrder.d.ts +48 -0
- package/dist/DrawOrder.js +64 -0
- package/dist/Event.d.ts +11 -6
- package/dist/Event.js +10 -5
- package/dist/EventData.d.ts +10 -6
- package/dist/EventData.js +18 -7
- package/dist/IkConstraint.d.ts +22 -28
- package/dist/IkConstraint.js +115 -117
- package/dist/IkConstraintData.d.ts +23 -18
- package/dist/IkConstraintData.js +32 -22
- package/dist/IkConstraintPose.d.ts +49 -0
- package/dist/IkConstraintPose.js +55 -0
- package/dist/PathConstraint.d.ts +18 -22
- package/dist/PathConstraint.js +160 -136
- package/dist/PathConstraintData.d.ts +11 -14
- package/dist/PathConstraintData.js +14 -16
- package/dist/PathConstraintPose.d.ts +43 -0
- package/dist/PathConstraintPose.js +49 -0
- package/dist/Physics.d.ts +39 -0
- package/dist/Physics.js +41 -0
- package/dist/PhysicsConstraint.d.ts +26 -30
- package/dist/PhysicsConstraint.js +102 -94
- package/dist/PhysicsConstraintData.d.ts +22 -12
- package/dist/PhysicsConstraintData.js +23 -12
- package/dist/PhysicsConstraintPose.d.ts +47 -0
- package/dist/PhysicsConstraintPose.js +55 -0
- package/dist/Pose.d.ts +33 -0
- package/dist/Pose.js +30 -0
- package/dist/Posed.d.ts +58 -0
- package/dist/Posed.js +78 -0
- package/dist/PosedActive.d.ts +41 -0
- package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
- package/dist/PosedData.d.ts +40 -0
- package/dist/PosedData.js +45 -0
- package/dist/Skeleton.d.ts +110 -99
- package/dist/Skeleton.js +271 -449
- package/dist/SkeletonBinary.d.ts +2 -2
- package/dist/SkeletonBinary.js +644 -466
- package/dist/SkeletonBounds.d.ts +4 -4
- package/dist/SkeletonBounds.js +45 -46
- package/dist/SkeletonClipping.d.ts +26 -22
- package/dist/SkeletonClipping.js +654 -340
- package/dist/SkeletonData.d.ts +18 -35
- package/dist/SkeletonData.js +57 -97
- package/dist/SkeletonJson.d.ts +8 -6
- package/dist/SkeletonJson.js +892 -641
- package/dist/SkeletonRendererCore.d.ts +58 -0
- package/dist/SkeletonRendererCore.js +310 -0
- package/dist/Skin.d.ts +20 -16
- package/dist/Skin.js +58 -53
- package/dist/Slider.d.ts +46 -0
- package/dist/Slider.js +115 -0
- package/dist/SliderData.d.ts +58 -0
- package/dist/SliderData.js +59 -0
- package/dist/SliderPose.d.ts +37 -0
- package/dist/SliderPose.js +40 -0
- package/dist/Slot.d.ts +16 -38
- package/dist/Slot.js +37 -60
- package/dist/SlotData.d.ts +5 -12
- package/dist/SlotData.js +7 -15
- package/dist/SlotPose.d.ts +59 -0
- package/dist/SlotPose.js +81 -0
- package/dist/Texture.d.ts +1 -0
- package/dist/Texture.js +2 -1
- package/dist/TextureAtlas.d.ts +3 -3
- package/dist/TextureAtlas.js +49 -49
- package/dist/TransformConstraint.d.ts +16 -28
- package/dist/TransformConstraint.js +72 -209
- package/dist/TransformConstraintData.d.ts +108 -20
- package/dist/TransformConstraintData.js +274 -24
- package/dist/TransformConstraintPose.d.ts +45 -0
- package/dist/TransformConstraintPose.js +52 -0
- package/dist/Triangulator.d.ts +1 -1
- package/dist/Triangulator.js +91 -107
- package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
- package/dist/Update.js +30 -0
- package/dist/Utils.d.ts +13 -4
- package/dist/Utils.js +78 -37
- package/dist/attachments/Attachment.d.ts +27 -19
- package/dist/attachments/Attachment.js +59 -35
- package/dist/attachments/AttachmentLoader.d.ts +14 -14
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +2 -2
- package/dist/attachments/ClippingAttachment.d.ts +10 -3
- package/dist/attachments/ClippingAttachment.js +12 -3
- package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
- package/dist/attachments/HasSequence.js +30 -0
- package/dist/attachments/MeshAttachment.d.ts +28 -35
- package/dist/attachments/MeshAttachment.js +85 -97
- package/dist/attachments/PathAttachment.d.ts +3 -3
- package/dist/attachments/PathAttachment.js +6 -6
- package/dist/attachments/PointAttachment.d.ts +11 -6
- package/dist/attachments/PointAttachment.js +8 -3
- package/dist/attachments/RegionAttachment.d.ts +25 -27
- package/dist/attachments/RegionAttachment.js +101 -113
- package/dist/attachments/Sequence.d.ts +31 -6
- package/dist/attachments/Sequence.js +79 -13
- package/dist/esm/spine-core.min.mjs +2 -2
- package/dist/esm/spine-core.mjs +7651 -6090
- package/dist/esm/spine-core.mjs.map +4 -4
- package/dist/iife/spine-core.js +7651 -6090
- package/dist/iife/spine-core.js.map +4 -4
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +32 -11
- package/dist/index.js +33 -12
- package/dist/polyfills.js +4 -5
- package/package.json +1 -1
- package/dist/Updatable.js +0 -30
package/dist/SkeletonBounds.d.ts
CHANGED
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment.js";
|
|
30
|
-
import { Skeleton } from "./Skeleton.js";
|
|
31
|
-
import { NumberArrayLike } from "./Utils.js";
|
|
30
|
+
import type { Skeleton } from "./Skeleton.js";
|
|
31
|
+
import { type NumberArrayLike } from "./Utils.js";
|
|
32
32
|
/** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
|
|
33
33
|
* provided along with convenience methods for doing hit detection. */
|
|
34
34
|
export declare class SkeletonBounds {
|
|
@@ -58,12 +58,12 @@ export declare class SkeletonBounds {
|
|
|
58
58
|
/** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
|
|
59
59
|
aabbIntersectsSkeleton(bounds: SkeletonBounds): boolean;
|
|
60
60
|
/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
|
|
61
|
-
* efficient to only call this method if {@link
|
|
61
|
+
* efficient to only call this method if {@link aabbContainsPoint} returns true. */
|
|
62
62
|
containsPoint(x: number, y: number): BoundingBoxAttachment | null;
|
|
63
63
|
/** Returns true if the polygon contains the point. */
|
|
64
64
|
containsPointPolygon(polygon: NumberArrayLike, x: number, y: number): boolean;
|
|
65
65
|
/** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
|
|
66
|
-
* is usually more efficient to only call this method if {@link
|
|
66
|
+
* is usually more efficient to only call this method if {@link aabbIntersectsSegment} returns
|
|
67
67
|
* true. */
|
|
68
68
|
intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment | null;
|
|
69
69
|
/** Returns true if the polygon contains any part of the line segment. */
|
package/dist/SkeletonBounds.js
CHANGED
|
@@ -40,9 +40,9 @@ export class SkeletonBounds {
|
|
|
40
40
|
/** The top edge of the axis aligned bounding box. */
|
|
41
41
|
maxY = 0;
|
|
42
42
|
/** The visible bounding boxes. */
|
|
43
|
-
boundingBoxes =
|
|
43
|
+
boundingBoxes = [];
|
|
44
44
|
/** The world vertices for the bounding box polygons. */
|
|
45
|
-
polygons =
|
|
45
|
+
polygons = [];
|
|
46
46
|
polygonPool = new Pool(() => {
|
|
47
47
|
return Utils.newFloatArray(16);
|
|
48
48
|
});
|
|
@@ -53,28 +53,27 @@ export class SkeletonBounds {
|
|
|
53
53
|
update(skeleton, updateAabb) {
|
|
54
54
|
if (!skeleton)
|
|
55
55
|
throw new Error("skeleton cannot be null.");
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
const boundingBoxes = this.boundingBoxes;
|
|
57
|
+
const polygons = this.polygons;
|
|
58
|
+
const polygonPool = this.polygonPool;
|
|
59
|
+
const slots = skeleton.slots;
|
|
60
|
+
const slotCount = slots.length;
|
|
61
61
|
boundingBoxes.length = 0;
|
|
62
62
|
polygonPool.freeAll(polygons);
|
|
63
63
|
polygons.length = 0;
|
|
64
64
|
for (let i = 0; i < slotCount; i++) {
|
|
65
|
-
|
|
65
|
+
const slot = slots[i];
|
|
66
66
|
if (!slot.bone.active)
|
|
67
67
|
continue;
|
|
68
|
-
|
|
68
|
+
const attachment = slot.appliedPose.attachment;
|
|
69
69
|
if (attachment instanceof BoundingBoxAttachment) {
|
|
70
|
-
|
|
71
|
-
boundingBoxes.push(boundingBox);
|
|
70
|
+
boundingBoxes.push(attachment);
|
|
72
71
|
let polygon = polygonPool.obtain();
|
|
73
|
-
if (polygon.length
|
|
74
|
-
polygon = Utils.newFloatArray(
|
|
72
|
+
if (polygon.length !== attachment.worldVerticesLength) {
|
|
73
|
+
polygon = Utils.newFloatArray(attachment.worldVerticesLength);
|
|
75
74
|
}
|
|
76
75
|
polygons.push(polygon);
|
|
77
|
-
|
|
76
|
+
attachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, polygon, 0, 2);
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
if (updateAabb) {
|
|
@@ -89,13 +88,13 @@ export class SkeletonBounds {
|
|
|
89
88
|
}
|
|
90
89
|
aabbCompute() {
|
|
91
90
|
let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
|
|
92
|
-
|
|
91
|
+
const polygons = this.polygons;
|
|
93
92
|
for (let i = 0, n = polygons.length; i < n; i++) {
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
const polygon = polygons[i];
|
|
94
|
+
const vertices = polygon;
|
|
96
95
|
for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
const x = vertices[ii];
|
|
97
|
+
const y = vertices[ii + 1];
|
|
99
98
|
minX = Math.min(minX, x);
|
|
100
99
|
minY = Math.min(minY, y);
|
|
101
100
|
maxX = Math.max(maxX, x);
|
|
@@ -113,13 +112,13 @@ export class SkeletonBounds {
|
|
|
113
112
|
}
|
|
114
113
|
/** Returns true if the axis aligned bounding box intersects the line segment. */
|
|
115
114
|
aabbIntersectsSegment(x1, y1, x2, y2) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
const minX = this.minX;
|
|
116
|
+
const minY = this.minY;
|
|
117
|
+
const maxX = this.maxX;
|
|
118
|
+
const maxY = this.maxY;
|
|
120
119
|
if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))
|
|
121
120
|
return false;
|
|
122
|
-
|
|
121
|
+
const m = (y2 - y1) / (x2 - x1);
|
|
123
122
|
let y = m * (minX - x1) + y1;
|
|
124
123
|
if (y > minY && y < maxY)
|
|
125
124
|
return true;
|
|
@@ -139,9 +138,9 @@ export class SkeletonBounds {
|
|
|
139
138
|
return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
|
|
140
139
|
}
|
|
141
140
|
/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
|
|
142
|
-
* efficient to only call this method if {@link
|
|
141
|
+
* efficient to only call this method if {@link aabbContainsPoint} returns true. */
|
|
143
142
|
containsPoint(x, y) {
|
|
144
|
-
|
|
143
|
+
const polygons = this.polygons;
|
|
145
144
|
for (let i = 0, n = polygons.length; i < n; i++)
|
|
146
145
|
if (this.containsPointPolygon(polygons[i], x, y))
|
|
147
146
|
return this.boundingBoxes[i];
|
|
@@ -149,15 +148,15 @@ export class SkeletonBounds {
|
|
|
149
148
|
}
|
|
150
149
|
/** Returns true if the polygon contains the point. */
|
|
151
150
|
containsPointPolygon(polygon, x, y) {
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
const vertices = polygon;
|
|
152
|
+
const nn = polygon.length;
|
|
154
153
|
let prevIndex = nn - 2;
|
|
155
154
|
let inside = false;
|
|
156
155
|
for (let ii = 0; ii < nn; ii += 2) {
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
const vertexY = vertices[ii + 1];
|
|
157
|
+
const prevY = vertices[prevIndex + 1];
|
|
159
158
|
if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {
|
|
160
|
-
|
|
159
|
+
const vertexX = vertices[ii];
|
|
161
160
|
if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
|
|
162
161
|
inside = !inside;
|
|
163
162
|
}
|
|
@@ -166,10 +165,10 @@ export class SkeletonBounds {
|
|
|
166
165
|
return inside;
|
|
167
166
|
}
|
|
168
167
|
/** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
|
|
169
|
-
* is usually more efficient to only call this method if {@link
|
|
168
|
+
* is usually more efficient to only call this method if {@link aabbIntersectsSegment} returns
|
|
170
169
|
* true. */
|
|
171
170
|
intersectsSegment(x1, y1, x2, y2) {
|
|
172
|
-
|
|
171
|
+
const polygons = this.polygons;
|
|
173
172
|
for (let i = 0, n = polygons.length; i < n; i++)
|
|
174
173
|
if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
|
|
175
174
|
return this.boundingBoxes[i];
|
|
@@ -177,19 +176,19 @@ export class SkeletonBounds {
|
|
|
177
176
|
}
|
|
178
177
|
/** Returns true if the polygon contains any part of the line segment. */
|
|
179
178
|
intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
179
|
+
const vertices = polygon;
|
|
180
|
+
const nn = polygon.length;
|
|
181
|
+
const width12 = x1 - x2, height12 = y1 - y2;
|
|
182
|
+
const det1 = x1 * y2 - y1 * x2;
|
|
184
183
|
let x3 = vertices[nn - 2], y3 = vertices[nn - 1];
|
|
185
184
|
for (let ii = 0; ii < nn; ii += 2) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
185
|
+
const x4 = vertices[ii], y4 = vertices[ii + 1];
|
|
186
|
+
const det2 = x3 * y4 - y3 * x4;
|
|
187
|
+
const width34 = x3 - x4, height34 = y3 - y4;
|
|
188
|
+
const det3 = width12 * height34 - height12 * width34;
|
|
189
|
+
const x = (det1 * width34 - width12 * det2) / det3;
|
|
191
190
|
if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {
|
|
192
|
-
|
|
191
|
+
const y = (det1 * height34 - height12 * det2) / det3;
|
|
193
192
|
if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))
|
|
194
193
|
return true;
|
|
195
194
|
}
|
|
@@ -202,8 +201,8 @@ export class SkeletonBounds {
|
|
|
202
201
|
getPolygon(boundingBox) {
|
|
203
202
|
if (!boundingBox)
|
|
204
203
|
throw new Error("boundingBox cannot be null.");
|
|
205
|
-
|
|
206
|
-
return index
|
|
204
|
+
const index = this.boundingBoxes.indexOf(boundingBox);
|
|
205
|
+
return index === -1 ? null : this.polygons[index];
|
|
207
206
|
}
|
|
208
207
|
/** The width of the axis aligned bounding box. */
|
|
209
208
|
getWidth() {
|
|
@@ -214,4 +213,4 @@ export class SkeletonBounds {
|
|
|
214
213
|
return this.maxY - this.minY;
|
|
215
214
|
}
|
|
216
215
|
}
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBbUIsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUxRDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFFMUIsc0RBQXNEO0lBQ3RELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCx3REFBd0Q7SUFDeEQsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVULHVEQUF1RDtJQUN2RCxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRVQscURBQXFEO0lBQ3JELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCxrQ0FBa0M7SUFDbEMsYUFBYSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO0lBRW5ELHdEQUF3RDtJQUN4RCxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7SUFFaEMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFrQixHQUFHLEVBQUU7UUFDcEQsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozt3RUFHb0U7SUFDcEUsTUFBTSxDQUFFLFFBQWtCLEVBQUUsVUFBbUI7UUFDOUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0QsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxLQUFLLEdB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Q0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbkQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ25ILENBQUM7WUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNULENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsVUFBVSxDQUFFLFdBQWtDO1FBQzdDLElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxRQUFRO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxTQUFTO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBCb3VuZGluZ0JveEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9Cb3VuZGluZ0JveEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcbmltcG9ydCB7IE51bWJlckFycmF5TGlrZSwgUG9vbCwgVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG4vKiogQ29sbGVjdHMgZWFjaCB2aXNpYmxlIHtAbGluayBCb3VuZGluZ0JveEF0dGFjaG1lbnR9IGFuZCBjb21wdXRlcyB0aGUgd29ybGQgdmVydGljZXMgZm9yIGl0cyBwb2x5Z29uLiBUaGUgcG9seWdvbiB2ZXJ0aWNlcyBhcmVcbiAqIHByb3ZpZGVkIGFsb25nIHdpdGggY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZG9pbmcgaGl0IGRldGVjdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkJvdW5kcyB7XG5cblx0LyoqIFRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3guICovXG5cdG1pblggPSAwO1xuXG5cdC8qKiBUaGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3guICovXG5cdG1pblkgPSAwO1xuXG5cdC8qKiBUaGUgcmlnaHQgZWRnZSBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0bWF4WCA9IDA7XG5cblx0LyoqIFRoZSB0b3AgZWRnZSBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0bWF4WSA9IDA7XG5cblx0LyoqIFRoZSB2aXNpYmxlIGJvdW5kaW5nIGJveGVzLiAqL1xuXHRib3VuZGluZ0JveGVzID0gbmV3IEFycmF5PEJvdW5kaW5nQm94QXR0YWNobWVudD4oKTtcblxuXHQvKiogVGhlIHdvcmxkIHZlcnRpY2VzIGZvciB0aGUgYm91bmRpbmcgYm94IHBvbHlnb25zLiAqL1xuXHRwb2x5Z29ucyA9IG5ldyBBcnJheTxOdW1iZXJBcnJheUxpa2U+KCk7XG5cblx0cHJpdmF0ZSBwb2x5Z29uUG9vbCA9IG5ldyBQb29sPE51bWJlckFycmF5TGlrZT4oKCkgPT4ge1xuXHRcdHJldHVybiBVdGlscy5uZXdGbG9hdEFycmF5KDE2KTtcblx0fSk7XG5cblx0LyoqIENsZWFycyBhbnkgcHJldmlvdXMgcG9seWdvbnMsIGZpbmRzIGFsbCB2aXNpYmxlIGJvdW5kaW5nIGJveCBhdHRhY2htZW50cywgYW5kIGNvbXB1dGVzIHRoZSB3b3JsZCB2ZXJ0aWNlcyBmb3IgZWFjaCBib3VuZGluZ1xuXHQgKiBib3gncyBwb2x5Z29uLlxuXHQgKiBAcGFyYW0gdXBkYXRlQWFiYiBJZiB0cnVlLCB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBjb250YWluaW5nIGFsbCB0aGUgcG9seWdvbnMgaXMgY29tcHV0ZWQuIElmIGZhbHNlLCB0aGVcblx0ICogICAgICAgICAgIFNrZWxldG9uQm91bmRzIEFBQkIgbWV0aG9kcyB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4gKi9cblx0dXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHVwZGF0ZUFhYmI6IGJvb2xlYW4pIHtcblx0XHRpZiAoIXNrZWxldG9uKSB0aHJvdyBuZXcgRXJyb3IoXCJza2VsZXRvbiBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0bGV0IGJvdW5kaW5nQm94ZXMgPSB0aGlzLmJvdW5kaW5nQm94ZXM7XG5cdFx0bGV0IHBvbHlnb25zID0gdGhpcy5wb2x5Z29ucztcblx0XHRsZXQgcG9seWdvblBvb2wgPSB0aGlzLnBvbHlnb25Qb29sO1xuXHRcdGxldCBzbG90cyA9IHNrZWxldG9uLnNsb3RzO1xuXHRcdGxldCBzbG90Q291bnQgPSBzbG90cy5sZW5ndGg7XG5cblx0XHRib3VuZGluZ0JveGVzLmxlbmd0aCA9IDA7XG5cdFx0cG9seWdvblBvb2wuZnJlZUFsbChwb2x5Z29ucyk7XG5cdFx0cG9seWdvbnMubGVuZ3RoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdENvdW50OyBpKyspIHtcblx0XHRcdGxldCBzbG90ID0gc2xvdHNbaV07XG5cdFx0XHRpZiAoIXNsb3QuYm9uZS5hY3RpdmUpIGNvbnRpbnVlO1xuXHRcdFx0bGV0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgQm91bmRpbmdCb3hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGxldCBib3VuZGluZ0JveCA9IGF0dGFjaG1lbnQgYXMgQm91bmRpbmdCb3hBdHRhY2htZW50O1xuXHRcdFx0XHRib3VuZGluZ0JveGVzLnB1c2goYm91bmRpbmdCb3gpO1xuXG5cdFx0XHRcdGxldCBwb2x5Z29uID0gcG9seWdvblBvb2wub2J0YWluKCk7XG5cdFx0XHRcdGlmIChwb2x5Z29uLmxlbmd0aCAhPSBib3VuZGluZ0JveC53b3JsZFZlcnRpY2VzTGVuZ3RoKSB7XG5cdFx0XHRcdFx0cG9seWdvbiA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoYm91bmRpbmdCb3gud29ybGRWZXJ0aWNlc0xlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cG9seWdvbnMucHVzaChwb2x5Z29uKTtcblx0XHRcdFx0Ym91bmRpbmdCb3guY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgMCwgYm91bmRpbmdCb3gud29ybGRWZXJ0aWNlc0xlbmd0aCwgcG9seWdvbiwgMCwgMik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFhYmIpIHtcblx0XHRcdHRoaXMuYWFiYkNvbXB1dGUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5taW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5taW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5tYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5tYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdH1cblx0fVxuXG5cdGFhYmJDb21wdXRlICgpIHtcblx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRsZXQgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gcG9seWdvbnMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgcG9seWdvbiA9IHBvbHlnb25zW2ldO1xuXHRcdFx0bGV0IHZlcnRpY2VzID0gcG9seWdvbjtcblx0XHRcdGZvciAobGV0IGlpID0gMCwgbm4gPSBwb2x5Z29uLmxlbmd0aDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0XHRsZXQgeCA9IHZlcnRpY2VzW2lpXTtcblx0XHRcdFx0bGV0IHkgPSB2ZXJ0aWNlc1tpaSArIDFdO1xuXHRcdFx0XHRtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG5cdFx0XHRcdG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcblx0XHRcdFx0bWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuXHRcdFx0XHRtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWluWCA9IG1pblg7XG5cdFx0dGhpcy5taW5ZID0gbWluWTtcblx0XHR0aGlzLm1heFggPSBtYXhYO1xuXHRcdHRoaXMubWF4WSA9IG1heFk7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IGNvbnRhaW5zIHRoZSBwb2ludC4gKi9cblx0YWFiYkNvbnRhaW5zUG9pbnQgKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHggPj0gdGhpcy5taW5YICYmIHggPD0gdGhpcy5tYXhYICYmIHkgPj0gdGhpcy5taW5ZICYmIHkgPD0gdGhpcy5tYXhZO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBpbnRlcnNlY3RzIHRoZSBsaW5lIHNlZ21lbnQuICovXG5cdGFhYmJJbnRlcnNlY3RzU2VnbWVudCAoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuXHRcdGxldCBtaW5YID0gdGhpcy5taW5YO1xuXHRcdGxldCBtaW5ZID0gdGhpcy5taW5ZO1xuXHRcdGxldCBtYXhYID0gdGhpcy5tYXhYO1xuXHRcdGxldCBtYXhZID0gdGhpcy5tYXhZO1xuXHRcdGlmICgoeDEgPD0gbWluWCAmJiB4MiA8PSBtaW5YKSB8fCAoeTEgPD0gbWluWSAmJiB5MiA8PSBtaW5ZKSB8fCAoeDEgPj0gbWF4WCAmJiB4MiA+PSBtYXhYKSB8fCAoeTEgPj0gbWF4WSAmJiB5MiA+PSBtYXhZKSlcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRsZXQgbSA9ICh5MiAtIHkxKSAvICh4MiAtIHgxKTtcblx0XHRsZXQgeSA9IG0gKiAobWluWCAtIHgxKSArIHkxO1xuXHRcdGlmICh5ID4gbWluWSAmJiB5IDwgbWF4WSkgcmV0dXJuIHRydWU7XG5cdFx0eSA9IG0gKiAobWF4WCAtIHgxKSArIHkxO1xuXHRcdGlmICh5ID4gbWluWSAmJiB5IDwgbWF4WSkgcmV0dXJuIHRydWU7XG5cdFx0bGV0IHggPSAobWluWSAtIHkxKSAvIG0gKyB4MTtcblx0XHRpZiAoeCA+IG1pblggJiYgeCA8IG1heFgpIHJldHVybiB0cnVlO1xuXHRcdHggPSAobWF4WSAtIHkxKSAvIG0gKyB4MTtcblx0XHRpZiAoeCA+IG1pblggJiYgeCA8IG1heFgpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBvZiB0aGUgc3BlY2lmaWVkIGJvdW5kcy4gKi9cblx0YWFiYkludGVyc2VjdHNTa2VsZXRvbiAoYm91bmRzOiBTa2VsZXRvbkJvdW5kcykge1xuXHRcdHJldHVybiB0aGlzLm1pblggPCBib3VuZHMubWF4WCAmJiB0aGlzLm1heFggPiBib3VuZHMubWluWCAmJiB0aGlzLm1pblkgPCBib3VuZHMubWF4WSAmJiB0aGlzLm1heFkgPiBib3VuZHMubWluWTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBmaXJzdCBib3VuZGluZyBib3ggYXR0YWNobWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb2ludCwgb3IgbnVsbC4gV2hlbiBkb2luZyBtYW55IGNoZWNrcywgaXQgaXMgdXN1YWxseSBtb3JlXG5cdCAqIGVmZmljaWVudCB0byBvbmx5IGNhbGwgdGhpcyBtZXRob2QgaWYge0BsaW5rICNhYWJiQ29udGFpbnNQb2ludChmbG9hdCwgZmxvYXQpfSByZXR1cm5zIHRydWUuICovXG5cdGNvbnRhaW5zUG9pbnQgKHg6IG51bWJlciwgeTogbnVtYmVyKTogQm91bmRpbmdCb3hBdHRhY2htZW50IHwgbnVsbCB7XG5cdFx0bGV0IHBvbHlnb25zID0gdGhpcy5wb2x5Z29ucztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHBvbHlnb25zLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zUG9pbnRQb2x5Z29uKHBvbHlnb25zW2ldLCB4LCB5KSkgcmV0dXJuIHRoaXMuYm91bmRpbmdCb3hlc1tpXTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbHlnb24gY29udGFpbnMgdGhlIHBvaW50LiAqL1xuXHRjb250YWluc1BvaW50UG9seWdvbiAocG9seWdvbjogTnVtYmVyQXJyYXlMaWtlLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdGxldCB2ZXJ0aWNlcyA9IHBvbHlnb247XG5cdFx0bGV0IG5uID0gcG9seWdvbi5sZW5ndGg7XG5cblx0XHRsZXQgcHJldkluZGV4ID0gbm4gLSAyO1xuXHRcdGxldCBpbnNpZGUgPSBmYWxzZTtcblx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgbm47IGlpICs9IDIpIHtcblx0XHRcdGxldCB2ZXJ0ZXhZID0gdmVydGljZXNbaWkgKyAxXTtcblx0XHRcdGxldCBwcmV2WSA9IHZlcnRpY2VzW3ByZXZJbmRleCArIDFdO1xuXHRcdFx0aWYgKCh2ZXJ0ZXhZIDwgeSAmJiBwcmV2WSA+PSB5KSB8fCAocHJldlkgPCB5ICYmIHZlcnRleFkgPj0geSkpIHtcblx0XHRcdFx0bGV0IHZlcnRleFggPSB2ZXJ0aWNlc1tpaV07XG5cdFx0XHRcdGlmICh2ZXJ0ZXhYICsgKHkgLSB2ZXJ0ZXhZKSAvIChwcmV2WSAtIHZlcnRleFkpICogKHZlcnRpY2VzW3ByZXZJbmRleF0gLSB2ZXJ0ZXhYKSA8IHgpIGluc2lkZSA9ICFpbnNpZGU7XG5cdFx0XHR9XG5cdFx0XHRwcmV2SW5kZXggPSBpaTtcblx0XHR9XG5cdFx0cmV0dXJuIGluc2lkZTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBmaXJzdCBib3VuZGluZyBib3ggYXR0YWNobWVudCB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBsaW5lIHNlZ21lbnQsIG9yIG51bGwuIFdoZW4gZG9pbmcgbWFueSBjaGVja3MsIGl0XG5cdCAqIGlzIHVzdWFsbHkgbW9yZSBlZmZpY2llbnQgdG8gb25seSBjYWxsIHRoaXMgbWV0aG9kIGlmIHtAbGluayAjYWFiYkludGVyc2VjdHNTZWdtZW50KCl9IHJldHVybnNcblx0ICogdHJ1ZS4gKi9cblx0aW50ZXJzZWN0c1NlZ21lbnQgKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcblx0XHRsZXQgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gcG9seWdvbnMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0aWYgKHRoaXMuaW50ZXJzZWN0c1NlZ21lbnRQb2x5Z29uKHBvbHlnb25zW2ldLCB4MSwgeTEsIHgyLCB5MikpIHJldHVybiB0aGlzLmJvdW5kaW5nQm94ZXNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2x5Z29uIGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBsaW5lIHNlZ21lbnQuICovXG5cdGludGVyc2VjdHNTZWdtZW50UG9seWdvbiAocG9seWdvbjogTnVtYmVyQXJyYXlMaWtlLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG5cdFx0bGV0IHZlcnRpY2VzID0gcG9seWdvbjtcblx0XHRsZXQgbm4gPSBwb2x5Z29uLmxlbmd0aDtcblxuXHRcdGxldCB3aWR0aDEyID0geDEgLSB4MiwgaGVpZ2h0MTIgPSB5MSAtIHkyO1xuXHRcdGxldCBkZXQxID0geDEgKiB5MiAtIHkxICogeDI7XG5cdFx0bGV0IHgzID0gdmVydGljZXNbbm4gLSAyXSwgeTMgPSB2ZXJ0aWNlc1tubiAtIDFdO1xuXHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0bGV0IHg0ID0gdmVydGljZXNbaWldLCB5NCA9IHZlcnRpY2VzW2lpICsgMV07XG5cdFx0XHRsZXQgZGV0MiA9IHgzICogeTQgLSB5MyAqIHg0O1xuXHRcdFx0bGV0IHdpZHRoMzQgPSB4MyAtIHg0LCBoZWlnaHQzNCA9IHkzIC0geTQ7XG5cdFx0XHRsZXQgZGV0MyA9IHdpZHRoMTIgKiBoZWlnaHQzNCAtIGhlaWdodDEyICogd2lkdGgzNDtcblx0XHRcdGxldCB4ID0gKGRldDEgKiB3aWR0aDM0IC0gd2lkdGgxMiAqIGRldDIpIC8gZGV0Mztcblx0XHRcdGlmICgoKHggPj0geDMgJiYgeCA8PSB4NCkgfHwgKHggPj0geDQgJiYgeCA8PSB4MykpICYmICgoeCA+PSB4MSAmJiB4IDw9IHgyKSB8fCAoeCA+PSB4MiAmJiB4IDw9IHgxKSkpIHtcblx0XHRcdFx0bGV0IHkgPSAoZGV0MSAqIGhlaWdodDM0IC0gaGVpZ2h0MTIgKiBkZXQyKSAvIGRldDM7XG5cdFx0XHRcdGlmICgoKHkgPj0geTMgJiYgeSA8PSB5NCkgfHwgKHkgPj0geTQgJiYgeSA8PSB5MykpICYmICgoeSA+PSB5MSAmJiB5IDw9IHkyKSB8fCAoeSA+PSB5MiAmJiB5IDw9IHkxKSkpIHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0eDMgPSB4NDtcblx0XHRcdHkzID0geTQ7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBwb2x5Z29uIGZvciB0aGUgc3BlY2lmaWVkIGJvdW5kaW5nIGJveCwgb3IgbnVsbC4gKi9cblx0Z2V0UG9seWdvbiAoYm91bmRpbmdCb3g6IEJvdW5kaW5nQm94QXR0YWNobWVudCkge1xuXHRcdGlmICghYm91bmRpbmdCb3gpIHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nQm94IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRsZXQgaW5kZXggPSB0aGlzLmJvdW5kaW5nQm94ZXMuaW5kZXhPZihib3VuZGluZ0JveCk7XG5cdFx0cmV0dXJuIGluZGV4ID09IC0xID8gbnVsbCA6IHRoaXMucG9seWdvbnNbaW5kZXhdO1xuXHR9XG5cblx0LyoqIFRoZSB3aWR0aCBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0Z2V0V2lkdGggKCkge1xuXHRcdHJldHVybiB0aGlzLm1heFggLSB0aGlzLm1pblg7XG5cdH1cblxuXHQvKiogVGhlIGhlaWdodCBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0Z2V0SGVpZ2h0ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhZIC0gdGhpcy5taW5ZO1xuXHR9XG59XG4iXX0=
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBd0IsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUvRDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFFMUIsc0RBQXNEO0lBQ3RELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCx3REFBd0Q7SUFDeEQsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVULHVEQUF1RDtJQUN2RCxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRVQscURBQXFEO0lBQ3JELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCxrQ0FBa0M7SUFDbEMsYUFBYSxHQUFHLEVBQTZCLENBQUM7SUFFOUMsd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxFQUF1QixDQUFDO0lBRTNCLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBa0IsR0FBRyxFQUFFO1FBQ3BELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVIOzs7d0VBR29FO0lBQ3BFLE1BQU0sQ0FBRSxRQUFrQixFQUFFLFVBQW1CO1FBQzlDLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENB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QUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUNuSCxDQUFDO1lBQ0QsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDVCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLFVBQVUsQ0FBRSxXQUFrQztRQUM3QyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsUUFBUTtRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsU0FBUztRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgQm91bmRpbmdCb3hBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvQm91bmRpbmdCb3hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcbmltcG9ydCB7IHR5cGUgTnVtYmVyQXJyYXlMaWtlLCBQb29sLCBVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBDb2xsZWN0cyBlYWNoIHZpc2libGUge0BsaW5rIEJvdW5kaW5nQm94QXR0YWNobWVudH0gYW5kIGNvbXB1dGVzIHRoZSB3b3JsZCB2ZXJ0aWNlcyBmb3IgaXRzIHBvbHlnb24uIFRoZSBwb2x5Z29uIHZlcnRpY2VzIGFyZVxuICogcHJvdmlkZWQgYWxvbmcgd2l0aCBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBkb2luZyBoaXQgZGV0ZWN0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uQm91bmRzIHtcblxuXHQvKiogVGhlIGxlZnQgZWRnZSBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0bWluWCA9IDA7XG5cblx0LyoqIFRoZSBib3R0b20gZWRnZSBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0bWluWSA9IDA7XG5cblx0LyoqIFRoZSByaWdodCBlZGdlIG9mIHRoZSBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94LiAqL1xuXHRtYXhYID0gMDtcblxuXHQvKiogVGhlIHRvcCBlZGdlIG9mIHRoZSBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94LiAqL1xuXHRtYXhZID0gMDtcblxuXHQvKiogVGhlIHZpc2libGUgYm91bmRpbmcgYm94ZXMuICovXG5cdGJvdW5kaW5nQm94ZXMgPSBbXSBhcyBCb3VuZGluZ0JveEF0dGFjaG1lbnRbXTtcblxuXHQvKiogVGhlIHdvcmxkIHZlcnRpY2VzIGZvciB0aGUgYm91bmRpbmcgYm94IHBvbHlnb25zLiAqL1xuXHRwb2x5Z29ucyA9IFtdIGFzIE51bWJlckFycmF5TGlrZVtdO1xuXG5cdHByaXZhdGUgcG9seWdvblBvb2wgPSBuZXcgUG9vbDxOdW1iZXJBcnJheUxpa2U+KCgpID0+IHtcblx0XHRyZXR1cm4gVXRpbHMubmV3RmxvYXRBcnJheSgxNik7XG5cdH0pO1xuXG5cdC8qKiBDbGVhcnMgYW55IHByZXZpb3VzIHBvbHlnb25zLCBmaW5kcyBhbGwgdmlzaWJsZSBib3VuZGluZyBib3ggYXR0YWNobWVudHMsIGFuZCBjb21wdXRlcyB0aGUgd29ybGQgdmVydGljZXMgZm9yIGVhY2ggYm91bmRpbmdcblx0ICogYm94J3MgcG9seWdvbi5cblx0ICogQHBhcmFtIHVwZGF0ZUFhYmIgSWYgdHJ1ZSwgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggY29udGFpbmluZyBhbGwgdGhlIHBvbHlnb25zIGlzIGNvbXB1dGVkLiBJZiBmYWxzZSwgdGhlXG5cdCAqICAgICAgICAgICBTa2VsZXRvbkJvdW5kcyBBQUJCIG1ldGhvZHMgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuICovXG5cdHVwZGF0ZSAoc2tlbGV0b246IFNrZWxldG9uLCB1cGRhdGVBYWJiOiBib29sZWFuKSB7XG5cdFx0aWYgKCFza2VsZXRvbikgdGhyb3cgbmV3IEVycm9yKFwic2tlbGV0b24gY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IGJvdW5kaW5nQm94ZXMgPSB0aGlzLmJvdW5kaW5nQm94ZXM7XG5cdFx0Y29uc3QgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zO1xuXHRcdGNvbnN0IHBvbHlnb25Qb29sID0gdGhpcy5wb2x5Z29uUG9vbDtcblx0XHRjb25zdCBzbG90cyA9IHNrZWxldG9uLnNsb3RzO1xuXHRcdGNvbnN0IHNsb3RDb3VudCA9IHNsb3RzLmxlbmd0aDtcblxuXHRcdGJvdW5kaW5nQm94ZXMubGVuZ3RoID0gMDtcblx0XHRwb2x5Z29uUG9vbC5mcmVlQWxsKHBvbHlnb25zKTtcblx0XHRwb2x5Z29ucy5sZW5ndGggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzbG90Q291bnQ7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IHNsb3RzW2ldO1xuXHRcdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmFwcGxpZWRQb3NlLmF0dGFjaG1lbnQ7XG5cdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIEJvdW5kaW5nQm94QXR0YWNobWVudCkge1xuXHRcdFx0XHRib3VuZGluZ0JveGVzLnB1c2goYXR0YWNobWVudCk7XG5cblx0XHRcdFx0bGV0IHBvbHlnb24gPSBwb2x5Z29uUG9vbC5vYnRhaW4oKTtcblx0XHRcdFx0aWYgKHBvbHlnb24ubGVuZ3RoICE9PSBhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGgpIHtcblx0XHRcdFx0XHRwb2x5Z29uID0gVXRpbHMubmV3RmxvYXRBcnJheShhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBvbHlnb25zLnB1c2gocG9seWdvbik7XG5cdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoc2tlbGV0b24sIHNsb3QsIDAsIGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCwgcG9seWdvbiwgMCwgMik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFhYmIpIHtcblx0XHRcdHRoaXMuYWFiYkNvbXB1dGUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5taW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5taW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5tYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdFx0dGhpcy5tYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXHRcdH1cblx0fVxuXG5cdGFhYmJDb21wdXRlICgpIHtcblx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRjb25zdCBwb2x5Z29ucyA9IHRoaXMucG9seWdvbnM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBwb2x5Z29ucy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHBvbHlnb24gPSBwb2x5Z29uc1tpXTtcblx0XHRcdGNvbnN0IHZlcnRpY2VzID0gcG9seWdvbjtcblx0XHRcdGZvciAobGV0IGlpID0gMCwgbm4gPSBwb2x5Z29uLmxlbmd0aDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0XHRjb25zdCB4ID0gdmVydGljZXNbaWldO1xuXHRcdFx0XHRjb25zdCB5ID0gdmVydGljZXNbaWkgKyAxXTtcblx0XHRcdFx0bWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuXHRcdFx0XHRtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG5cdFx0XHRcdG1heFggPSBNYXRoLm1heChtYXhYLCB4KTtcblx0XHRcdFx0bWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm1pblggPSBtaW5YO1xuXHRcdHRoaXMubWluWSA9IG1pblk7XG5cdFx0dGhpcy5tYXhYID0gbWF4WDtcblx0XHR0aGlzLm1heFkgPSBtYXhZO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBjb250YWlucyB0aGUgcG9pbnQuICovXG5cdGFhYmJDb250YWluc1BvaW50ICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdHJldHVybiB4ID49IHRoaXMubWluWCAmJiB4IDw9IHRoaXMubWF4WCAmJiB5ID49IHRoaXMubWluWSAmJiB5IDw9IHRoaXMubWF4WTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgbGluZSBzZWdtZW50LiAqL1xuXHRhYWJiSW50ZXJzZWN0c1NlZ21lbnQgKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcblx0XHRjb25zdCBtaW5YID0gdGhpcy5taW5YO1xuXHRcdGNvbnN0IG1pblkgPSB0aGlzLm1pblk7XG5cdFx0Y29uc3QgbWF4WCA9IHRoaXMubWF4WDtcblx0XHRjb25zdCBtYXhZID0gdGhpcy5tYXhZO1xuXHRcdGlmICgoeDEgPD0gbWluWCAmJiB4MiA8PSBtaW5YKSB8fCAoeTEgPD0gbWluWSAmJiB5MiA8PSBtaW5ZKSB8fCAoeDEgPj0gbWF4WCAmJiB4MiA+PSBtYXhYKSB8fCAoeTEgPj0gbWF4WSAmJiB5MiA+PSBtYXhZKSlcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBtID0gKHkyIC0geTEpIC8gKHgyIC0geDEpO1xuXHRcdGxldCB5ID0gbSAqIChtaW5YIC0geDEpICsgeTE7XG5cdFx0aWYgKHkgPiBtaW5ZICYmIHkgPCBtYXhZKSByZXR1cm4gdHJ1ZTtcblx0XHR5ID0gbSAqIChtYXhYIC0geDEpICsgeTE7XG5cdFx0aWYgKHkgPiBtaW5ZICYmIHkgPCBtYXhZKSByZXR1cm4gdHJ1ZTtcblx0XHRsZXQgeCA9IChtaW5ZIC0geTEpIC8gbSArIHgxO1xuXHRcdGlmICh4ID4gbWluWCAmJiB4IDwgbWF4WCkgcmV0dXJuIHRydWU7XG5cdFx0eCA9IChtYXhZIC0geTEpIC8gbSArIHgxO1xuXHRcdGlmICh4ID4gbWluWCAmJiB4IDwgbWF4WCkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBpbnRlcnNlY3RzIHRoZSBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IG9mIHRoZSBzcGVjaWZpZWQgYm91bmRzLiAqL1xuXHRhYWJiSW50ZXJzZWN0c1NrZWxldG9uIChib3VuZHM6IFNrZWxldG9uQm91bmRzKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluWCA8IGJvdW5kcy5tYXhYICYmIHRoaXMubWF4WCA+IGJvdW5kcy5taW5YICYmIHRoaXMubWluWSA8IGJvdW5kcy5tYXhZICYmIHRoaXMubWF4WSA+IGJvdW5kcy5taW5ZO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGZpcnN0IGJvdW5kaW5nIGJveCBhdHRhY2htZW50IHRoYXQgY29udGFpbnMgdGhlIHBvaW50LCBvciBudWxsLiBXaGVuIGRvaW5nIG1hbnkgY2hlY2tzLCBpdCBpcyB1c3VhbGx5IG1vcmVcblx0ICogZWZmaWNpZW50IHRvIG9ubHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB7QGxpbmsgYWFiYkNvbnRhaW5zUG9pbnR9IHJldHVybnMgdHJ1ZS4gKi9cblx0Y29udGFpbnNQb2ludCAoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBCb3VuZGluZ0JveEF0dGFjaG1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBwb2x5Z29ucyA9IHRoaXMucG9seWdvbnM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBwb2x5Z29ucy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAodGhpcy5jb250YWluc1BvaW50UG9seWdvbihwb2x5Z29uc1tpXSwgeCwgeSkpIHJldHVybiB0aGlzLmJvdW5kaW5nQm94ZXNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2x5Z29uIGNvbnRhaW5zIHRoZSBwb2ludC4gKi9cblx0Y29udGFpbnNQb2ludFBvbHlnb24gKHBvbHlnb246IE51bWJlckFycmF5TGlrZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IHBvbHlnb247XG5cdFx0Y29uc3Qgbm4gPSBwb2x5Z29uLmxlbmd0aDtcblxuXHRcdGxldCBwcmV2SW5kZXggPSBubiAtIDI7XG5cdFx0bGV0IGluc2lkZSA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0Y29uc3QgdmVydGV4WSA9IHZlcnRpY2VzW2lpICsgMV07XG5cdFx0XHRjb25zdCBwcmV2WSA9IHZlcnRpY2VzW3ByZXZJbmRleCArIDFdO1xuXHRcdFx0aWYgKCh2ZXJ0ZXhZIDwgeSAmJiBwcmV2WSA+PSB5KSB8fCAocHJldlkgPCB5ICYmIHZlcnRleFkgPj0geSkpIHtcblx0XHRcdFx0Y29uc3QgdmVydGV4WCA9IHZlcnRpY2VzW2lpXTtcblx0XHRcdFx0aWYgKHZlcnRleFggKyAoeSAtIHZlcnRleFkpIC8gKHByZXZZIC0gdmVydGV4WSkgKiAodmVydGljZXNbcHJldkluZGV4XSAtIHZlcnRleFgpIDwgeCkgaW5zaWRlID0gIWluc2lkZTtcblx0XHRcdH1cblx0XHRcdHByZXZJbmRleCA9IGlpO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5zaWRlO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGZpcnN0IGJvdW5kaW5nIGJveCBhdHRhY2htZW50IHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIGxpbmUgc2VnbWVudCwgb3IgbnVsbC4gV2hlbiBkb2luZyBtYW55IGNoZWNrcywgaXRcblx0ICogaXMgdXN1YWxseSBtb3JlIGVmZmljaWVudCB0byBvbmx5IGNhbGwgdGhpcyBtZXRob2QgaWYge0BsaW5rIGFhYmJJbnRlcnNlY3RzU2VnbWVudH0gcmV0dXJuc1xuXHQgKiB0cnVlLiAqL1xuXHRpbnRlcnNlY3RzU2VnbWVudCAoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuXHRcdGNvbnN0IHBvbHlnb25zID0gdGhpcy5wb2x5Z29ucztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHBvbHlnb25zLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGlmICh0aGlzLmludGVyc2VjdHNTZWdtZW50UG9seWdvbihwb2x5Z29uc1tpXSwgeDEsIHkxLCB4MiwgeTIpKSByZXR1cm4gdGhpcy5ib3VuZGluZ0JveGVzW2ldO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9seWdvbiBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgbGluZSBzZWdtZW50LiAqL1xuXHRpbnRlcnNlY3RzU2VnbWVudFBvbHlnb24gKHBvbHlnb246IE51bWJlckFycmF5TGlrZSwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gcG9seWdvbjtcblx0XHRjb25zdCBubiA9IHBvbHlnb24ubGVuZ3RoO1xuXG5cdFx0Y29uc3Qgd2lkdGgxMiA9IHgxIC0geDIsIGhlaWdodDEyID0geTEgLSB5Mjtcblx0XHRjb25zdCBkZXQxID0geDEgKiB5MiAtIHkxICogeDI7XG5cdFx0bGV0IHgzID0gdmVydGljZXNbbm4gLSAyXSwgeTMgPSB2ZXJ0aWNlc1tubiAtIDFdO1xuXHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0Y29uc3QgeDQgPSB2ZXJ0aWNlc1tpaV0sIHk0ID0gdmVydGljZXNbaWkgKyAxXTtcblx0XHRcdGNvbnN0IGRldDIgPSB4MyAqIHk0IC0geTMgKiB4NDtcblx0XHRcdGNvbnN0IHdpZHRoMzQgPSB4MyAtIHg0LCBoZWlnaHQzNCA9IHkzIC0geTQ7XG5cdFx0XHRjb25zdCBkZXQzID0gd2lkdGgxMiAqIGhlaWdodDM0IC0gaGVpZ2h0MTIgKiB3aWR0aDM0O1xuXHRcdFx0Y29uc3QgeCA9IChkZXQxICogd2lkdGgzNCAtIHdpZHRoMTIgKiBkZXQyKSAvIGRldDM7XG5cdFx0XHRpZiAoKCh4ID49IHgzICYmIHggPD0geDQpIHx8ICh4ID49IHg0ICYmIHggPD0geDMpKSAmJiAoKHggPj0geDEgJiYgeCA8PSB4MikgfHwgKHggPj0geDIgJiYgeCA8PSB4MSkpKSB7XG5cdFx0XHRcdGNvbnN0IHkgPSAoZGV0MSAqIGhlaWdodDM0IC0gaGVpZ2h0MTIgKiBkZXQyKSAvIGRldDM7XG5cdFx0XHRcdGlmICgoKHkgPj0geTMgJiYgeSA8PSB5NCkgfHwgKHkgPj0geTQgJiYgeSA8PSB5MykpICYmICgoeSA+PSB5MSAmJiB5IDw9IHkyKSB8fCAoeSA+PSB5MiAmJiB5IDw9IHkxKSkpIHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0eDMgPSB4NDtcblx0XHRcdHkzID0geTQ7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBwb2x5Z29uIGZvciB0aGUgc3BlY2lmaWVkIGJvdW5kaW5nIGJveCwgb3IgbnVsbC4gKi9cblx0Z2V0UG9seWdvbiAoYm91bmRpbmdCb3g6IEJvdW5kaW5nQm94QXR0YWNobWVudCkge1xuXHRcdGlmICghYm91bmRpbmdCb3gpIHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nQm94IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuYm91bmRpbmdCb3hlcy5pbmRleE9mKGJvdW5kaW5nQm94KTtcblx0XHRyZXR1cm4gaW5kZXggPT09IC0xID8gbnVsbCA6IHRoaXMucG9seWdvbnNbaW5kZXhdO1xuXHR9XG5cblx0LyoqIFRoZSB3aWR0aCBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0Z2V0V2lkdGggKCkge1xuXHRcdHJldHVybiB0aGlzLm1heFggLSB0aGlzLm1pblg7XG5cdH1cblxuXHQvKiogVGhlIGhlaWdodCBvZiB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveC4gKi9cblx0Z2V0SGVpZ2h0ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhZIC0gdGhpcy5taW5ZO1xuXHR9XG59XG4iXX0=
|
|
@@ -26,38 +26,42 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { ClippingAttachment } from "./attachments/ClippingAttachment.js";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
29
|
+
import type { ClippingAttachment } from "./attachments/ClippingAttachment.js";
|
|
30
|
+
import type { Skeleton } from "./Skeleton.js";
|
|
31
|
+
import type { Slot } from "./Slot.js";
|
|
32
|
+
import { type Color, type NumberArrayLike } from "./Utils.js";
|
|
32
33
|
export declare class SkeletonClipping {
|
|
33
34
|
private triangulator;
|
|
34
35
|
private clippingPolygon;
|
|
36
|
+
private clippingPolygons;
|
|
35
37
|
private clipOutput;
|
|
36
38
|
clippedVertices: number[];
|
|
39
|
+
/** An empty array unless {@link clipTrianglesUnpacked} was used. **/
|
|
37
40
|
clippedUVs: number[];
|
|
38
41
|
clippedTriangles: number[];
|
|
42
|
+
inverseVertices: number[];
|
|
43
|
+
_clippedVerticesTyped: Float32Array;
|
|
44
|
+
_clippedUVsTyped: Float32Array;
|
|
45
|
+
_clippedTrianglesTyped: Uint16Array;
|
|
46
|
+
clippedVerticesTyped: Float32Array;
|
|
47
|
+
clippedUVsTyped: Float32Array;
|
|
48
|
+
clippedTrianglesTyped: Uint16Array;
|
|
49
|
+
clippedVerticesLength: number;
|
|
50
|
+
clippedUVsLength: number;
|
|
51
|
+
clippedTrianglesLength: number;
|
|
39
52
|
private scratch;
|
|
53
|
+
private inverse;
|
|
40
54
|
private clipAttachment;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
clipEndWithSlot(slot: Slot): void;
|
|
44
|
-
clipEnd(): void;
|
|
55
|
+
clipStart(skeleton: Skeleton, slot: Slot, clip: ClippingAttachment): void;
|
|
56
|
+
clipEnd(slot?: Slot): void;
|
|
45
57
|
isClipping(): boolean;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
*/
|
|
49
|
-
clipTriangles(vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number): void;
|
|
50
|
-
/**
|
|
51
|
-
* @deprecated Use clipTriangles without verticesLength parameter. Mark for removal in 4.3.
|
|
52
|
-
*/
|
|
53
|
-
clipTriangles(vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void;
|
|
54
|
-
clipTriangles(vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): void;
|
|
55
|
-
clipTriangles(vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void;
|
|
58
|
+
clipTriangles(vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): boolean;
|
|
59
|
+
clipTriangles(vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean, stride: number): boolean;
|
|
56
60
|
private clipTrianglesNoRender;
|
|
57
61
|
private clipTrianglesRender;
|
|
58
|
-
clipTrianglesUnpacked(vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike):
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
clipTrianglesUnpacked(vertices: NumberArrayLike, vertexStart: number, triangles: NumberArrayLike | Uint16Array, trianglesLength: number, uvs: NumberArrayLike, stride?: number): boolean;
|
|
63
|
+
private clip;
|
|
64
|
+
private clipInverse;
|
|
65
|
+
private makeClockwise;
|
|
66
|
+
private makeConvex;
|
|
63
67
|
}
|