@esotericsoftware/spine-core 4.2.117 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +27 -21
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +132 -0
  16. package/dist/BonePose.js +456 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +16 -5
  20. package/dist/ConstraintData.js +15 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +23 -28
  28. package/dist/IkConstraint.js +122 -124
  29. package/dist/IkConstraintData.d.ts +14 -19
  30. package/dist/IkConstraintData.js +22 -23
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -23
  34. package/dist/PathConstraint.js +162 -139
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +114 -94
  43. package/dist/PhysicsConstraintData.d.ts +28 -13
  44. package/dist/PhysicsConstraintData.js +35 -13
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +1 -1
  58. package/dist/SkeletonBinary.js +655 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +895 -640
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +14 -3
  98. package/dist/Utils.js +80 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7747 -6116
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7747 -6116
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -26,15 +26,12 @@
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 { Animation } from "./Animation.js";
30
- import { BoneData } from "./BoneData.js";
31
- import { EventData } from "./EventData.js";
32
- import { IkConstraintData } from "./IkConstraintData.js";
33
- import { PathConstraintData } from "./PathConstraintData.js";
34
- import { PhysicsConstraintData } from "./PhysicsConstraintData.js";
35
- import { Skin } from "./Skin.js";
36
- import { SlotData } from "./SlotData.js";
37
- import { TransformConstraintData } from "./TransformConstraintData.js";
29
+ import type { Animation } from "./Animation.js";
30
+ import type { BoneData } from "./BoneData.js";
31
+ import type { ConstraintData } from "./ConstraintData.js";
32
+ import type { EventData } from "./EventData.js";
33
+ import type { Skin } from "./Skin.js";
34
+ import type { SlotData } from "./SlotData.js";
38
35
  /** Stores the setup pose and all of the stateless data for a skeleton.
39
36
  *
40
37
  * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes
@@ -49,7 +46,7 @@ export declare class SkeletonData {
49
46
  skins: Skin[];
50
47
  /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.
51
48
  *
52
- * See {@link Skeleton#getAttachmentByName()}.
49
+ * See {@link Skeleton.getAttachmentByName}.
53
50
  * May be null. */
54
51
  defaultSkin: Skin | null;
55
52
  /** The skeleton's events. */
@@ -57,13 +54,7 @@ export declare class SkeletonData {
57
54
  /** The skeleton's animations. */
58
55
  animations: Animation[];
59
56
  /** The skeleton's IK constraints. */
60
- ikConstraints: IkConstraintData[];
61
- /** The skeleton's transform constraints. */
62
- transformConstraints: TransformConstraintData[];
63
- /** The skeleton's path constraints. */
64
- pathConstraints: PathConstraintData[];
65
- /** The skeleton's physics constraints. */
66
- physicsConstraints: PhysicsConstraintData[];
57
+ constraints: ConstraintData<any, any>[];
67
58
  /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */
68
59
  x: number;
69
60
  /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */
@@ -81,9 +72,9 @@ export declare class SkeletonData {
81
72
  hash: string | null;
82
73
  /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */
83
74
  fps: number;
84
- /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */
75
+ /** The path to the images folder as defined in Spine. Available only when nonessential data was exported. May be null. */
85
76
  imagesPath: string | null;
86
- /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */
77
+ /** The path to the audio folder as defined in Spine. Available only when nonessential data was exported. May be null. */
87
78
  audioPath: string | null;
88
79
  /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it
89
80
  * multiple times.
@@ -101,24 +92,16 @@ export declare class SkeletonData {
101
92
  * multiple times.
102
93
  * @returns May be null. */
103
94
  findEvent(eventDataName: string): EventData | null;
95
+ /** Collects animations used by {@link SliderData slider constraints}.
96
+ *
97
+ * Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user
98
+ * choose an animation may want to exclude them. */
99
+ findSliderAnimations(animations: Animation[]): Animation[];
104
100
  /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to
105
101
  * call it multiple times.
106
102
  * @returns May be null. */
107
103
  findAnimation(animationName: string): Animation | null;
108
- /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
109
- * than to call it multiple times.
110
- * @return May be null. */
111
- findIkConstraint(constraintName: string): IkConstraintData | null;
112
- /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
113
- * this method than to call it multiple times.
114
- * @return May be null. */
115
- findTransformConstraint(constraintName: string): TransformConstraintData | null;
116
- /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
117
- * than to call it multiple times.
118
- * @return May be null. */
119
- findPathConstraint(constraintName: string): PathConstraintData | null;
120
- /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this method
121
- * than to call it multiple times.
122
- * @return May be null. */
123
- findPhysicsConstraint(constraintName: string): PhysicsConstraintData | null;
104
+ /** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of
105
+ * this method than to call it multiple times. */
106
+ findConstraint<T extends ConstraintData<any, any>>(constraintName: string, type: new (name: string) => T): T | null;
124
107
  }
@@ -26,6 +26,7 @@
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 { SliderData } from "./SliderData.js";
29
30
  /** Stores the setup pose and all of the stateless data for a skeleton.
30
31
  *
31
32
  * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes
@@ -34,27 +35,22 @@ export class SkeletonData {
34
35
  /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */
35
36
  name = null;
36
37
  /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */
37
- bones = new Array(); // Ordered parents first.
38
+ bones = []; // Ordered parents first.
38
39
  /** The skeleton's slots in the setup pose draw order. */
39
- slots = new Array(); // Setup pose draw order.
40
- skins = new Array();
40
+ slots = []; // Setup pose draw order.
41
+ skins = [];
41
42
  /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.
42
43
  *
43
- * See {@link Skeleton#getAttachmentByName()}.
44
+ * See {@link Skeleton.getAttachmentByName}.
44
45
  * May be null. */
45
46
  defaultSkin = null;
46
47
  /** The skeleton's events. */
47
- events = new Array();
48
+ events = [];
48
49
  /** The skeleton's animations. */
49
- animations = new Array();
50
+ animations = [];
50
51
  /** The skeleton's IK constraints. */
51
- ikConstraints = new Array();
52
- /** The skeleton's transform constraints. */
53
- transformConstraints = new Array();
54
- /** The skeleton's path constraints. */
55
- pathConstraints = new Array();
56
- /** The skeleton's physics constraints. */
57
- physicsConstraints = new Array();
52
+ // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types
53
+ constraints = [];
58
54
  /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */
59
55
  x = 0;
60
56
  /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */
@@ -72,10 +68,10 @@ export class SkeletonData {
72
68
  hash = null;
73
69
  // Nonessential
74
70
  /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */
75
- fps = 0;
76
- /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */
71
+ fps = 30;
72
+ /** The path to the images folder as defined in Spine. Available only when nonessential data was exported. May be null. */
77
73
  imagesPath = null;
78
- /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */
74
+ /** The path to the audio folder as defined in Spine. Available only when nonessential data was exported. May be null. */
79
75
  audioPath = null;
80
76
  /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it
81
77
  * multiple times.
@@ -83,12 +79,10 @@ export class SkeletonData {
83
79
  findBone(boneName) {
84
80
  if (!boneName)
85
81
  throw new Error("boneName cannot be null.");
86
- let bones = this.bones;
87
- for (let i = 0, n = bones.length; i < n; i++) {
88
- let bone = bones[i];
89
- if (bone.name == boneName)
90
- return bone;
91
- }
82
+ const bones = this.bones;
83
+ for (let i = 0, n = bones.length; i < n; i++)
84
+ if (bones[i].name === boneName)
85
+ return bones[i];
92
86
  return null;
93
87
  }
94
88
  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
@@ -97,12 +91,10 @@ export class SkeletonData {
97
91
  findSlot(slotName) {
98
92
  if (!slotName)
99
93
  throw new Error("slotName cannot be null.");
100
- let slots = this.slots;
101
- for (let i = 0, n = slots.length; i < n; i++) {
102
- let slot = slots[i];
103
- if (slot.name == slotName)
104
- return slot;
105
- }
94
+ const slots = this.slots;
95
+ for (let i = 0, n = slots.length; i < n; i++)
96
+ if (slots[i].name === slotName)
97
+ return slots[i];
106
98
  return null;
107
99
  }
108
100
  /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it
@@ -111,12 +103,10 @@ export class SkeletonData {
111
103
  findSkin(skinName) {
112
104
  if (!skinName)
113
105
  throw new Error("skinName cannot be null.");
114
- let skins = this.skins;
115
- for (let i = 0, n = skins.length; i < n; i++) {
116
- let skin = skins[i];
117
- if (skin.name == skinName)
118
- return skin;
119
- }
106
+ const skins = this.skins;
107
+ for (let i = 0, n = skins.length; i < n; i++)
108
+ if (skins[i].name === skinName)
109
+ return skins[i];
120
110
  return null;
121
111
  }
122
112
  /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it
@@ -125,83 +115,53 @@ export class SkeletonData {
125
115
  findEvent(eventDataName) {
126
116
  if (!eventDataName)
127
117
  throw new Error("eventDataName cannot be null.");
128
- let events = this.events;
129
- for (let i = 0, n = events.length; i < n; i++) {
130
- let event = events[i];
131
- if (event.name == eventDataName)
132
- return event;
133
- }
118
+ const events = this.events;
119
+ for (let i = 0, n = events.length; i < n; i++)
120
+ if (events[i].name === eventDataName)
121
+ return events[i];
134
122
  return null;
135
123
  }
124
+ /** Collects animations used by {@link SliderData slider constraints}.
125
+ *
126
+ * Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user
127
+ * choose an animation may want to exclude them. */
128
+ findSliderAnimations(animations) {
129
+ const constraints = this.constraints;
130
+ for (let i = 0, n = this.constraints.length; i < n; i++) {
131
+ const data = constraints[i];
132
+ if (data instanceof SliderData && data.animation != null)
133
+ animations.push(data.animation);
134
+ }
135
+ return animations;
136
+ }
136
137
  /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to
137
138
  * call it multiple times.
138
139
  * @returns May be null. */
139
140
  findAnimation(animationName) {
140
141
  if (!animationName)
141
142
  throw new Error("animationName cannot be null.");
142
- let animations = this.animations;
143
- for (let i = 0, n = animations.length; i < n; i++) {
144
- let animation = animations[i];
145
- if (animation.name == animationName)
146
- return animation;
147
- }
148
- return null;
149
- }
150
- /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
151
- * than to call it multiple times.
152
- * @return May be null. */
153
- findIkConstraint(constraintName) {
154
- if (!constraintName)
155
- throw new Error("constraintName cannot be null.");
156
- const ikConstraints = this.ikConstraints;
157
- for (let i = 0, n = ikConstraints.length; i < n; i++) {
158
- const constraint = ikConstraints[i];
159
- if (constraint.name == constraintName)
160
- return constraint;
161
- }
162
- return null;
163
- }
164
- /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
165
- * this method than to call it multiple times.
166
- * @return May be null. */
167
- findTransformConstraint(constraintName) {
168
- if (!constraintName)
169
- throw new Error("constraintName cannot be null.");
170
- const transformConstraints = this.transformConstraints;
171
- for (let i = 0, n = transformConstraints.length; i < n; i++) {
172
- const constraint = transformConstraints[i];
173
- if (constraint.name == constraintName)
174
- return constraint;
175
- }
176
- return null;
177
- }
178
- /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
179
- * than to call it multiple times.
180
- * @return May be null. */
181
- findPathConstraint(constraintName) {
182
- if (!constraintName)
183
- throw new Error("constraintName cannot be null.");
184
- const pathConstraints = this.pathConstraints;
185
- for (let i = 0, n = pathConstraints.length; i < n; i++) {
186
- const constraint = pathConstraints[i];
187
- if (constraint.name == constraintName)
188
- return constraint;
189
- }
143
+ const animations = this.animations;
144
+ for (let i = 0, n = animations.length; i < n; i++)
145
+ if (animations[i].name === animationName)
146
+ return animations[i];
190
147
  return null;
191
148
  }
192
- /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this method
193
- * than to call it multiple times.
194
- * @return May be null. */
195
- findPhysicsConstraint(constraintName) {
149
+ // --- Constraints.
150
+ /** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of
151
+ * this method than to call it multiple times. */
152
+ // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types
153
+ findConstraint(constraintName, type) {
196
154
  if (!constraintName)
197
155
  throw new Error("constraintName cannot be null.");
198
- const physicsConstraints = this.physicsConstraints;
199
- for (let i = 0, n = physicsConstraints.length; i < n; i++) {
200
- const constraint = physicsConstraints[i];
201
- if (constraint.name == constraintName)
156
+ if (type == null)
157
+ throw new Error("type cannot be null.");
158
+ const constraints = this.constraints;
159
+ for (let i = 0, n = this.constraints.length; i < n; i++) {
160
+ const constraint = constraints[i];
161
+ if (constraint instanceof type && constraint.name === constraintName)
202
162
  return constraint;
203
163
  }
204
164
  return null;
205
165
  }
206
166
  }
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25EYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFZL0U7OztZQUdZO0FBQ1osTUFBTSxPQUFPLFlBQVk7SUFFeEIsNkdBQTZHO0lBQzdHLElBQUksR0FBa0IsSUFBSSxDQUFDO0lBRTNCLHlGQUF5RjtJQUN6RixLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQyxDQUFDLHlCQUF5QjtJQUV4RCx5REFBeUQ7SUFDekQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUMsQ0FBQyx5QkFBeUI7SUFFeEQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFRLENBQUM7SUFFMUI7OztzQkFHa0I7SUFDbEIsV0FBVyxHQUFnQixJQUFJLENBQUM7SUFFaEMsNkJBQTZCO0lBQzdCLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO0lBRWhDLGlDQUFpQztJQUNqQyxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztJQUVwQyxxQ0FBcUM7SUFDckMsYUFBYSxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO0lBRTlDLDRDQUE0QztJQUM1QyxvQkFBb0IsR0FBRyxJQUFJLEtBQUssRUFBMkIsQ0FBQztJQUU1RCx1Q0FBdUM7SUFDdkMsZUFBZSxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO0lBRWxELDBDQUEwQztJQUMxQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssRUFBeUIsQ0FBQztJQUV4RCxzRkFBc0Y7SUFDdEYsQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUVkLHNGQUFzRjtJQUN0RixDQUFDLEdBQVcsQ0FBQyxDQUFDO0lBRWQsK0VBQStFO0lBQy9FLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFbEIsZ0ZBQWdGO0lBQ2hGLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFFbkI7aUJBQ2E7SUFDYixj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RSxDQUFDO1lBQzNELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjO2dCQUFFLE9BQU8sVUFBVSxDQUFDO1FBQzFELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgQW5pbWF0aW9uIH0gZnJvbSBcIi4vQW5pbWF0aW9uLmpzXCJcbmltcG9ydCB7IEJvbmVEYXRhIH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB7IEV2ZW50RGF0YSB9IGZyb20gXCIuL0V2ZW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgSWtDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL0lrQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFBhdGhDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1BhdGhDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgUGh5c2ljc0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBTa2luIH0gZnJvbSBcIi4vU2tpbi5qc1wiO1xuaW1wb3J0IHsgU2xvdERhdGEgfSBmcm9tIFwiLi9TbG90RGF0YS5qc1wiO1xuaW1wb3J0IHsgVHJhbnNmb3JtQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9UcmFuc2Zvcm1Db25zdHJhaW50RGF0YS5qc1wiO1xuXG4vKiogU3RvcmVzIHRoZSBzZXR1cCBwb3NlIGFuZCBhbGwgb2YgdGhlIHN0YXRlbGVzcyBkYXRhIGZvciBhIHNrZWxldG9uLlxuICpcbiAqIFNlZSBbRGF0YSBvYmplY3RzXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtcnVudGltZS1hcmNoaXRlY3R1cmUjRGF0YS1vYmplY3RzKSBpbiB0aGUgU3BpbmUgUnVudGltZXNcbiAqIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uRGF0YSB7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIG5hbWUsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgdGhlIG5hbWUgb2YgdGhlIHNrZWxldG9uIGRhdGEgZmlsZSwgaWYgcG9zc2libGUuIE1heSBiZSBudWxsLiAqL1xuXHRuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIHNrZWxldG9uJ3MgYm9uZXMsIHNvcnRlZCBwYXJlbnQgZmlyc3QuIFRoZSByb290IGJvbmUgaXMgYWx3YXlzIHRoZSBmaXJzdCBib25lLiAqL1xuXHRib25lcyA9IG5ldyBBcnJheTxCb25lRGF0YT4oKTsgLy8gT3JkZXJlZCBwYXJlbnRzIGZpcnN0LlxuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBzbG90cyBpbiB0aGUgc2V0dXAgcG9zZSBkcmF3IG9yZGVyLiAqL1xuXHRzbG90cyA9IG5ldyBBcnJheTxTbG90RGF0YT4oKTsgLy8gU2V0dXAgcG9zZSBkcmF3IG9yZGVyLlxuXG5cdHNraW5zID0gbmV3IEFycmF5PFNraW4+KCk7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGRlZmF1bHQgc2tpbi4gQnkgZGVmYXVsdCB0aGlzIHNraW4gY29udGFpbnMgYWxsIGF0dGFjaG1lbnRzIHRoYXQgd2VyZSBub3QgaW4gYSBza2luIGluIFNwaW5lLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFNrZWxldG9uI2dldEF0dGFjaG1lbnRCeU5hbWUoKX0uXG5cdCAqIE1heSBiZSBudWxsLiAqL1xuXHRkZWZhdWx0U2tpbjogU2tpbiB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBldmVudHMuICovXG5cdGV2ZW50cyA9IG5ldyBBcnJheTxFdmVudERhdGE+KCk7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGFuaW1hdGlvbnMuICovXG5cdGFuaW1hdGlvbnMgPSBuZXcgQXJyYXk8QW5pbWF0aW9uPigpO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBJSyBjb25zdHJhaW50cy4gKi9cblx0aWtDb25zdHJhaW50cyA9IG5ldyBBcnJheTxJa0NvbnN0cmFpbnREYXRhPigpO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyB0cmFuc2Zvcm0gY29uc3RyYWludHMuICovXG5cdHRyYW5zZm9ybUNvbnN0cmFpbnRzID0gbmV3IEFycmF5PFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhPigpO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBwYXRoIGNvbnN0cmFpbnRzLiAqL1xuXHRwYXRoQ29uc3RyYWludHMgPSBuZXcgQXJyYXk8UGF0aENvbnN0cmFpbnREYXRhPigpO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBwaHlzaWNzIGNvbnN0cmFpbnRzLiAqL1xuXHRwaHlzaWNzQ29uc3RyYWludHMgPSBuZXcgQXJyYXk8UGh5c2ljc0NvbnN0cmFpbnREYXRhPigpO1xuXG5cdC8qKiBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBza2VsZXRvbidzIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW4gdGhlIHNldHVwIHBvc2UuICovXG5cdHg6IG51bWJlciA9IDA7XG5cblx0LyoqIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHNrZWxldG9uJ3MgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCBpbiB0aGUgc2V0dXAgcG9zZS4gKi9cblx0eTogbnVtYmVyID0gMDtcblxuXHQvKiogVGhlIHdpZHRoIG9mIHRoZSBza2VsZXRvbidzIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW4gdGhlIHNldHVwIHBvc2UuICovXG5cdHdpZHRoOiBudW1iZXIgPSAwO1xuXG5cdC8qKiBUaGUgaGVpZ2h0IG9mIHRoZSBza2VsZXRvbidzIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW4gdGhlIHNldHVwIHBvc2UuICovXG5cdGhlaWdodDogbnVtYmVyID0gMDtcblxuXHQvKiogQmFzZWxpbmUgc2NhbGUgZmFjdG9yIGZvciBhcHBseWluZyBkaXN0YW5jZS1kZXBlbmRlbnQgZWZmZWN0cyBvbiBub24tc2NhbGFibGUgcHJvcGVydGllcywgc3VjaCBhcyBhbmdsZSBvciBzY2FsZS4gRGVmYXVsdFxuXHQgKiBpcyAxMDAuICovXG5cdHJlZmVyZW5jZVNjYWxlID0gMTAwO1xuXG5cdC8qKiBUaGUgU3BpbmUgdmVyc2lvbiB1c2VkIHRvIGV4cG9ydCB0aGUgc2tlbGV0b24gZGF0YSwgb3IgbnVsbC4gKi9cblx0dmVyc2lvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSBza2VsZXRvbiBkYXRhIGhhc2guIFRoaXMgdmFsdWUgd2lsbCBjaGFuZ2UgaWYgYW55IG9mIHRoZSBza2VsZXRvbiBkYXRhIGhhcyBjaGFuZ2VkLiBNYXkgYmUgbnVsbC4gKi9cblx0aGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0Ly8gTm9uZXNzZW50aWFsXG5cdC8qKiBUaGUgZG9wZXNoZWV0IEZQUyBpbiBTcGluZS4gQXZhaWxhYmxlIG9ubHkgd2hlbiBub25lc3NlbnRpYWwgZGF0YSB3YXMgZXhwb3J0ZWQuICovXG5cdGZwcyA9IDA7XG5cblx0LyoqIFRoZSBwYXRoIHRvIHRoZSBpbWFnZXMgZGlyZWN0b3J5IGFzIGRlZmluZWQgaW4gU3BpbmUuIEF2YWlsYWJsZSBvbmx5IHdoZW4gbm9uZXNzZW50aWFsIGRhdGEgd2FzIGV4cG9ydGVkLiBNYXkgYmUgbnVsbC4gKi9cblx0aW1hZ2VzUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSBwYXRoIHRvIHRoZSBhdWRpbyBkaXJlY3RvcnkgYXMgZGVmaW5lZCBpbiBTcGluZS4gQXZhaWxhYmxlIG9ubHkgd2hlbiBub25lc3NlbnRpYWwgZGF0YSB3YXMgZXhwb3J0ZWQuIE1heSBiZSBudWxsLiAqL1xuXHRhdWRpb1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBGaW5kcyBhIGJvbmUgYnkgY29tcGFyaW5nIGVhY2ggYm9uZSdzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdFxuXHQgKiBtdWx0aXBsZSB0aW1lcy5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdGZpbmRCb25lIChib25lTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFib25lTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiYm9uZU5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGxldCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBib25lID0gYm9uZXNbaV07XG5cdFx0XHRpZiAoYm9uZS5uYW1lID09IGJvbmVOYW1lKSByZXR1cm4gYm9uZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogRmluZHMgYSBzbG90IGJ5IGNvbXBhcmluZyBlYWNoIHNsb3QncyBuYW1lLiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBjYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1ldGhvZCB0aGFuIHRvIGNhbGwgaXRcblx0ICogbXVsdGlwbGUgdGltZXMuXG5cdCAqIEByZXR1cm5zIE1heSBiZSBudWxsLiAqL1xuXHRmaW5kU2xvdCAoc2xvdE5hbWU6IHN0cmluZykge1xuXHRcdGlmICghc2xvdE5hbWUpIHRocm93IG5ldyBFcnJvcihcInNsb3ROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gc2xvdHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgc2xvdCA9IHNsb3RzW2ldO1xuXHRcdFx0aWYgKHNsb3QubmFtZSA9PSBzbG90TmFtZSkgcmV0dXJuIHNsb3Q7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIEZpbmRzIGEgc2tpbiBieSBjb21wYXJpbmcgZWFjaCBza2luJ3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0byBjYWxsIGl0XG5cdCAqIG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJucyBNYXkgYmUgbnVsbC4gKi9cblx0ZmluZFNraW4gKHNraW5OYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIXNraW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJza2luTmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0bGV0IHNraW5zID0gdGhpcy5za2lucztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNraW5zLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IHNraW4gPSBza2luc1tpXTtcblx0XHRcdGlmIChza2luLm5hbWUgPT0gc2tpbk5hbWUpIHJldHVybiBza2luO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBldmVudCBieSBjb21wYXJpbmcgZWFjaCBldmVudHMncyBuYW1lLiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBjYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1ldGhvZCB0aGFuIHRvIGNhbGwgaXRcblx0ICogbXVsdGlwbGUgdGltZXMuXG5cdCAqIEByZXR1cm5zIE1heSBiZSBudWxsLiAqL1xuXHRmaW5kRXZlbnQgKGV2ZW50RGF0YU5hbWU6IHN0cmluZykge1xuXHRcdGlmICghZXZlbnREYXRhTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiZXZlbnREYXRhTmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0bGV0IGV2ZW50cyA9IHRoaXMuZXZlbnRzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZXZlbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0bGV0IGV2ZW50ID0gZXZlbnRzW2ldO1xuXHRcdFx0aWYgKGV2ZW50Lm5hbWUgPT0gZXZlbnREYXRhTmFtZSkgcmV0dXJuIGV2ZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBhbmltYXRpb24gYnkgY29tcGFyaW5nIGVhY2ggYW5pbWF0aW9uJ3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0b1xuXHQgKiBjYWxsIGl0IG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJucyBNYXkgYmUgbnVsbC4gKi9cblx0ZmluZEFuaW1hdGlvbiAoYW5pbWF0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFhbmltYXRpb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJhbmltYXRpb25OYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRsZXQgYW5pbWF0aW9ucyA9IHRoaXMuYW5pbWF0aW9ucztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGFuaW1hdGlvbnMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRsZXQgYW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTtcblx0XHRcdGlmIChhbmltYXRpb24ubmFtZSA9PSBhbmltYXRpb25OYW1lKSByZXR1cm4gYW5pbWF0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBJSyBjb25zdHJhaW50IGJ5IGNvbXBhcmluZyBlYWNoIElLIGNvbnN0cmFpbnQncyBuYW1lLiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBjYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1ldGhvZFxuXHQgKiB0aGFuIHRvIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMuXG5cdCAqIEByZXR1cm4gTWF5IGJlIG51bGwuICovXG5cdGZpbmRJa0NvbnN0cmFpbnQgKGNvbnN0cmFpbnROYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIWNvbnN0cmFpbnROYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJjb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgaWtDb25zdHJhaW50cyA9IHRoaXMuaWtDb25zdHJhaW50cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGlrQ29uc3RyYWludHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gaWtDb25zdHJhaW50c1tpXTtcblx0XHRcdGlmIChjb25zdHJhaW50Lm5hbWUgPT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhIHRyYW5zZm9ybSBjb25zdHJhaW50IGJ5IGNvbXBhcmluZyBlYWNoIHRyYW5zZm9ybSBjb25zdHJhaW50J3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2Zcblx0ICogdGhpcyBtZXRob2QgdGhhbiB0byBjYWxsIGl0IG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJuIE1heSBiZSBudWxsLiAqL1xuXHRmaW5kVHJhbnNmb3JtQ29uc3RyYWludCAoY29uc3RyYWludE5hbWU6IHN0cmluZykge1xuXHRcdGlmICghY29uc3RyYWludE5hbWUpIHRocm93IG5ldyBFcnJvcihcImNvbnN0cmFpbnROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCB0cmFuc2Zvcm1Db25zdHJhaW50cyA9IHRoaXMudHJhbnNmb3JtQ29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0cmFuc2Zvcm1Db25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSB0cmFuc2Zvcm1Db25zdHJhaW50c1tpXTtcblx0XHRcdGlmIChjb25zdHJhaW50Lm5hbWUgPT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhIHBhdGggY29uc3RyYWludCBieSBjb21wYXJpbmcgZWFjaCBwYXRoIGNvbnN0cmFpbnQncyBuYW1lLiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBjYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1ldGhvZFxuXHQgKiB0aGFuIHRvIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMuXG5cdCAqIEByZXR1cm4gTWF5IGJlIG51bGwuICovXG5cdGZpbmRQYXRoQ29uc3RyYWludCAoY29uc3RyYWludE5hbWU6IHN0cmluZykge1xuXHRcdGlmICghY29uc3RyYWludE5hbWUpIHRocm93IG5ldyBFcnJvcihcImNvbnN0cmFpbnROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBwYXRoQ29uc3RyYWludHMgPSB0aGlzLnBhdGhDb25zdHJhaW50cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHBhdGhDb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBwYXRoQ29uc3RyYWludHNbaV07XG5cdFx0XHRpZiAoY29uc3RyYWludC5uYW1lID09IGNvbnN0cmFpbnROYW1lKSByZXR1cm4gY29uc3RyYWludDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogRmluZHMgYSBwaHlzaWNzIGNvbnN0cmFpbnQgYnkgY29tcGFyaW5nIGVhY2ggcGh5c2ljcyBjb25zdHJhaW50J3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2Rcblx0ICogdGhhbiB0byBjYWxsIGl0IG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJuIE1heSBiZSBudWxsLiAqL1xuXHRmaW5kUGh5c2ljc0NvbnN0cmFpbnQgKGNvbnN0cmFpbnROYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIWNvbnN0cmFpbnROYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJjb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgcGh5c2ljc0NvbnN0cmFpbnRzID0gdGhpcy5waHlzaWNzQ29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBwaHlzaWNzQ29uc3RyYWludHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gcGh5c2ljc0NvbnN0cmFpbnRzW2ldO1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQubmFtZSA9PSBjb25zdHJhaW50TmFtZSkgcmV0dXJuIGNvbnN0cmFpbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25EYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFRL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDOzs7WUFHWTtBQUNaLE1BQU0sT0FBTyxZQUFZO0lBRXhCLDZHQUE2RztJQUM3RyxJQUFJLEdBQWtCLElBQUksQ0FBQztJQUUzQix5RkFBeUY7SUFDekYsS0FBSyxHQUFHLEVBQWdCLENBQUMsQ0FBQyx5QkFBeUI7SUFFbkQseURBQXlEO0lBQ3pELEtBQUssR0FBRyxFQUFnQixDQUFDLENBQUMseUJBQXlCO0lBRW5ELEtBQUssR0FBRyxFQUFZLENBQUM7SUFFckI7OztzQkFHa0I7SUFDbEIsV0FBVyxHQUFnQixJQUFJLENBQUM7SUFFaEMsNkJBQTZCO0lBQzdCLE1BQU0sR0FBRyxFQUFpQixDQUFDO0lBRTNCLGlDQUFpQztJQUNqQyxVQUFVLEdBQUcsRUFBaUIsQ0FBQztJQUUvQixxQ0FBcUM7SUFDckMsb0dBQW9HO0lBQ3BHLFdBQVcsR0FBRyxFQUFnQyxDQUFDO0lBRS9DLHNGQUFzRjtJQUN0RixDQUFDLEdBQVcsQ0FBQyxDQUFDO0lBRWQsc0ZBQXNGO0lBQ3RGLENBQUMsR0FBVyxDQUFDLENBQUM7SUFFZCwrRUFBK0U7SUFDL0UsS0FBSyxHQUFXLENBQUMsQ0FBQztJQUVsQixnRkFBZ0Y7SUFDaEYsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUVuQjtpQkFDYTtJQUNiLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFFckIsbUVBQW1FO0lBQ25FLE9BQU8sR0FBa0IsSUFBSSxDQUFDO0lBRTlCLDJHQUEyRztJQUMzRyxJQUFJLEdBQWtCLElBQUksQ0FBQztJQUUzQixlQUFlO0lBQ2Ysc0ZBQXNGO0lBQ3RGLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFFVCww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TyxVQUFlLENBQUM7UUFDOUYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEFuaW1hdGlvbiB9IGZyb20gXCIuL0FuaW1hdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJvbmVEYXRhIH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9Db25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudERhdGEgfSBmcm9tIFwiLi9FdmVudERhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tpbiB9IGZyb20gXCIuL1NraW4uanNcIjtcbmltcG9ydCB7IFNsaWRlckRhdGEgfSBmcm9tIFwiLi9TbGlkZXJEYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNsb3REYXRhIH0gZnJvbSBcIi4vU2xvdERhdGEuanNcIjtcblxuLyoqIFN0b3JlcyB0aGUgc2V0dXAgcG9zZSBhbmQgYWxsIG9mIHRoZSBzdGF0ZWxlc3MgZGF0YSBmb3IgYSBza2VsZXRvbi5cbiAqXG4gKiBTZWUgW0RhdGEgb2JqZWN0c10oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtYXJjaGl0ZWN0dXJlI0RhdGEtb2JqZWN0cykgaW4gdGhlIFNwaW5lIFJ1bnRpbWVzXG4gKiBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkRhdGEge1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBuYW1lLCB3aGljaCBieSBkZWZhdWx0IGlzIHRoZSBuYW1lIG9mIHRoZSBza2VsZXRvbiBkYXRhIGZpbGUsIGlmIHBvc3NpYmxlLiBNYXkgYmUgbnVsbC4gKi9cblx0bmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGJvbmVzLCBzb3J0ZWQgcGFyZW50IGZpcnN0LiBUaGUgcm9vdCBib25lIGlzIGFsd2F5cyB0aGUgZmlyc3QgYm9uZS4gKi9cblx0Ym9uZXMgPSBbXSBhcyBCb25lRGF0YVtdOyAvLyBPcmRlcmVkIHBhcmVudHMgZmlyc3QuXG5cblx0LyoqIFRoZSBza2VsZXRvbidzIHNsb3RzIGluIHRoZSBzZXR1cCBwb3NlIGRyYXcgb3JkZXIuICovXG5cdHNsb3RzID0gW10gYXMgU2xvdERhdGFbXTsgLy8gU2V0dXAgcG9zZSBkcmF3IG9yZGVyLlxuXG5cdHNraW5zID0gW10gYXMgU2tpbltdO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBkZWZhdWx0IHNraW4uIEJ5IGRlZmF1bHQgdGhpcyBza2luIGNvbnRhaW5zIGFsbCBhdHRhY2htZW50cyB0aGF0IHdlcmUgbm90IGluIGEgc2tpbiBpbiBTcGluZS5cblx0ICpcblx0ICogU2VlIHtAbGluayBTa2VsZXRvbi5nZXRBdHRhY2htZW50QnlOYW1lfS5cblx0ICogTWF5IGJlIG51bGwuICovXG5cdGRlZmF1bHRTa2luOiBTa2luIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGV2ZW50cy4gKi9cblx0ZXZlbnRzID0gW10gYXMgRXZlbnREYXRhW107XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGFuaW1hdGlvbnMuICovXG5cdGFuaW1hdGlvbnMgPSBbXSBhcyBBbmltYXRpb25bXTtcblxuXHQvKiogVGhlIHNrZWxldG9uJ3MgSUsgY29uc3RyYWludHMuICovXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogcmVmZXJlbmNlIHJ1bnRpbWUgZG9lcyBub3QgcmVzdHJpY3QgdG8gc3BlY2lmaWMgdHlwZXNcblx0Y29uc3RyYWludHMgPSBbXSBhcyBDb25zdHJhaW50RGF0YTxhbnksIGFueT5bXTtcblxuXHQvKiogVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgc2tlbGV0b24ncyBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IGluIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHR4OiBudW1iZXIgPSAwO1xuXG5cdC8qKiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBza2VsZXRvbidzIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggaW4gdGhlIHNldHVwIHBvc2UuICovXG5cdHk6IG51bWJlciA9IDA7XG5cblx0LyoqIFRoZSB3aWR0aCBvZiB0aGUgc2tlbGV0b24ncyBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IGluIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHR3aWR0aDogbnVtYmVyID0gMDtcblxuXHQvKiogVGhlIGhlaWdodCBvZiB0aGUgc2tlbGV0b24ncyBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IGluIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHRoZWlnaHQ6IG51bWJlciA9IDA7XG5cblx0LyoqIEJhc2VsaW5lIHNjYWxlIGZhY3RvciBmb3IgYXBwbHlpbmcgZGlzdGFuY2UtZGVwZW5kZW50IGVmZmVjdHMgb24gbm9uLXNjYWxhYmxlIHByb3BlcnRpZXMsIHN1Y2ggYXMgYW5nbGUgb3Igc2NhbGUuIERlZmF1bHRcblx0ICogaXMgMTAwLiAqL1xuXHRyZWZlcmVuY2VTY2FsZSA9IDEwMDtcblxuXHQvKiogVGhlIFNwaW5lIHZlcnNpb24gdXNlZCB0byBleHBvcnQgdGhlIHNrZWxldG9uIGRhdGEsIG9yIG51bGwuICovXG5cdHZlcnNpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24gZGF0YSBoYXNoLiBUaGlzIHZhbHVlIHdpbGwgY2hhbmdlIGlmIGFueSBvZiB0aGUgc2tlbGV0b24gZGF0YSBoYXMgY2hhbmdlZC4gTWF5IGJlIG51bGwuICovXG5cdGhhc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdC8vIE5vbmVzc2VudGlhbFxuXHQvKiogVGhlIGRvcGVzaGVldCBGUFMgaW4gU3BpbmUuIEF2YWlsYWJsZSBvbmx5IHdoZW4gbm9uZXNzZW50aWFsIGRhdGEgd2FzIGV4cG9ydGVkLiAqL1xuXHRmcHMgPSAzMDtcblxuXHQvKiogVGhlIHBhdGggdG8gdGhlIGltYWdlcyBmb2xkZXIgYXMgZGVmaW5lZCBpbiBTcGluZS4gQXZhaWxhYmxlIG9ubHkgd2hlbiBub25lc3NlbnRpYWwgZGF0YSB3YXMgZXhwb3J0ZWQuIE1heSBiZSBudWxsLiAqL1xuXHRpbWFnZXNQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIHBhdGggdG8gdGhlIGF1ZGlvIGZvbGRlciBhcyBkZWZpbmVkIGluIFNwaW5lLiBBdmFpbGFibGUgb25seSB3aGVuIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBleHBvcnRlZC4gTWF5IGJlIG51bGwuICovXG5cdGF1ZGlvUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIEZpbmRzIGEgYm9uZSBieSBjb21wYXJpbmcgZWFjaCBib25lJ3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0byBjYWxsIGl0XG5cdCAqIG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJucyBNYXkgYmUgbnVsbC4gKi9cblx0ZmluZEJvbmUgKGJvbmVOYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIWJvbmVOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJib25lTmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZXMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0aWYgKGJvbmVzW2ldLm5hbWUgPT09IGJvbmVOYW1lKSByZXR1cm4gYm9uZXNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogRmluZHMgYSBzbG90IGJ5IGNvbXBhcmluZyBlYWNoIHNsb3QncyBuYW1lLiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBjYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1ldGhvZCB0aGFuIHRvIGNhbGwgaXRcblx0ICogbXVsdGlwbGUgdGltZXMuXG5cdCAqIEByZXR1cm5zIE1heSBiZSBudWxsLiAqL1xuXHRmaW5kU2xvdCAoc2xvdE5hbWU6IHN0cmluZykge1xuXHRcdGlmICghc2xvdE5hbWUpIHRocm93IG5ldyBFcnJvcihcInNsb3ROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzbG90cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAoc2xvdHNbaV0ubmFtZSA9PT0gc2xvdE5hbWUpIHJldHVybiBzbG90c1tpXTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBGaW5kcyBhIHNraW4gYnkgY29tcGFyaW5nIGVhY2ggc2tpbidzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdFxuXHQgKiBtdWx0aXBsZSB0aW1lcy5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdGZpbmRTa2luIChza2luTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFza2luTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwic2tpbk5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHNraW5zID0gdGhpcy5za2lucztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNraW5zLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGlmIChza2luc1tpXS5uYW1lID09PSBza2luTmFtZSkgcmV0dXJuIHNraW5zW2ldO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIEZpbmRzIGFuIGV2ZW50IGJ5IGNvbXBhcmluZyBlYWNoIGV2ZW50cydzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdFxuXHQgKiBtdWx0aXBsZSB0aW1lcy5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdGZpbmRFdmVudCAoZXZlbnREYXRhTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFldmVudERhdGFOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJldmVudERhdGFOYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBldmVudHMgPSB0aGlzLmV2ZW50cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGV2ZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAoZXZlbnRzW2ldLm5hbWUgPT09IGV2ZW50RGF0YU5hbWUpIHJldHVybiBldmVudHNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogQ29sbGVjdHMgYW5pbWF0aW9ucyB1c2VkIGJ5IHtAbGluayBTbGlkZXJEYXRhIHNsaWRlciBjb25zdHJhaW50c30uXG5cdCAqXG5cdCAqIFNsaWRlciBhbmltYXRpb25zIGFyZSBkZXNpZ25lZCB0byBiZSBhcHBsaWVkIGJ5IHNsaWRlciBjb25zdHJhaW50cyByYXRoZXIgdGhhbiBvbiB0aGVpciBvd24uIEFwcGxpY2F0aW9ucyB0aGF0IGhhdmUgYSB1c2VyXG5cdCAqIGNob29zZSBhbiBhbmltYXRpb24gbWF5IHdhbnQgdG8gZXhjbHVkZSB0aGVtLiAqL1xuXHRmaW5kU2xpZGVyQW5pbWF0aW9ucyAoYW5pbWF0aW9uczogQW5pbWF0aW9uW10pOiBBbmltYXRpb25bXSB7XG5cdFx0Y29uc3QgY29uc3RyYWludHMgPSB0aGlzLmNvbnN0cmFpbnRzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy5jb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBjb25zdHJhaW50c1tpXTtcblx0XHRcdGlmIChkYXRhIGluc3RhbmNlb2YgU2xpZGVyRGF0YSAmJiBkYXRhLmFuaW1hdGlvbiAhPSBudWxsKSBhbmltYXRpb25zLnB1c2goZGF0YS5hbmltYXRpb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gYW5pbWF0aW9ucztcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBhbmltYXRpb24gYnkgY29tcGFyaW5nIGVhY2ggYW5pbWF0aW9uJ3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0b1xuXHQgKiBjYWxsIGl0IG11bHRpcGxlIHRpbWVzLlxuXHQgKiBAcmV0dXJucyBNYXkgYmUgbnVsbC4gKi9cblx0ZmluZEFuaW1hdGlvbiAoYW5pbWF0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFhbmltYXRpb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJhbmltYXRpb25OYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBhbmltYXRpb25zID0gdGhpcy5hbmltYXRpb25zO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYW5pbWF0aW9ucy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAoYW5pbWF0aW9uc1tpXS5uYW1lID09PSBhbmltYXRpb25OYW1lKSByZXR1cm4gYW5pbWF0aW9uc1tpXTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIC0tLSBDb25zdHJhaW50cy5cblxuXHQvKiogRmluZHMgYSBjb25zdHJhaW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBieSBjb21wYXJpbmcgZWFjaCBjb25zdHJhaW50cydzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mXG5cdCAgKiB0aGlzIG1ldGhvZCB0aGFuIHRvIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMuICovXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogcmVmZXJlbmNlIHJ1bnRpbWUgZG9lcyBub3QgcmVzdHJpY3QgdG8gc3BlY2lmaWMgdHlwZXNcblx0ZmluZENvbnN0cmFpbnQ8VCBleHRlbmRzIENvbnN0cmFpbnREYXRhPGFueSwgYW55Pj4gKGNvbnN0cmFpbnROYW1lOiBzdHJpbmcsIHR5cGU6IG5ldyAobmFtZTogc3RyaW5nKSA9PiBUKTogVCB8IG51bGwge1xuXHRcdGlmICghY29uc3RyYWludE5hbWUpIHRocm93IG5ldyBFcnJvcihcImNvbnN0cmFpbnROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRpZiAodHlwZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2ldO1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQgaW5zdGFuY2VvZiB0eXBlICYmIGNvbnN0cmFpbnQubmFtZSA9PT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50IGFzIFQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
@@ -26,11 +26,11 @@
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 { VertexAttachment, Attachment } from "./attachments/Attachment.js";
30
- import { AttachmentLoader } from "./attachments/AttachmentLoader.js";
29
+ import type { Attachment, VertexAttachment } from "./attachments/Attachment.js";
30
+ import type { AttachmentLoader } from "./attachments/AttachmentLoader.js";
31
+ import { Sequence } from "./attachments/Sequence.js";
31
32
  import { SkeletonData } from "./SkeletonData.js";
32
33
  import { Skin } from "./Skin.js";
33
- import { Sequence } from "./attachments/Sequence.js";
34
34
  /** Loads skeleton data in the Spine JSON format.
35
35
  *
36
36
  * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and
@@ -43,11 +43,13 @@ export declare class SkeletonJson {
43
43
  *
44
44
  * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
45
45
  scale: number;
46
- private linkedMeshes;
46
+ private readonly linkedMeshes;
47
47
  constructor(attachmentLoader: AttachmentLoader);
48
48
  readSkeletonData(json: string | any): SkeletonData;
49
- readAttachment(map: any, skin: Skin, slotIndex: number, name: string, skeletonData: SkeletonData): Attachment | null;
50
- readSequence(map: any): Sequence | null;
49
+ private fromProperty;
50
+ private propertyScale;
51
+ readAttachment(map: any, skin: Skin, slotIndex: number, placeholder: string, skeletonData: SkeletonData): Attachment | null;
52
+ readSequence(map: object): Sequence;
51
53
  readVertices(map: any, attachment: VertexAttachment, verticesLength: number): void;
52
54
  readAnimation(map: any, name: string, skeletonData: SkeletonData): void;
53
55
  }