@esotericsoftware/spine-core 4.2.116 → 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 +27 -21
- 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 +1 -1
- 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 +12 -3
- 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
|
@@ -26,231 +26,94 @@
|
|
|
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 {
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
import { Constraint } from "./Constraint.js";
|
|
30
|
+
import { TransformConstraintPose } from "./TransformConstraintPose.js";
|
|
31
|
+
import { MathUtils } from "./Utils.js";
|
|
32
|
+
/** Adjusts the world transform of the constrained bones to match that of the source bone.
|
|
32
33
|
*
|
|
33
34
|
* See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */
|
|
34
|
-
export class TransformConstraint {
|
|
35
|
-
/** The transform constraint's setup pose data. */
|
|
36
|
-
data;
|
|
35
|
+
export class TransformConstraint extends Constraint {
|
|
37
36
|
/** The bones that will be modified by this transform constraint. */
|
|
38
37
|
bones;
|
|
39
|
-
/** The
|
|
40
|
-
|
|
41
|
-
mixRotate = 0;
|
|
42
|
-
mixX = 0;
|
|
43
|
-
mixY = 0;
|
|
44
|
-
mixScaleX = 0;
|
|
45
|
-
mixScaleY = 0;
|
|
46
|
-
mixShearY = 0;
|
|
47
|
-
temp = new Vector2();
|
|
48
|
-
active = false;
|
|
38
|
+
/** The bone whose world transform will be copied to the constrained bones. */
|
|
39
|
+
source;
|
|
49
40
|
constructor(data, skeleton) {
|
|
50
|
-
|
|
51
|
-
throw new Error("data cannot be null.");
|
|
41
|
+
super(data, new TransformConstraintPose(), new TransformConstraintPose());
|
|
52
42
|
if (!skeleton)
|
|
53
43
|
throw new Error("skeleton cannot be null.");
|
|
54
|
-
this.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
let target = skeleton.findBone(data.target.name);
|
|
63
|
-
if (!target)
|
|
64
|
-
throw new Error(`Couldn't find target bone ${data.target.name}.`);
|
|
65
|
-
this.target = target;
|
|
66
|
-
this.mixRotate = data.mixRotate;
|
|
67
|
-
this.mixX = data.mixX;
|
|
68
|
-
this.mixY = data.mixY;
|
|
69
|
-
this.mixScaleX = data.mixScaleX;
|
|
70
|
-
this.mixScaleY = data.mixScaleY;
|
|
71
|
-
this.mixShearY = data.mixShearY;
|
|
72
|
-
}
|
|
73
|
-
isActive() {
|
|
74
|
-
return this.active;
|
|
44
|
+
this.bones = [];
|
|
45
|
+
for (const boneData of data.bones)
|
|
46
|
+
this.bones.push(skeleton.bones[boneData.index].constrainedPose);
|
|
47
|
+
const source = skeleton.bones[data.source.index];
|
|
48
|
+
if (source == null)
|
|
49
|
+
throw new Error("source cannot be null.");
|
|
50
|
+
this.source = source;
|
|
75
51
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.
|
|
79
|
-
|
|
80
|
-
this.mixY = data.mixY;
|
|
81
|
-
this.mixScaleX = data.mixScaleX;
|
|
82
|
-
this.mixScaleY = data.mixScaleY;
|
|
83
|
-
this.mixShearY = data.mixShearY;
|
|
52
|
+
copy(skeleton) {
|
|
53
|
+
var copy = new TransformConstraint(this.data, skeleton);
|
|
54
|
+
copy.pose.set(this.pose);
|
|
55
|
+
return copy;
|
|
84
56
|
}
|
|
85
|
-
update(physics) {
|
|
86
|
-
|
|
57
|
+
update(skeleton, physics) {
|
|
58
|
+
const p = this.appliedPose;
|
|
59
|
+
if (p.mixRotate === 0 && p.mixX === 0 && p.mixY === 0 && p.mixScaleX === 0 && p.mixScaleY === 0 && p.mixShearY === 0)
|
|
87
60
|
return;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
61
|
+
const data = this.data;
|
|
62
|
+
const localSource = data.localSource, localTarget = data.localTarget, additive = data.additive, clamp = data.clamp;
|
|
63
|
+
const offsets = data.offsets;
|
|
64
|
+
const source = this.source.appliedPose;
|
|
65
|
+
if (localSource)
|
|
66
|
+
source.validateLocalTransform(skeleton);
|
|
67
|
+
const fromItems = data.properties;
|
|
68
|
+
const fn = data.properties.length, update = skeleton._update;
|
|
69
|
+
const bones = this.bones;
|
|
70
|
+
for (let i = 0, n = this.bones.length; i < n; i++) {
|
|
71
|
+
const bone = bones[i];
|
|
72
|
+
if (localTarget)
|
|
73
|
+
bone.modifyLocal(skeleton);
|
|
97
74
|
else
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
r -= MathUtils.PI2;
|
|
117
|
-
else if (r < -MathUtils.PI) //
|
|
118
|
-
r += MathUtils.PI2;
|
|
119
|
-
r *= mixRotate;
|
|
120
|
-
let cos = Math.cos(r), sin = Math.sin(r);
|
|
121
|
-
bone.a = cos * a - sin * c;
|
|
122
|
-
bone.b = cos * b - sin * d;
|
|
123
|
-
bone.c = sin * a + cos * c;
|
|
124
|
-
bone.d = sin * b + cos * d;
|
|
125
|
-
}
|
|
126
|
-
if (translate) {
|
|
127
|
-
let temp = this.temp;
|
|
128
|
-
target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));
|
|
129
|
-
bone.worldX += (temp.x - bone.worldX) * mixX;
|
|
130
|
-
bone.worldY += (temp.y - bone.worldY) * mixY;
|
|
131
|
-
}
|
|
132
|
-
if (mixScaleX != 0) {
|
|
133
|
-
let s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);
|
|
134
|
-
if (s != 0)
|
|
135
|
-
s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;
|
|
136
|
-
bone.a *= s;
|
|
137
|
-
bone.c *= s;
|
|
75
|
+
bone.modifyWorld(update);
|
|
76
|
+
for (let f = 0; f < fn; f++) {
|
|
77
|
+
const from = fromItems[f];
|
|
78
|
+
const value = from.value(skeleton, source, localSource, offsets) - from.offset;
|
|
79
|
+
const toItems = from.to;
|
|
80
|
+
for (let t = 0, tn = from.to.length; t < tn; t++) {
|
|
81
|
+
const to = toItems[t];
|
|
82
|
+
if (to.mix(p) !== 0) {
|
|
83
|
+
let clamped = to.offset + value * to.scale;
|
|
84
|
+
if (clamp) {
|
|
85
|
+
if (to.offset < to.max)
|
|
86
|
+
clamped = MathUtils.clamp(clamped, to.offset, to.max);
|
|
87
|
+
else
|
|
88
|
+
clamped = MathUtils.clamp(clamped, to.max, to.offset);
|
|
89
|
+
}
|
|
90
|
+
to.apply(skeleton, p, bone, clamped, localTarget, additive);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
138
93
|
}
|
|
139
|
-
if (mixScaleY != 0) {
|
|
140
|
-
let s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);
|
|
141
|
-
if (s != 0)
|
|
142
|
-
s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;
|
|
143
|
-
bone.b *= s;
|
|
144
|
-
bone.d *= s;
|
|
145
|
-
}
|
|
146
|
-
if (mixShearY > 0) {
|
|
147
|
-
let b = bone.b, d = bone.d;
|
|
148
|
-
let by = Math.atan2(d, b);
|
|
149
|
-
let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));
|
|
150
|
-
if (r > MathUtils.PI)
|
|
151
|
-
r -= MathUtils.PI2;
|
|
152
|
-
else if (r < -MathUtils.PI) //
|
|
153
|
-
r += MathUtils.PI2;
|
|
154
|
-
r = by + (r + offsetShearY) * mixShearY;
|
|
155
|
-
let s = Math.sqrt(b * b + d * d);
|
|
156
|
-
bone.b = Math.cos(r) * s;
|
|
157
|
-
bone.d = Math.sin(r) * s;
|
|
158
|
-
}
|
|
159
|
-
bone.updateAppliedTransform();
|
|
160
94
|
}
|
|
161
95
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
let bone = bones[i];
|
|
172
|
-
if (mixRotate != 0) {
|
|
173
|
-
let a = bone.a, b = bone.b, c = bone.c, d = bone.d;
|
|
174
|
-
let r = Math.atan2(tc, ta) + offsetRotation;
|
|
175
|
-
if (r > MathUtils.PI)
|
|
176
|
-
r -= MathUtils.PI2;
|
|
177
|
-
else if (r < -MathUtils.PI) //
|
|
178
|
-
r += MathUtils.PI2;
|
|
179
|
-
r *= mixRotate;
|
|
180
|
-
let cos = Math.cos(r), sin = Math.sin(r);
|
|
181
|
-
bone.a = cos * a - sin * c;
|
|
182
|
-
bone.b = cos * b - sin * d;
|
|
183
|
-
bone.c = sin * a + cos * c;
|
|
184
|
-
bone.d = sin * b + cos * d;
|
|
185
|
-
}
|
|
186
|
-
if (translate) {
|
|
187
|
-
let temp = this.temp;
|
|
188
|
-
target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));
|
|
189
|
-
bone.worldX += temp.x * mixX;
|
|
190
|
-
bone.worldY += temp.y * mixY;
|
|
191
|
-
}
|
|
192
|
-
if (mixScaleX != 0) {
|
|
193
|
-
let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;
|
|
194
|
-
bone.a *= s;
|
|
195
|
-
bone.c *= s;
|
|
196
|
-
}
|
|
197
|
-
if (mixScaleY != 0) {
|
|
198
|
-
let s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;
|
|
199
|
-
bone.b *= s;
|
|
200
|
-
bone.d *= s;
|
|
201
|
-
}
|
|
202
|
-
if (mixShearY > 0) {
|
|
203
|
-
let r = Math.atan2(td, tb) - Math.atan2(tc, ta);
|
|
204
|
-
if (r > MathUtils.PI)
|
|
205
|
-
r -= MathUtils.PI2;
|
|
206
|
-
else if (r < -MathUtils.PI) //
|
|
207
|
-
r += MathUtils.PI2;
|
|
208
|
-
let b = bone.b, d = bone.d;
|
|
209
|
-
r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY;
|
|
210
|
-
let s = Math.sqrt(b * b + d * d);
|
|
211
|
-
bone.b = Math.cos(r) * s;
|
|
212
|
-
bone.d = Math.sin(r) * s;
|
|
213
|
-
}
|
|
214
|
-
bone.updateAppliedTransform();
|
|
96
|
+
sort(skeleton) {
|
|
97
|
+
if (!this.data.localSource)
|
|
98
|
+
skeleton.sortBone(this.source);
|
|
99
|
+
const bones = this.bones;
|
|
100
|
+
const boneCount = this.bones.length;
|
|
101
|
+
const worldTarget = !this.data.localTarget;
|
|
102
|
+
if (worldTarget) {
|
|
103
|
+
for (let i = 0; i < boneCount; i++)
|
|
104
|
+
skeleton.sortBone(bones[i].bone);
|
|
215
105
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
for (let i = 0, n = bones.length; i < n; i++) {
|
|
222
|
-
let bone = bones[i];
|
|
223
|
-
let rotation = bone.arotation;
|
|
224
|
-
if (mixRotate != 0)
|
|
225
|
-
rotation += (target.arotation - rotation + this.data.offsetRotation) * mixRotate;
|
|
226
|
-
let x = bone.ax, y = bone.ay;
|
|
227
|
-
x += (target.ax - x + this.data.offsetX) * mixX;
|
|
228
|
-
y += (target.ay - y + this.data.offsetY) * mixY;
|
|
229
|
-
let scaleX = bone.ascaleX, scaleY = bone.ascaleY;
|
|
230
|
-
if (mixScaleX != 0 && scaleX != 0)
|
|
231
|
-
scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;
|
|
232
|
-
if (mixScaleY != 0 && scaleY != 0)
|
|
233
|
-
scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;
|
|
234
|
-
let shearY = bone.ashearY;
|
|
235
|
-
if (mixShearY != 0)
|
|
236
|
-
shearY += (target.ashearY - shearY + this.data.offsetShearY) * mixShearY;
|
|
237
|
-
bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
|
|
106
|
+
skeleton._updateCache.push(this);
|
|
107
|
+
for (let i = 0; i < boneCount; i++) {
|
|
108
|
+
const bone = bones[i].bone;
|
|
109
|
+
skeleton.sortReset(bone.children);
|
|
110
|
+
skeleton.constrained(bone);
|
|
238
111
|
}
|
|
112
|
+
for (let i = 0; i < boneCount; i++)
|
|
113
|
+
bones[i].bone.sorted = worldTarget;
|
|
239
114
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
let target = this.target;
|
|
243
|
-
let bones = this.bones;
|
|
244
|
-
for (let i = 0, n = bones.length; i < n; i++) {
|
|
245
|
-
let bone = bones[i];
|
|
246
|
-
let rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;
|
|
247
|
-
let x = bone.ax + (target.ax + this.data.offsetX) * mixX;
|
|
248
|
-
let y = bone.ay + (target.ay + this.data.offsetY) * mixY;
|
|
249
|
-
let scaleX = bone.ascaleX * (((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1);
|
|
250
|
-
let scaleY = bone.ascaleY * (((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1);
|
|
251
|
-
let shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;
|
|
252
|
-
bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
|
|
253
|
-
}
|
|
115
|
+
isSourceActive() {
|
|
116
|
+
return this.source.active;
|
|
254
117
|
}
|
|
255
118
|
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtQ29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9UcmFuc2Zvcm1Db25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQU0vRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdoRDs7O21IQUdtSDtBQUNuSCxNQUFNLE9BQU8sbUJBQW1CO0lBRS9CLGtEQUFrRDtJQUNsRCxJQUFJLENBQTBCO0lBRTlCLG9FQUFvRTtJQUNwRSxLQUFLLENBQWM7SUFFbkIscUZBQXFGO0lBQ3JGLE1BQU0sQ0FBTztJQUViLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUUvRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNyQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsWUFBYSxJQUE2QixFQUFFLFFBQWtCO1FBQzdELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVEsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElB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QUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM5QyxDQUFDO1lBRUQsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLENBQUM7WUFDRCxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcs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RUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzLCBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm1Db25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1RyYW5zZm9ybUNvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBVcGRhdGFibGUgfSBmcm9tIFwiLi9VcGRhdGFibGUuanNcIjtcbmltcG9ydCB7IFZlY3RvcjIsIE1hdGhVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cblxuLyoqIFN0b3JlcyB0aGUgY3VycmVudCBwb3NlIGZvciBhIHRyYW5zZm9ybSBjb25zdHJhaW50LiBBIHRyYW5zZm9ybSBjb25zdHJhaW50IGFkanVzdHMgdGhlIHdvcmxkIHRyYW5zZm9ybSBvZiB0aGUgY29uc3RyYWluZWRcbiAqIGJvbmVzIHRvIG1hdGNoIHRoYXQgb2YgdGhlIHRhcmdldCBib25lLlxuICpcbiAqIFNlZSBbVHJhbnNmb3JtIGNvbnN0cmFpbnRzXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtdHJhbnNmb3JtLWNvbnN0cmFpbnRzKSBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1Db25zdHJhaW50IGltcGxlbWVudHMgVXBkYXRhYmxlIHtcblxuXHQvKiogVGhlIHRyYW5zZm9ybSBjb25zdHJhaW50J3Mgc2V0dXAgcG9zZSBkYXRhLiAqL1xuXHRkYXRhOiBUcmFuc2Zvcm1Db25zdHJhaW50RGF0YTtcblxuXHQvKiogVGhlIGJvbmVzIHRoYXQgd2lsbCBiZSBtb2RpZmllZCBieSB0aGlzIHRyYW5zZm9ybSBjb25zdHJhaW50LiAqL1xuXHRib25lczogQXJyYXk8Qm9uZT47XG5cblx0LyoqIFRoZSB0YXJnZXQgYm9uZSB3aG9zZSB3b3JsZCB0cmFuc2Zvcm0gd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGNvbnN0cmFpbmVkIGJvbmVzLiAqL1xuXHR0YXJnZXQ6IEJvbmU7XG5cblx0bWl4Um90YXRlID0gMDsgbWl4WCA9IDA7IG1peFkgPSAwOyBtaXhTY2FsZVggPSAwOyBtaXhTY2FsZVkgPSAwOyBtaXhTaGVhclkgPSAwO1xuXG5cdHRlbXAgPSBuZXcgVmVjdG9yMigpO1xuXHRhY3RpdmUgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoZGF0YTogVHJhbnNmb3JtQ29uc3RyYWludERhdGEsIHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0aWYgKCFza2VsZXRvbikgdGhyb3cgbmV3IEVycm9yKFwic2tlbGV0b24gY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cblx0XHR0aGlzLmJvbmVzID0gbmV3IEFycmF5PEJvbmU+KCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmJvbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgYm9uZSA9IHNrZWxldG9uLmZpbmRCb25lKGRhdGEuYm9uZXNbaV0ubmFtZSk7XG5cdFx0XHRpZiAoIWJvbmUpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBib25lICR7ZGF0YS5ib25lc1tpXS5uYW1lfS5gKTtcblx0XHRcdHRoaXMuYm9uZXMucHVzaChib25lKTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldCA9IHNrZWxldG9uLmZpbmRCb25lKGRhdGEudGFyZ2V0Lm5hbWUpO1xuXHRcdGlmICghdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGFyZ2V0IGJvbmUgJHtkYXRhLnRhcmdldC5uYW1lfS5gKTtcblx0XHR0aGlzLnRhcmdldCA9IHRhcmdldDtcblxuXHRcdHRoaXMubWl4Um90YXRlID0gZGF0YS5taXhSb3RhdGU7XG5cdFx0dGhpcy5taXhYID0gZGF0YS5taXhYO1xuXHRcdHRoaXMubWl4WSA9IGRhdGEubWl4WTtcblx0XHR0aGlzLm1peFNjYWxlWCA9IGRhdGEubWl4U2NhbGVYO1xuXHRcdHRoaXMubWl4U2NhbGVZID0gZGF0YS5taXhTY2FsZVk7XG5cdFx0dGhpcy5taXhTaGVhclkgPSBkYXRhLm1peFNoZWFyWTtcblx0fVxuXG5cdGlzQWN0aXZlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmU7XG5cdH1cblxuXHRzZXRUb1NldHVwUG9zZSAoKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcblx0XHR0aGlzLm1peFJvdGF0ZSA9IGRhdGEubWl4Um90YXRlO1xuXHRcdHRoaXMubWl4WCA9IGRhdGEubWl4WDtcblx0XHR0aGlzLm1peFkgPSBkYXRhLm1peFk7XG5cdFx0dGhpcy5taXhTY2FsZVggPSBkYXRhLm1peFNjYWxlWDtcblx0XHR0aGlzLm1peFNjYWxlWSA9IGRhdGEubWl4U2NhbGVZO1xuXHRcdHRoaXMubWl4U2hlYXJZID0gZGF0YS5taXhTaGVhclk7XG5cdH1cblxuXHR1cGRhdGUgKHBoeXNpY3M6IFBoeXNpY3MpIHtcblx0XHRpZiAodGhpcy5taXhSb3RhdGUgPT0gMCAmJiB0aGlzLm1peFggPT0gMCAmJiB0aGlzLm1peFkgPT0gMCAmJiB0aGlzLm1peFNjYWxlWCA9PSAwICYmIHRoaXMubWl4U2NhbGVZID09IDAgJiYgdGhpcy5taXhTaGVhclkgPT0gMCkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuZGF0YS5sb2NhbCkge1xuXHRcdFx0aWYgKHRoaXMuZGF0YS5yZWxhdGl2ZSlcblx0XHRcdFx0dGhpcy5hcHBseVJlbGF0aXZlTG9jYWwoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy5hcHBseUFic29sdXRlTG9jYWwoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZGF0YS5yZWxhdGl2ZSlcblx0XHRcdFx0dGhpcy5hcHBseVJlbGF0aXZlV29ybGQoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy5hcHBseUFic29sdXRlV29ybGQoKTtcblx0XHR9XG5cdH1cblxuXHRhcHBseUFic29sdXRlV29ybGQgKCkge1xuXHRcdGxldCBtaXhSb3RhdGUgPSB0aGlzLm1peFJvdGF0ZSwgbWl4WCA9IHRoaXMubWl4WCwgbWl4WSA9IHRoaXMubWl4WSwgbWl4U2NhbGVYID0gdGhpcy5taXhTY2FsZVgsXG5cdFx0XHRtaXhTY2FsZVkgPSB0aGlzLm1peFNjYWxlWSwgbWl4U2hlYXJZID0gdGhpcy5taXhTaGVhclk7XG5cdFx0bGV0IHRyYW5zbGF0ZSA9IG1peFggIT0gMCB8fCBtaXhZICE9IDA7XG5cblx0XHRsZXQgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cdFx0bGV0IHRhID0gdGFyZ2V0LmEsIHRiID0gdGFyZ2V0LmIsIHRjID0gdGFyZ2V0LmMsIHRkID0gdGFyZ2V0LmQ7XG5cdFx0bGV0IGRlZ1JhZFJlZmxlY3QgPSB0YSAqIHRkIC0gdGIgKiB0YyA+IDAgPyBNYXRoVXRpbHMuZGVnUmFkIDogLU1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0bGV0IG9mZnNldFJvdGF0aW9uID0gdGhpcy5kYXRhLm9mZnNldFJvdGF0aW9uICogZGVnUmFkUmVmbGVjdDtcblx0XHRsZXQgb2Zmc2V0U2hlYXJZID0gdGhpcy5kYXRhLm9mZnNldFNoZWFyWSAqIGRlZ1JhZFJlZmxlY3Q7XG5cblx0XHRsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgYm9uZSA9IGJvbmVzW2ldO1xuXG5cdFx0XHRpZiAobWl4Um90YXRlICE9IDApIHtcblx0XHRcdFx0bGV0IGEgPSBib25lLmEsIGIgPSBib25lLmIsIGMgPSBib25lLmMsIGQgPSBib25lLmQ7XG5cdFx0XHRcdGxldCByID0gTWF0aC5hdGFuMih0YywgdGEpIC0gTWF0aC5hdGFuMihjLCBhKSArIG9mZnNldFJvdGF0aW9uO1xuXHRcdFx0XHRpZiAociA+IE1hdGhVdGlscy5QSSlcblx0XHRcdFx0XHRyIC09IE1hdGhVdGlscy5QSTI7XG5cdFx0XHRcdGVsc2UgaWYgKHIgPCAtTWF0aFV0aWxzLlBJKSAvL1xuXHRcdFx0XHRcdHIgKz0gTWF0aFV0aWxzLlBJMjtcblx0XHRcdFx0ciAqPSBtaXhSb3RhdGU7XG5cdFx0XHRcdGxldCBjb3MgPSBNYXRoLmNvcyhyKSwgc2luID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdGJvbmUuYSA9IGNvcyAqIGEgLSBzaW4gKiBjO1xuXHRcdFx0XHRib25lLmIgPSBjb3MgKiBiIC0gc2luICogZDtcblx0XHRcdFx0Ym9uZS5jID0gc2luICogYSArIGNvcyAqIGM7XG5cdFx0XHRcdGJvbmUuZCA9IHNpbiAqIGIgKyBjb3MgKiBkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRlKSB7XG5cdFx0XHRcdGxldCB0ZW1wID0gdGhpcy50ZW1wO1xuXHRcdFx0XHR0YXJnZXQubG9jYWxUb1dvcmxkKHRlbXAuc2V0KHRoaXMuZGF0YS5vZmZzZXRYLCB0aGlzLmRhdGEub2Zmc2V0WSkpO1xuXHRcdFx0XHRib25lLndvcmxkWCArPSAodGVtcC54IC0gYm9uZS53b3JsZFgpICogbWl4WDtcblx0XHRcdFx0Ym9uZS53b3JsZFkgKz0gKHRlbXAueSAtIGJvbmUud29ybGRZKSAqIG1peFk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtaXhTY2FsZVggIT0gMCkge1xuXHRcdFx0XHRsZXQgcyA9IE1hdGguc3FydChib25lLmEgKiBib25lLmEgKyBib25lLmMgKiBib25lLmMpO1xuXHRcdFx0XHRpZiAocyAhPSAwKSBzID0gKHMgKyAoTWF0aC5zcXJ0KHRhICogdGEgKyB0YyAqIHRjKSAtIHMgKyB0aGlzLmRhdGEub2Zmc2V0U2NhbGVYKSAqIG1peFNjYWxlWCkgLyBzO1xuXHRcdFx0XHRib25lLmEgKj0gcztcblx0XHRcdFx0Ym9uZS5jICo9IHM7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWl4U2NhbGVZICE9IDApIHtcblx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQoYm9uZS5iICogYm9uZS5iICsgYm9uZS5kICogYm9uZS5kKTtcblx0XHRcdFx0aWYgKHMgIT0gMCkgcyA9IChzICsgKE1hdGguc3FydCh0YiAqIHRiICsgdGQgKiB0ZCkgLSBzICsgdGhpcy5kYXRhLm9mZnNldFNjYWxlWSkgKiBtaXhTY2FsZVkpIC8gcztcblx0XHRcdFx0Ym9uZS5iICo9IHM7XG5cdFx0XHRcdGJvbmUuZCAqPSBzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWl4U2hlYXJZID4gMCkge1xuXHRcdFx0XHRsZXQgYiA9IGJvbmUuYiwgZCA9IGJvbmUuZDtcblx0XHRcdFx0bGV0IGJ5ID0gTWF0aC5hdGFuMihkLCBiKTtcblx0XHRcdFx0bGV0IHIgPSBNYXRoLmF0YW4yKHRkLCB0YikgLSBNYXRoLmF0YW4yKHRjLCB0YSkgLSAoYnkgLSBNYXRoLmF0YW4yKGJvbmUuYywgYm9uZS5hKSk7XG5cdFx0XHRcdGlmIChyID4gTWF0aFV0aWxzLlBJKVxuXHRcdFx0XHRcdHIgLT0gTWF0aFV0aWxzLlBJMjtcblx0XHRcdFx0ZWxzZSBpZiAociA8IC1NYXRoVXRpbHMuUEkpIC8vXG5cdFx0XHRcdFx0ciArPSBNYXRoVXRpbHMuUEkyO1xuXHRcdFx0XHRyID0gYnkgKyAociArIG9mZnNldFNoZWFyWSkgKiBtaXhTaGVhclk7XG5cdFx0XHRcdGxldCBzID0gTWF0aC5zcXJ0KGIgKiBiICsgZCAqIGQpO1xuXHRcdFx0XHRib25lLmIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdGJvbmUuZCA9IE1hdGguc2luKHIpICogcztcblx0XHRcdH1cblxuXHRcdFx0Ym9uZS51cGRhdGVBcHBsaWVkVHJhbnNmb3JtKCk7XG5cdFx0fVxuXHR9XG5cblx0YXBwbHlSZWxhdGl2ZVdvcmxkICgpIHtcblx0XHRsZXQgbWl4Um90YXRlID0gdGhpcy5taXhSb3RhdGUsIG1peFggPSB0aGlzLm1peFgsIG1peFkgPSB0aGlzLm1peFksIG1peFNjYWxlWCA9IHRoaXMubWl4U2NhbGVYLFxuXHRcdFx0bWl4U2NhbGVZID0gdGhpcy5taXhTY2FsZVksIG1peFNoZWFyWSA9IHRoaXMubWl4U2hlYXJZO1xuXHRcdGxldCB0cmFuc2xhdGUgPSBtaXhYICE9IDAgfHwgbWl4WSAhPSAwO1xuXG5cdFx0bGV0IHRhcmdldCA9IHRoaXMudGFyZ2V0O1xuXHRcdGxldCB0YSA9IHRhcmdldC5hLCB0YiA9IHRhcmdldC5iLCB0YyA9IHRhcmdldC5jLCB0ZCA9IHRhcmdldC5kO1xuXHRcdGxldCBkZWdSYWRSZWZsZWN0ID0gdGEgKiB0ZCAtIHRiICogdGMgPiAwID8gTWF0aFV0aWxzLmRlZ1JhZCA6IC1NYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGxldCBvZmZzZXRSb3RhdGlvbiA9IHRoaXMuZGF0YS5vZmZzZXRSb3RhdGlvbiAqIGRlZ1JhZFJlZmxlY3QsIG9mZnNldFNoZWFyWSA9IHRoaXMuZGF0YS5vZmZzZXRTaGVhclkgKiBkZWdSYWRSZWZsZWN0O1xuXG5cdFx0bGV0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGJvbmUgPSBib25lc1tpXTtcblxuXHRcdFx0aWYgKG1peFJvdGF0ZSAhPSAwKSB7XG5cdFx0XHRcdGxldCBhID0gYm9uZS5hLCBiID0gYm9uZS5iLCBjID0gYm9uZS5jLCBkID0gYm9uZS5kO1xuXHRcdFx0XHRsZXQgciA9IE1hdGguYXRhbjIodGMsIHRhKSArIG9mZnNldFJvdGF0aW9uO1xuXHRcdFx0XHRpZiAociA+IE1hdGhVdGlscy5QSSlcblx0XHRcdFx0XHRyIC09IE1hdGhVdGlscy5QSTI7XG5cdFx0XHRcdGVsc2UgaWYgKHIgPCAtTWF0aFV0aWxzLlBJKSAvL1xuXHRcdFx0XHRcdHIgKz0gTWF0aFV0aWxzLlBJMjtcblx0XHRcdFx0ciAqPSBtaXhSb3RhdGU7XG5cdFx0XHRcdGxldCBjb3MgPSBNYXRoLmNvcyhyKSwgc2luID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdGJvbmUuYSA9IGNvcyAqIGEgLSBzaW4gKiBjO1xuXHRcdFx0XHRib25lLmIgPSBjb3MgKiBiIC0gc2luICogZDtcblx0XHRcdFx0Ym9uZS5jID0gc2luICogYSArIGNvcyAqIGM7XG5cdFx0XHRcdGJvbmUuZCA9IHNpbiAqIGIgKyBjb3MgKiBkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRlKSB7XG5cdFx0XHRcdGxldCB0ZW1wID0gdGhpcy50ZW1wO1xuXHRcdFx0XHR0YXJnZXQubG9jYWxUb1dvcmxkKHRlbXAuc2V0KHRoaXMuZGF0YS5vZmZzZXRYLCB0aGlzLmRhdGEub2Zmc2V0WSkpO1xuXHRcdFx0XHRib25lLndvcmxkWCArPSB0ZW1wLnggKiBtaXhYO1xuXHRcdFx0XHRib25lLndvcmxkWSArPSB0ZW1wLnkgKiBtaXhZO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWl4U2NhbGVYICE9IDApIHtcblx0XHRcdFx0bGV0IHMgPSAoTWF0aC5zcXJ0KHRhICogdGEgKyB0YyAqIHRjKSAtIDEgKyB0aGlzLmRhdGEub2Zmc2V0U2NhbGVYKSAqIG1peFNjYWxlWCArIDE7XG5cdFx0XHRcdGJvbmUuYSAqPSBzO1xuXHRcdFx0XHRib25lLmMgKj0gcztcblx0XHRcdH1cblx0XHRcdGlmIChtaXhTY2FsZVkgIT0gMCkge1xuXHRcdFx0XHRsZXQgcyA9IChNYXRoLnNxcnQodGIgKiB0YiArIHRkICogdGQpIC0gMSArIHRoaXMuZGF0YS5vZmZzZXRTY2FsZVkpICogbWl4U2NhbGVZICsgMTtcblx0XHRcdFx0Ym9uZS5iICo9IHM7XG5cdFx0XHRcdGJvbmUuZCAqPSBzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWl4U2hlYXJZID4gMCkge1xuXHRcdFx0XHRsZXQgciA9IE1hdGguYXRhbjIodGQsIHRiKSAtIE1hdGguYXRhbjIodGMsIHRhKTtcblx0XHRcdFx0aWYgKHIgPiBNYXRoVXRpbHMuUEkpXG5cdFx0XHRcdFx0ciAtPSBNYXRoVXRpbHMuUEkyO1xuXHRcdFx0XHRlbHNlIGlmIChyIDwgLU1hdGhVdGlscy5QSSkgLy9cblx0XHRcdFx0XHRyICs9IE1hdGhVdGlscy5QSTI7XG5cdFx0XHRcdGxldCBiID0gYm9uZS5iLCBkID0gYm9uZS5kO1xuXHRcdFx0XHRyID0gTWF0aC5hdGFuMihkLCBiKSArIChyIC0gTWF0aFV0aWxzLlBJIC8gMiArIG9mZnNldFNoZWFyWSkgKiBtaXhTaGVhclk7XG5cdFx0XHRcdGxldCBzID0gTWF0aC5zcXJ0KGIgKiBiICsgZCAqIGQpO1xuXHRcdFx0XHRib25lLmIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdGJvbmUuZCA9IE1hdGguc2luKHIpICogcztcblx0XHRcdH1cblxuXHRcdFx0Ym9uZS51cGRhdGVBcHBsaWVkVHJhbnNmb3JtKCk7XG5cdFx0fVxuXHR9XG5cblx0YXBwbHlBYnNvbHV0ZUxvY2FsICgpIHtcblx0XHRsZXQgbWl4Um90YXRlID0gdGhpcy5taXhSb3RhdGUsIG1peFggPSB0aGlzLm1peFgsIG1peFkgPSB0aGlzLm1peFksIG1peFNjYWxlWCA9IHRoaXMubWl4U2NhbGVYLFxuXHRcdFx0bWl4U2NhbGVZID0gdGhpcy5taXhTY2FsZVksIG1peFNoZWFyWSA9IHRoaXMubWl4U2hlYXJZO1xuXG5cdFx0bGV0IHRhcmdldCA9IHRoaXMudGFyZ2V0O1xuXG5cdFx0bGV0IGJvbmVzID0gdGhpcy5ib25lcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGJvbmUgPSBib25lc1tpXTtcblxuXHRcdFx0bGV0IHJvdGF0aW9uID0gYm9uZS5hcm90YXRpb247XG5cdFx0XHRpZiAobWl4Um90YXRlICE9IDApIHJvdGF0aW9uICs9ICh0YXJnZXQuYXJvdGF0aW9uIC0gcm90YXRpb24gKyB0aGlzLmRhdGEub2Zmc2V0Um90YXRpb24pICogbWl4Um90YXRlO1xuXG5cdFx0XHRsZXQgeCA9IGJvbmUuYXgsIHkgPSBib25lLmF5O1xuXHRcdFx0eCArPSAodGFyZ2V0LmF4IC0geCArIHRoaXMuZGF0YS5vZmZzZXRYKSAqIG1peFg7XG5cdFx0XHR5ICs9ICh0YXJnZXQuYXkgLSB5ICsgdGhpcy5kYXRhLm9mZnNldFkpICogbWl4WTtcblxuXHRcdFx0bGV0IHNjYWxlWCA9IGJvbmUuYXNjYWxlWCwgc2NhbGVZID0gYm9uZS5hc2NhbGVZO1xuXHRcdFx0aWYgKG1peFNjYWxlWCAhPSAwICYmIHNjYWxlWCAhPSAwKVxuXHRcdFx0XHRzY2FsZVggPSAoc2NhbGVYICsgKHRhcmdldC5hc2NhbGVYIC0gc2NhbGVYICsgdGhpcy5kYXRhLm9mZnNldFNjYWxlWCkgKiBtaXhTY2FsZVgpIC8gc2NhbGVYO1xuXHRcdFx0aWYgKG1peFNjYWxlWSAhPSAwICYmIHNjYWxlWSAhPSAwKVxuXHRcdFx0XHRzY2FsZVkgPSAoc2NhbGVZICsgKHRhcmdldC5hc2NhbGVZIC0gc2NhbGVZICsgdGhpcy5kYXRhLm9mZnNldFNjYWxlWSkgKiBtaXhTY2FsZVkpIC8gc2NhbGVZO1xuXG5cdFx0XHRsZXQgc2hlYXJZID0gYm9uZS5hc2hlYXJZO1xuXHRcdFx0aWYgKG1peFNoZWFyWSAhPSAwKSBzaGVhclkgKz0gKHRhcmdldC5hc2hlYXJZIC0gc2hlYXJZICsgdGhpcy5kYXRhLm9mZnNldFNoZWFyWSkgKiBtaXhTaGVhclk7XG5cblx0XHRcdGJvbmUudXBkYXRlV29ybGRUcmFuc2Zvcm1XaXRoKHgsIHksIHJvdGF0aW9uLCBzY2FsZVgsIHNjYWxlWSwgYm9uZS5hc2hlYXJYLCBzaGVhclkpO1xuXHRcdH1cblx0fVxuXG5cdGFwcGx5UmVsYXRpdmVMb2NhbCAoKSB7XG5cdFx0bGV0IG1peFJvdGF0ZSA9IHRoaXMubWl4Um90YXRlLCBtaXhYID0gdGhpcy5taXhYLCBtaXhZID0gdGhpcy5taXhZLCBtaXhTY2FsZVggPSB0aGlzLm1peFNjYWxlWCxcblx0XHRcdG1peFNjYWxlWSA9IHRoaXMubWl4U2NhbGVZLCBtaXhTaGVhclkgPSB0aGlzLm1peFNoZWFyWTtcblxuXHRcdGxldCB0YXJnZXQgPSB0aGlzLnRhcmdldDtcblxuXHRcdGxldCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBib25lID0gYm9uZXNbaV07XG5cblx0XHRcdGxldCByb3RhdGlvbiA9IGJvbmUuYXJvdGF0aW9uICsgKHRhcmdldC5hcm90YXRpb24gKyB0aGlzLmRhdGEub2Zmc2V0Um90YXRpb24pICogbWl4Um90YXRlO1xuXHRcdFx0bGV0IHggPSBib25lLmF4ICsgKHRhcmdldC5heCArIHRoaXMuZGF0YS5vZmZzZXRYKSAqIG1peFg7XG5cdFx0XHRsZXQgeSA9IGJvbmUuYXkgKyAodGFyZ2V0LmF5ICsgdGhpcy5kYXRhLm9mZnNldFkpICogbWl4WTtcblx0XHRcdGxldCBzY2FsZVggPSBib25lLmFzY2FsZVggKiAoKCh0YXJnZXQuYXNjYWxlWCAtIDEgKyB0aGlzLmRhdGEub2Zmc2V0U2NhbGVYKSAqIG1peFNjYWxlWCkgKyAxKTtcblx0XHRcdGxldCBzY2FsZVkgPSBib25lLmFzY2FsZVkgKiAoKCh0YXJnZXQuYXNjYWxlWSAtIDEgKyB0aGlzLmRhdGEub2Zmc2V0U2NhbGVZKSAqIG1peFNjYWxlWSkgKyAxKTtcblx0XHRcdGxldCBzaGVhclkgPSBib25lLmFzaGVhclkgKyAodGFyZ2V0LmFzaGVhclkgKyB0aGlzLmRhdGEub2Zmc2V0U2hlYXJZKSAqIG1peFNoZWFyWTtcblxuXHRcdFx0Ym9uZS51cGRhdGVXb3JsZFRyYW5zZm9ybVdpdGgoeCwgeSwgcm90YXRpb24sIHNjYWxlWCwgc2NhbGVZLCBib25lLmFzaGVhclgsIHNoZWFyWSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtQ29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9UcmFuc2Zvcm1Db25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd2Qzs7bUhBRW1IO0FBQ25ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFpRjtJQUV6SCxvRUFBb0U7SUFDcEUsS0FBSyxDQUFrQjtJQUV2Qiw4RUFBOEU7SUFDOUUsTUFBTSxDQUFPO0lBRWIsWUFBYSxJQUE2QixFQUFFLFFBQWtCO1FBQzdELEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSx1QkFBdUIsRUFBRSxFQUFFLElBQUksdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBZ0IsQ0FBQztRQUM5QixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FB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QUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzQixRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBCb25lIH0gZnJvbSBcIi4vQm9uZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgeyBDb25zdHJhaW50IH0gZnJvbSBcIi4vQ29uc3RyYWludC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaHlzaWNzIH0gZnJvbSBcIi4vUGh5c2ljcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludFBvc2UuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cblxuLyoqIEFkanVzdHMgdGhlIHdvcmxkIHRyYW5zZm9ybSBvZiB0aGUgY29uc3RyYWluZWQgYm9uZXMgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgc291cmNlIGJvbmUuXG4gKlxuICogU2VlIFtUcmFuc2Zvcm0gY29uc3RyYWludHNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS10cmFuc2Zvcm0tY29uc3RyYWludHMpIGluIHRoZSBTcGluZSBVc2VyIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybUNvbnN0cmFpbnQgZXh0ZW5kcyBDb25zdHJhaW50PFRyYW5zZm9ybUNvbnN0cmFpbnQsIFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhLCBUcmFuc2Zvcm1Db25zdHJhaW50UG9zZT4ge1xuXG5cdC8qKiBUaGUgYm9uZXMgdGhhdCB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoaXMgdHJhbnNmb3JtIGNvbnN0cmFpbnQuICovXG5cdGJvbmVzOiBBcnJheTxCb25lUG9zZT47XG5cblx0LyoqIFRoZSBib25lIHdob3NlIHdvcmxkIHRyYW5zZm9ybSB3aWxsIGJlIGNvcGllZCB0byB0aGUgY29uc3RyYWluZWQgYm9uZXMuICovXG5cdHNvdXJjZTogQm9uZTtcblxuXHRjb25zdHJ1Y3RvciAoZGF0YTogVHJhbnNmb3JtQ29uc3RyYWludERhdGEsIHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHN1cGVyKGRhdGEsIG5ldyBUcmFuc2Zvcm1Db25zdHJhaW50UG9zZSgpLCBuZXcgVHJhbnNmb3JtQ29uc3RyYWludFBvc2UoKSk7XG5cdFx0aWYgKCFza2VsZXRvbikgdGhyb3cgbmV3IEVycm9yKFwic2tlbGV0b24gY2Fubm90IGJlIG51bGwuXCIpO1xuXG5cdFx0dGhpcy5ib25lcyA9IFtdIGFzIEJvbmVQb3NlW107XG5cdFx0Zm9yIChjb25zdCBib25lRGF0YSBvZiBkYXRhLmJvbmVzKVxuXHRcdFx0dGhpcy5ib25lcy5wdXNoKHNrZWxldG9uLmJvbmVzW2JvbmVEYXRhLmluZGV4XS5jb25zdHJhaW5lZFBvc2UpO1xuXG5cdFx0Y29uc3Qgc291cmNlID0gc2tlbGV0b24uYm9uZXNbZGF0YS5zb3VyY2UuaW5kZXhdO1xuXHRcdGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwic291cmNlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblx0fVxuXG5cdHB1YmxpYyBjb3B5IChza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHR2YXIgY29weSA9IG5ldyBUcmFuc2Zvcm1Db25zdHJhaW50KHRoaXMuZGF0YSwgc2tlbGV0b24pO1xuXHRcdGNvcHkucG9zZS5zZXQodGhpcy5wb3NlKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdHVwZGF0ZSAoc2tlbGV0b246IFNrZWxldG9uLCBwaHlzaWNzOiBQaHlzaWNzKSB7XG5cdFx0Y29uc3QgcCA9IHRoaXMuYXBwbGllZFBvc2U7XG5cdFx0aWYgKHAubWl4Um90YXRlID09PSAwICYmIHAubWl4WCA9PT0gMCAmJiBwLm1peFkgPT09IDAgJiYgcC5taXhTY2FsZVggPT09IDAgJiYgcC5taXhTY2FsZVkgPT09IDAgJiYgcC5taXhTaGVhclkgPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG5cdFx0Y29uc3QgbG9jYWxTb3VyY2UgPSBkYXRhLmxvY2FsU291cmNlLCBsb2NhbFRhcmdldCA9IGRhdGEubG9jYWxUYXJnZXQsIGFkZGl0aXZlID0gZGF0YS5hZGRpdGl2ZSwgY2xhbXAgPSBkYXRhLmNsYW1wO1xuXHRcdGNvbnN0IG9mZnNldHMgPSBkYXRhLm9mZnNldHM7XG5cdFx0Y29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UuYXBwbGllZFBvc2U7XG5cdFx0aWYgKGxvY2FsU291cmNlKSBzb3VyY2UudmFsaWRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdFx0Y29uc3QgZnJvbUl0ZW1zID0gZGF0YS5wcm9wZXJ0aWVzO1xuXHRcdGNvbnN0IGZuID0gZGF0YS5wcm9wZXJ0aWVzLmxlbmd0aCwgdXBkYXRlID0gc2tlbGV0b24uX3VwZGF0ZTtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzW2ldO1xuXHRcdFx0aWYgKGxvY2FsVGFyZ2V0KVxuXHRcdFx0XHRib25lLm1vZGlmeUxvY2FsKHNrZWxldG9uKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Ym9uZS5tb2RpZnlXb3JsZCh1cGRhdGUpO1xuXHRcdFx0Zm9yIChsZXQgZiA9IDA7IGYgPCBmbjsgZisrKSB7XG5cdFx0XHRcdGNvbnN0IGZyb20gPSBmcm9tSXRlbXNbZl07XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZnJvbS52YWx1ZShza2VsZXRvbiwgc291cmNlLCBsb2NhbFNvdXJjZSwgb2Zmc2V0cykgLSBmcm9tLm9mZnNldDtcblx0XHRcdFx0Y29uc3QgdG9JdGVtcyA9IGZyb20udG87XG5cdFx0XHRcdGZvciAobGV0IHQgPSAwLCB0biA9IGZyb20udG8ubGVuZ3RoOyB0IDwgdG47IHQrKykge1xuXHRcdFx0XHRcdGNvbnN0IHRvID0gdG9JdGVtc1t0XTtcblx0XHRcdFx0XHRpZiAodG8ubWl4KHApICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRsZXQgY2xhbXBlZCA9IHRvLm9mZnNldCArIHZhbHVlICogdG8uc2NhbGU7XG5cdFx0XHRcdFx0XHRpZiAoY2xhbXApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRvLm9mZnNldCA8IHRvLm1heClcblx0XHRcdFx0XHRcdFx0XHRjbGFtcGVkID0gTWF0aFV0aWxzLmNsYW1wKGNsYW1wZWQsIHRvLm9mZnNldCwgdG8ubWF4KTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGNsYW1wZWQgPSBNYXRoVXRpbHMuY2xhbXAoY2xhbXBlZCwgdG8ubWF4LCB0by5vZmZzZXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dG8uYXBwbHkoc2tlbGV0b24sIHAsIGJvbmUsIGNsYW1wZWQsIGxvY2FsVGFyZ2V0LCBhZGRpdGl2ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c29ydCAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0aWYgKCF0aGlzLmRhdGEubG9jYWxTb3VyY2UpIHNrZWxldG9uLnNvcnRCb25lKHRoaXMuc291cmNlKTtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUNvdW50ID0gdGhpcy5ib25lcy5sZW5ndGg7XG5cdFx0Y29uc3Qgd29ybGRUYXJnZXQgPSAhdGhpcy5kYXRhLmxvY2FsVGFyZ2V0O1xuXHRcdGlmICh3b3JsZFRhcmdldCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBib25lQ291bnQ7IGkrKylcblx0XHRcdFx0c2tlbGV0b24uc29ydEJvbmUoYm9uZXNbaV0uYm9uZSk7XG5cdFx0fVxuXHRcdHNrZWxldG9uLl91cGRhdGVDYWNoZS5wdXNoKHRoaXMpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZUNvdW50OyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSBib25lc1tpXS5ib25lO1xuXHRcdFx0c2tlbGV0b24uc29ydFJlc2V0KGJvbmUuY2hpbGRyZW4pO1xuXHRcdFx0c2tlbGV0b24uY29uc3RyYWluZWQoYm9uZSk7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZUNvdW50OyBpKyspXG5cdFx0XHRib25lc1tpXS5ib25lLnNvcnRlZCA9IHdvcmxkVGFyZ2V0O1xuXHR9XG5cblx0aXNTb3VyY2VBY3RpdmUgKCkge1xuXHRcdHJldHVybiB0aGlzLnNvdXJjZS5hY3RpdmU7XG5cdH1cblxufVxuIl19
|
|
@@ -26,37 +26,125 @@
|
|
|
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 type { BoneData } from "./BoneData.js";
|
|
30
|
+
import type { BonePose } from "./BonePose.js";
|
|
29
31
|
import { ConstraintData } from "./ConstraintData.js";
|
|
30
|
-
import {
|
|
32
|
+
import type { Skeleton } from "./Skeleton.js";
|
|
33
|
+
import { TransformConstraint } from "./TransformConstraint.js";
|
|
34
|
+
import { TransformConstraintPose } from "./TransformConstraintPose.js";
|
|
31
35
|
/** Stores the setup pose for a {@link TransformConstraint}.
|
|
32
36
|
*
|
|
33
37
|
* See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */
|
|
34
|
-
export declare class TransformConstraintData extends ConstraintData {
|
|
38
|
+
export declare class TransformConstraintData extends ConstraintData<TransformConstraint, TransformConstraintPose> {
|
|
39
|
+
static readonly ROTATION = 0;
|
|
40
|
+
static readonly X = 1;
|
|
41
|
+
static readonly Y = 2;
|
|
42
|
+
static readonly SCALEX = 3;
|
|
43
|
+
static readonly SCALEY = 4;
|
|
44
|
+
static readonly SHEARY = 5;
|
|
35
45
|
/** The bones that will be modified by this transform constraint. */
|
|
36
46
|
bones: BoneData[];
|
|
37
|
-
/** The
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
mixX: number;
|
|
43
|
-
mixY: number;
|
|
44
|
-
mixScaleX: number;
|
|
45
|
-
mixScaleY: number;
|
|
46
|
-
mixShearY: number;
|
|
47
|
-
/** An offset added to the constrained bone rotation. */
|
|
48
|
-
offsetRotation: number;
|
|
47
|
+
/** The bone whose world transform will be copied to the constrained bones. */
|
|
48
|
+
set source(source: BoneData);
|
|
49
|
+
get source(): BoneData;
|
|
50
|
+
private _source;
|
|
51
|
+
offsets: number[];
|
|
49
52
|
/** An offset added to the constrained bone X translation. */
|
|
50
53
|
offsetX: number;
|
|
51
54
|
/** An offset added to the constrained bone Y translation. */
|
|
52
55
|
offsetY: number;
|
|
56
|
+
/** Reads the source bone's local transform instead of its world transform. */
|
|
57
|
+
localSource: boolean;
|
|
58
|
+
/** Sets the constrained bones' local transforms instead of their world transforms. */
|
|
59
|
+
localTarget: boolean;
|
|
60
|
+
/** Adds the source bone transform to the constrained bones instead of setting it absolutely. */
|
|
61
|
+
additive: boolean;
|
|
62
|
+
/** Prevents constrained bones from exceeding the ranged defined by {@link ToProperty.offset} and {@link ToProperty.max}. */
|
|
63
|
+
clamp: boolean;
|
|
64
|
+
/** The mapping of transform properties to other transform properties. */
|
|
65
|
+
readonly properties: Array<FromProperty>;
|
|
66
|
+
constructor(name: string);
|
|
67
|
+
create(skeleton: Skeleton): TransformConstraint;
|
|
68
|
+
/** An offset added to the constrained bone rotation. */
|
|
69
|
+
getOffsetRotation(): number;
|
|
70
|
+
setOffsetRotation(offsetRotation: number): void;
|
|
71
|
+
/** An offset added to the constrained bone X translation. */
|
|
72
|
+
getOffsetX(): number;
|
|
73
|
+
setOffsetX(offsetX: number): void;
|
|
74
|
+
/** An offset added to the constrained bone Y translation. */
|
|
75
|
+
getOffsetY(): number;
|
|
76
|
+
setOffsetY(offsetY: number): void;
|
|
53
77
|
/** An offset added to the constrained bone scaleX. */
|
|
54
|
-
|
|
78
|
+
getOffsetScaleX(): number;
|
|
79
|
+
setOffsetScaleX(offsetScaleX: number): void;
|
|
55
80
|
/** An offset added to the constrained bone scaleY. */
|
|
56
|
-
|
|
81
|
+
getOffsetScaleY(): number;
|
|
82
|
+
setOffsetScaleY(offsetScaleY: number): void;
|
|
57
83
|
/** An offset added to the constrained bone shearY. */
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
84
|
+
getOffsetShearY(): number;
|
|
85
|
+
setOffsetShearY(offsetShearY: number): void;
|
|
86
|
+
}
|
|
87
|
+
/** Source property for a {@link TransformConstraint}. */
|
|
88
|
+
export declare abstract class FromProperty {
|
|
89
|
+
/** The value of this property that corresponds to {@link ToProperty.offset}. */
|
|
90
|
+
offset: number;
|
|
91
|
+
/** Constrained properties. */
|
|
92
|
+
readonly to: Array<ToProperty>;
|
|
93
|
+
/** Reads this property from the specified bone. */
|
|
94
|
+
abstract value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
95
|
+
}
|
|
96
|
+
/** Constrained property for a {@link TransformConstraint}. */
|
|
97
|
+
export declare abstract class ToProperty {
|
|
98
|
+
/** The value of this property that corresponds to {@link FromProperty.offset}. */
|
|
99
|
+
offset: number;
|
|
100
|
+
/** The maximum value of this property when {@link TransformConstraintData.clamp clamped}. */
|
|
101
|
+
max: number;
|
|
102
|
+
/** The scale of the {@link FromProperty} value in relation to this property. */
|
|
103
|
+
scale: number;
|
|
104
|
+
/** Reads the mix for this property from the specified constraint. */
|
|
105
|
+
abstract mix(pose: TransformConstraintPose): number;
|
|
106
|
+
/** Applies the value to this property. */
|
|
107
|
+
abstract apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
108
|
+
}
|
|
109
|
+
export declare class FromRotate extends FromProperty {
|
|
110
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
111
|
+
}
|
|
112
|
+
export declare class ToRotate extends ToProperty {
|
|
113
|
+
mix(pose: TransformConstraintPose): number;
|
|
114
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
115
|
+
}
|
|
116
|
+
export declare class FromX extends FromProperty {
|
|
117
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
118
|
+
}
|
|
119
|
+
export declare class ToX extends ToProperty {
|
|
120
|
+
mix(pose: TransformConstraintPose): number;
|
|
121
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
122
|
+
}
|
|
123
|
+
export declare class FromY extends FromProperty {
|
|
124
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
125
|
+
}
|
|
126
|
+
export declare class ToY extends ToProperty {
|
|
127
|
+
mix(pose: TransformConstraintPose): number;
|
|
128
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
129
|
+
}
|
|
130
|
+
export declare class FromScaleX extends FromProperty {
|
|
131
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
132
|
+
}
|
|
133
|
+
export declare class ToScaleX extends ToProperty {
|
|
134
|
+
mix(pose: TransformConstraintPose): number;
|
|
135
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
136
|
+
}
|
|
137
|
+
export declare class FromScaleY extends FromProperty {
|
|
138
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
139
|
+
}
|
|
140
|
+
export declare class ToScaleY extends ToProperty {
|
|
141
|
+
mix(pose: TransformConstraintPose): number;
|
|
142
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
143
|
+
}
|
|
144
|
+
export declare class FromShearY extends FromProperty {
|
|
145
|
+
value(skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;
|
|
146
|
+
}
|
|
147
|
+
export declare class ToShearY extends ToProperty {
|
|
148
|
+
mix(pose: TransformConstraintPose): number;
|
|
149
|
+
apply(skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;
|
|
62
150
|
}
|