@esotericsoftware/spine-pixi-v8 4.2.68 → 4.2.70

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/Spine.js CHANGED
@@ -236,7 +236,7 @@ export class Spine extends ViewContainer {
236
236
  spineAttachmentsDirty = true;
237
237
  lastAttachments.length = index;
238
238
  }
239
- this.spineAttachmentsDirty = spineAttachmentsDirty;
239
+ this.spineAttachmentsDirty ||= spineAttachmentsDirty;
240
240
  }
241
241
  updateAndSetPixiMask(slot, last) {
242
242
  // assign/create the currentClippingSlot
@@ -625,4 +625,4 @@ export class Spine extends ViewContainer {
625
625
  });
626
626
  }
627
627
  }
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFDTixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsRUFFVCxVQUFVLEVBRVYsUUFBUSxFQUNSLFFBQVEsRUFFUixPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsR0FDYixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQ04sY0FBYyxFQUNkLGtCQUFrQixFQUNsQixxQkFBcUIsRUFHckIsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxjQUFjLEVBQ2QsT0FBTyxFQUNQLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBSVosT0FBTyxHQUNQLE1BQU0sOEJBQThCLENBQUM7QUF3QnJDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRWhDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQWtEdEMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLEtBQU0sU0FBUSxhQUFhO0lBQ3ZDLGtCQUFrQjtJQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ00sWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUN6QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRXhCLDJCQUEyQixHQUE0QixHQUFHLEVBQUUsR0FBVSxDQUFDLENBQUM7SUFDeEUsMEJBQTBCLEdBQTRC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QUNuRCxNQUFNLGdCQUFnQixHQUFHLElBQUkscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxZQUFZLFVBQVU7WUFDakQsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVsQyxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ2hCLFlBQVk7WUFDWixRQUFRO1lBQ1IsVUFBVTtTQUNWLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEp1bHkgMjgsIDIwMjMuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMywgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvclxuICogb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRIRVxuICogU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7XG5cdEFzc2V0cyxcblx0Qm91bmRzLFxuXHRDYWNoZSxcblx0Q29udGFpbmVyLFxuXHRDb250YWluZXJPcHRpb25zLFxuXHRERUdfVE9fUkFELFxuXHREZXN0cm95T3B0aW9ucyxcblx0ZmFzdENvcHksXG5cdEdyYXBoaWNzLFxuXHRQb2ludERhdGEsXG5cdFRleHR1cmUsXG5cdFRpY2tlcixcblx0Vmlld0NvbnRhaW5lcixcbn0gZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgeyBJU3BpbmVEZWJ1Z1JlbmRlcmVyIH0gZnJvbSAnLi9TcGluZURlYnVnUmVuZGVyZXIuanMnO1xuaW1wb3J0IHtcblx0QW5pbWF0aW9uU3RhdGUsXG5cdEFuaW1hdGlvblN0YXRlRGF0YSxcblx0QXRsYXNBdHRhY2htZW50TG9hZGVyLFxuXHRBdHRhY2htZW50LFxuXHRCb25lLFxuXHRDbGlwcGluZ0F0dGFjaG1lbnQsXG5cdENvbG9yLFxuXHRNZXNoQXR0YWNobWVudCxcblx0UGh5c2ljcyxcblx0UG9vbCxcblx0UmVnaW9uQXR0YWNobWVudCxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQmluYXJ5LFxuXHRTa2VsZXRvbkJvdW5kcyxcblx0U2tlbGV0b25DbGlwcGluZyxcblx0U2tlbGV0b25EYXRhLFxuXHRTa2VsZXRvbkpzb24sXG5cdFNsb3QsXG5cdHR5cGUgVGV4dHVyZUF0bGFzLFxuXHRUcmFja0VudHJ5LFxuXHRWZWN0b3IyLFxufSBmcm9tICdAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlJztcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIHtAbGluayBTcGluZX0gdXNpbmcge0BsaW5rIFNwaW5lLmZyb219LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5lRnJvbU9wdGlvbnMge1xuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBza2VsZXRvbiBgLnNrZWxgIG9yIGAuanNvbmAgZmlsZSBwcmV2aW91c2x5IGxvYWRlZCBpbnRvIHRoZSBBc3NldHMgKi9cblx0c2tlbGV0b246IHN0cmluZztcblxuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBhdGxhcyBmaWxlIHByZXZpb3VzbHkgbG9hZGVkIGludG8gdGhlIEFzc2V0cyAqL1xuXHRhdGxhczogc3RyaW5nO1xuXG5cdC8qKiAgVGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgc2tlbGV0b24gcmVhZGVyLiBJZiBvbWl0dGVkLCAxIGlzIHBhc3NlZC4gU2VlIHtAbGluayBTa2VsZXRvbkJpbmFyeS5zY2FsZX0gZm9yIGRldGFpbHMuICovXG5cdHNjYWxlPzogbnVtYmVyO1xuXG5cdC8qKiAgU2V0IHRoZSB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gdmFsdWUuIElmIG9taXR0ZWQsIGl0IGlzIHNldCB0byBgdHJ1ZWAuICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAsIHVzZSB0aGUgZGFyayB0aW50IHJlbmRlcmVyIHRvIHJlbmRlciB0aGUgc2tlbGV0b25cblx0ICogSWYgYGZhbHNlYCwgdXNlIHRoZSBkZWZhdWx0IHBpeGkgcmVuZGVyZXIgdG8gcmVuZGVyIHRoZSBza2VsZXRvblxuXHQgKiBJZiBgdW5kZWZpbmVkYCwgdXNlIHRoZSBkYXJrIHRpbnQgcmVuZGVyZXIgaWYgYXQgbGVhc3Qgb25lIHNsb3QgaGFzIHRpbnQgYmxhY2tcblx0ICovXG5cdGRhcmtUaW50PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IHZlY3RvckF1eCA9IG5ldyBWZWN0b3IyKCk7XG5cblNrZWxldG9uLnlEb3duID0gdHJ1ZTtcblxuY29uc3QgY2xpcHBlciA9IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVPcHRpb25zIGV4dGVuZHMgQ29udGFpbmVyT3B0aW9ucyB7XG5cdC8qKiB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgc2tlbGV0b24gKi9cblx0c2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqICBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnMuYXV0b1VwZGF0ZX0uICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmRhcmtUaW50fS4gKi9cblx0ZGFya1RpbnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuaW1hdGlvblN0YXRlTGlzdGVuZXIge0BsaW5rIGh0dHBzOi8vZW4uZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBpLXJlZmVyZW5jZSNBbmltYXRpb25TdGF0ZUxpc3RlbmVyIGV2ZW50c30gZXhwb3NlZCBmb3IgUGl4aS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUV2ZW50cyB7XG5cdGNvbXBsZXRlOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGRpc3Bvc2U6IFt0cmFja0VudHJ5OiBUcmFja0VudHJ5XTtcblx0ZW5kOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGV2ZW50OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeSwgZXZlbnQ6IEV2ZW50XTtcblx0aW50ZXJydXB0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdHN0YXJ0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdGlkOiBzdHJpbmc7XG5cdGNsaXBwZWQ6IGJvb2xlYW47XG5cdHZlcnRpY2VzOiBGbG9hdDMyQXJyYXk7XG5cdHV2czogRmxvYXQzMkFycmF5O1xuXHRpbmRpY2VzOiBudW1iZXJbXTtcblx0Y29sb3I6IENvbG9yO1xuXHRkYXJrQ29sb3I6IENvbG9yO1xuXHRkYXJrVGludDogYm9vbGVhbjtcblx0c2tpcFJlbmRlcjogYm9vbGVhbjtcblx0dGV4dHVyZTogVGV4dHVyZTtcblx0Y2xpcHBlZERhdGE/OiB7XG5cdFx0dmVydGljZXM6IEZsb2F0MzJBcnJheTtcblx0XHR1dnM6IEZsb2F0MzJBcnJheTtcblx0XHRpbmRpY2VzOiBVaW50MTZBcnJheTtcblx0XHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuXHRcdGluZGljZXNDb3VudDogbnVtYmVyO1xuXHR9O1xufVxuXG5pbnRlcmZhY2UgU2xvdHNUb0NsaXBwaW5nIHtcblx0c2xvdDogU2xvdCxcblx0bWFzaz86IEdyYXBoaWNzLFxuXHRtYXNrQ29tcHV0ZWQ/OiBib29sZWFuLFxuXHR2ZXJ0aWNlczogQXJyYXk8bnVtYmVyPixcbn07XG5cbmNvbnN0IG1hc2tQb29sID0gbmV3IFBvb2w8R3JhcGhpY3M+KCgpID0+IG5ldyBHcmFwaGljcyk7XG5cbi8qKlxuICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGEge0BsaW5rIFNwaW5lfSBnYW1lIG9iamVjdCBpbiBQaXhpLlxuICogVGhlIHN0YXRpYyBtZXRob2Qge0BsaW5rIFNwaW5lLmZyb219IHNob3VsZCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgU3BpbmUgZ2FtZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZSBleHRlbmRzIFZpZXdDb250YWluZXIge1xuXHQvLyBQaXhpIHByb3BlcnRpZXNcblx0cHVibGljIGJhdGNoZWQgPSB0cnVlO1xuXHRwdWJsaWMgYnVpbGRJZCA9IDA7XG5cdHB1YmxpYyBvdmVycmlkZSByZWFkb25seSByZW5kZXJQaXBlSWQgPSAnc3BpbmUnO1xuXHRwdWJsaWMgX2RpZFNwaW5lVXBkYXRlID0gZmFsc2U7XG5cblx0cHVibGljIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3JtczogKG9iamVjdDogU3BpbmUpID0+IHZvaWQgPSAoKSA9PiB7IC8qKiAqLyB9O1xuXHRwdWJsaWMgYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXM6IChvYmplY3Q6IFNwaW5lKSA9PiB2b2lkID0gKCkgPT4geyAvKiogKi8gfTtcblxuXHQvLyBTcGluZSBwcm9wZXJ0aWVzXG5cdC8qKiBUaGUgc2tlbGV0b24gZm9yIHRoaXMgU3BpbmUgZ2FtZSBvYmplY3QuICovXG5cdHB1YmxpYyBza2VsZXRvbjogU2tlbGV0b247XG5cdC8qKiBUaGUgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGlzIFNwaW5lIGdhbWUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuXHRwdWJsaWMgc2tlbGV0b25Cb3VuZHM/OiBTa2VsZXRvbkJvdW5kcztcblxuXHRwcml2YXRlIGRhcmtUaW50ID0gZmFsc2U7XG5cdHByaXZhdGUgX2RlYnVnPzogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuXHRyZWFkb25seSBfc2xvdHNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHsgc2xvdDogU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIgfSB8IG51bGw+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0cHJpdmF0ZSBjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrczogUmVjb3JkPHN0cmluZywgU2xvdHNUb0NsaXBwaW5nPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0cHJpdmF0ZSBnZXRTbG90RnJvbVJlZiAoc2xvdFJlZjogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCk6IFNsb3Qge1xuXHRcdGxldCBzbG90OiBTbG90IHwgbnVsbDtcblxuXHRcdGlmICh0eXBlb2Ygc2xvdFJlZiA9PT0gJ251bWJlcicpIHNsb3QgPSB0aGlzLnNrZWxldG9uLnNsb3RzW3Nsb3RSZWZdO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBzbG90UmVmID09PSAnc3RyaW5nJykgc2xvdCA9IHRoaXMuc2tlbGV0b24uZmluZFNsb3Qoc2xvdFJlZik7XG5cdFx0ZWxzZSBzbG90ID0gc2xvdFJlZjtcblxuXHRcdGlmICghc2xvdCkgdGhyb3cgbmV3IEVycm9yKGBObyBzbG90IGZvdW5kIHdpdGggdGhlIGdpdmVuIHNsb3QgcmVmZXJlbmNlOiAke3Nsb3RSZWZ9YCk7XG5cblx0XHRyZXR1cm4gc2xvdDtcblx0fVxuXG5cdHB1YmxpYyBzcGluZUF0dGFjaG1lbnRzRGlydHkgPSB0cnVlO1xuXHRwdWJsaWMgc3BpbmVUZXh0dXJlc0RpcnR5ID0gdHJ1ZTtcblxuXHRwcml2YXRlIF9sYXN0QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuXG5cdHByaXZhdGUgX3N0YXRlQ2hhbmdlZCA9IHRydWU7XG5cdHByaXZhdGUgYXR0YWNobWVudENhY2hlRGF0YTogUmVjb3JkPHN0cmluZywgQXR0YWNobWVudENhY2hlRGF0YT5bXSA9IFtdO1xuXG5cdHB1YmxpYyBnZXQgZGVidWcgKCk6IElTcGluZURlYnVnUmVuZGVyZXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9kZWJ1Zztcblx0fVxuXG5cdC8qKiBQYXNzIGEge0BsaW5rIFNwaW5lRGVidWdSZW5kZXJlcn0gb3IgY3JlYXRlIHlvdXIgb3duIHtAbGluayBJU3BpbmVEZWJ1Z1JlbmRlcmVyfSB0byByZW5kZXIgYm9uZXMsIG1lc2hlcywgLi4uXG5cdCAqIEBleGFtcGxlIHNwaW5lR08uZGVidWcgPSBuZXcgU3BpbmVEZWJ1Z1JlbmRlcmVyKCk7XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGRlYnVnICh2YWx1ZTogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICh0aGlzLl9kZWJ1Zykge1xuXHRcdFx0dGhpcy5fZGVidWcudW5yZWdpc3RlclNwaW5lKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHZhbHVlLnJlZ2lzdGVyU3BpbmUodGhpcyk7XG5cdFx0fVxuXHRcdHRoaXMuX2RlYnVnID0gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIF9hdXRvVXBkYXRlID0gdHJ1ZTtcblxuXHRwdWJsaWMgZ2V0IGF1dG9VcGRhdGUgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9hdXRvVXBkYXRlO1xuXHR9XG5cdC8qKiBXaGVuIGB0cnVlYCwgdGhlIFNwaW5lIEFuaW1hdGlvblN0YXRlIGFuZCB0aGUgU2tlbGV0b24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgdXNpbmcgdGhlIHtAbGluayBUaWNrZXIuc2hhcmVkfSBpbnN0YW5jZS4gKi9cblx0cHVibGljIHNldCBhdXRvVXBkYXRlICh2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0VGlja2VyLnNoYXJlZC5hZGQodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMuaW50ZXJuYWxVcGRhdGUsIHRoaXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2F1dG9VcGRhdGUgPSB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgaGFzTmV2ZXJVcGRhdGVkID0gdHJ1ZTtcblx0Y29uc3RydWN0b3IgKG9wdGlvbnM6IFNwaW5lT3B0aW9ucyB8IFNrZWxldG9uRGF0YSkge1xuXHRcdGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2tlbGV0b25EYXRhKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHRza2VsZXRvbkRhdGE6IG9wdGlvbnMsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHN1cGVyKCk7XG5cblx0XHRjb25zdCBza2VsZXRvbkRhdGEgPSBvcHRpb25zIGluc3RhbmNlb2YgU2tlbGV0b25EYXRhID8gb3B0aW9ucyA6IG9wdGlvbnMuc2tlbGV0b25EYXRhO1xuXG5cdFx0dGhpcy5za2VsZXRvbiA9IG5ldyBTa2VsZXRvbihza2VsZXRvbkRhdGEpO1xuXHRcdHRoaXMuc3RhdGUgPSBuZXcgQW5pbWF0aW9uU3RhdGUobmV3IEFuaW1hdGlvblN0YXRlRGF0YShza2VsZXRvbkRhdGEpKTtcblx0XHR0aGlzLmF1dG9VcGRhdGUgPSBvcHRpb25zPy5hdXRvVXBkYXRlID8/IHRydWU7XG5cblx0XHQvLyBkYXJrIHRpbnQgY2FuIGJlIGVuYWJsZWQgYnkgb3B0aW9ucywgb3RoZXJ3aXNlIGlzIGVuYWJsZSBpZiBhdCBsZWFzdCBvbmUgc2xvdCBoYXMgdGludCBibGFja1xuXHRcdHRoaXMuZGFya1RpbnQgPSBvcHRpb25zPy5kYXJrVGludCA9PT0gdW5kZWZpbmVkXG5cdFx0XHQ/IHRoaXMuc2tlbGV0b24uc2xvdHMuc29tZShzbG90ID0+ICEhc2xvdC5kYXRhLmRhcmtDb2xvcilcblx0XHRcdDogb3B0aW9ucz8uZGFya1RpbnQ7XG5cblx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2tlbGV0b24uc2xvdHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNsb3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRDYWNoZURhdGFbaV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBJZiB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gaXMgYGZhbHNlYCwgdGhpcyBtZXRob2QgYWxsb3dzIHRvIHVwZGF0ZSB0aGUgQW5pbWF0aW9uU3RhdGUgYW5kIHRoZSBTa2VsZXRvbiB3aXRoIHRoZSBnaXZlbiBkZWx0YS4gKi9cblx0cHVibGljIHVwZGF0ZSAoZHQ6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuaW50ZXJuYWxVcGRhdGUoMCwgZHQpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGludGVybmFsVXBkYXRlIChfZGVsdGFGcmFtZTogYW55LCBkZWx0YVNlY29uZHM/OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBCZWNhdXNlIHJlYXNvbnMsIHBpeGkgdXNlcyBkZWx0YUZyYW1lcyBhdCA2MGZwcy5cblx0XHQvLyBXZSBpZ25vcmUgdGhlIGRlZmF1bHQgZGVsdGFGcmFtZXMgYW5kIHVzZSB0aGUgZGVsdGFTZWNvbmRzIGZyb20gcGl4aSB0aWNrZXIuXG5cdFx0dGhpcy5fdXBkYXRlQW5kQXBwbHlTdGF0ZShkZWx0YVNlY29uZHMgPz8gVGlja2VyLnNoYXJlZC5kZWx0YU1TIC8gMTAwMCk7XG5cdH1cblxuXHRvdmVycmlkZSBnZXQgYm91bmRzICgpIHtcblx0XHRpZiAodGhpcy5fYm91bmRzRGlydHkpIHtcblx0XHRcdHRoaXMudXBkYXRlQm91bmRzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2JvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBib25lIGdpdmVuIGluIGlucHV0IHRocm91Z2ggYSB7QGxpbmsgSVBvaW50RGF0YX0uXG5cdCAqIEBwYXJhbSBib25lOiB0aGUgYm9uZSBuYW1lIG9yIHRoZSBib25lIGluc3RhbmNlIHRvIHNldCB0aGUgcG9zaXRpb25cblx0ICogQHBhcmFtIG91dFBvczogdGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgYm9uZS5cblx0ICogQHRocm93cyB7RXJyb3J9OiBpZiB0aGUgZ2l2ZW4gYm9uZSBpcyBub3QgZm91bmQgaW4gdGhlIHNrZWxldG9uLCBhbiBlcnJvciBpcyB0aHJvd25cblx0ICovXG5cdHB1YmxpYyBzZXRCb25lUG9zaXRpb24gKGJvbmU6IHN0cmluZyB8IEJvbmUsIHBvc2l0aW9uOiBQb2ludERhdGEpOiB2b2lkIHtcblx0XHRjb25zdCBib25lQXV4ID0gYm9uZTtcblxuXHRcdGlmICh0eXBlb2YgYm9uZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGJvbmUgPSB0aGlzLnNrZWxldG9uLmZpbmRCb25lKGJvbmUpIGFzIEJvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKCFib25lKSB0aHJvdyBFcnJvcihgQ2FudCBzZXQgYm9uZSBwb3NpdGlvbiwgYm9uZSAke1N0cmluZyhib25lQXV4KX0gbm90IGZvdW5kYCk7XG5cdFx0dmVjdG9yQXV4LnNldChwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcblxuXHRcdGlmIChib25lLnBhcmVudCkge1xuXHRcdFx0Y29uc3QgYXV4ID0gYm9uZS5wYXJlbnQud29ybGRUb0xvY2FsKHZlY3RvckF1eCk7XG5cblx0XHRcdGJvbmUueCA9IGF1eC54O1xuXHRcdFx0Ym9uZS55ID0gLWF1eC55O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGJvbmUueCA9IHZlY3RvckF1eC54O1xuXHRcdFx0Ym9uZS55ID0gdmVjdG9yQXV4Lnk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgZ2l2ZW4gaW4gaW5wdXQgaW50byBhbiB7QGxpbmsgSVBvaW50RGF0YX0uXG5cdCAqIEBwYXJhbSBib25lOiB0aGUgYm9uZSBuYW1lIG9yIHRoZSBib25lIGluc3RhbmNlIHRvIGdldCB0aGUgcG9zaXRpb24gZnJvbVxuXHQgKiBAcGFyYW0gb3V0UG9zOiBhbiBvcHRpb25hbCB7QGxpbmsgSVBvaW50RGF0YX0gdG8gdXNlIHRvIHJldHVybiB0aGUgYm9uZSBwb3NpdGlvbiwgcmF0aGVybiB0aGFuIGluc3RhbnRpYXRpbmcgYSBuZXcgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyB7SVBvaW50RGF0YSB8IHVuZGVmaW5lZH06IHRoZSBwb3NpdGlvbiBvZiB0aGUgYm9uZSwgb3IgdW5kZWZpbmVkIGlmIG5vIG1hdGNoaW5nIGJvbmUgaXMgZm91bmQgaW4gdGhlIHNrZWxldG9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Qm9uZVBvc2l0aW9uIChib25lOiBzdHJpbmcgfCBCb25lLCBvdXRQb3M/OiBQb2ludERhdGEpOiBQb2ludERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGJvbmVBdXggPSBib25lO1xuXG5cdFx0aWYgKHR5cGVvZiBib25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ym9uZSA9IHRoaXMuc2tlbGV0b24uZmluZEJvbmUoYm9uZSkgYXMgQm9uZTtcblx0XHR9XG5cblx0XHRpZiAoIWJvbmUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYENhbnQgc2V0IGJvbmUgcG9zaXRpb24hIEJvbmUgJHtTdHJpbmcoYm9uZUF1eCl9IG5vdCBmb3VuZGApO1xuXG5cdFx0XHRyZXR1cm4gb3V0UG9zO1xuXHRcdH1cblxuXHRcdGlmICghb3V0UG9zKSB7XG5cdFx0XHRvdXRQb3MgPSB7IHg6IDAsIHk6IDAgfTtcblx0XHR9XG5cblx0XHRvdXRQb3MueCA9IGJvbmUud29ybGRYO1xuXHRcdG91dFBvcy55ID0gYm9uZS53b3JsZFk7XG5cblx0XHRyZXR1cm4gb3V0UG9zO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkdmFuY2UgdGhlIHN0YXRlIGFuZCBza2VsZXRvbiBieSB0aGUgZ2l2ZW4gdGltZSwgdGhlbiB1cGRhdGUgc2xvdCBvYmplY3RzIHRvby5cblx0ICogVGhlIGNvbnRhaW5lciB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0aW1lIHRoZSB0aW1lIGF0IHdoaWNoIHRvIHNldCB0aGUgc3RhdGVcblx0ICovXG5cdHByaXZhdGUgX3VwZGF0ZUFuZEFwcGx5U3RhdGUgKHRpbWU6IG51bWJlcikge1xuXHRcdHRoaXMuaGFzTmV2ZXJVcGRhdGVkID0gZmFsc2U7XG5cblx0XHR0aGlzLnN0YXRlLnVwZGF0ZSh0aW1lKTtcblx0XHR0aGlzLnNrZWxldG9uLnVwZGF0ZSh0aW1lKTtcblxuXHRcdGNvbnN0IHsgc2tlbGV0b24gfSA9IHRoaXM7XG5cblx0XHR0aGlzLnN0YXRlLmFwcGx5KHNrZWxldG9uKTtcblxuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHR0aGlzLmFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXG5cdFx0dGhpcy51cGRhdGVTbG90T2JqZWN0cygpO1xuXG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuXHRcdHRoaXMub25WaWV3VXBkYXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogLSB2YWxpZGF0ZXMgdGhlIGF0dGFjaG1lbnRzIC0gdG8gZmxhZyBpZiB0aGUgYXR0YWNobWVudHMgaGF2ZSBjaGFuZ2VkIHRoaXMgc3RhdGVcblx0ICogLSB0cmFuc2Zvcm1zIHRoZSBhdHRhY2htZW50cyAtIHRvIHVwZGF0ZSB0aGUgdmVydGljZXMgb2YgdGhlIGF0dGFjaG1lbnRzIGJhc2VkIG9uIHRoZSBuZXcgcG9zaXRpb25zXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0X3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMgKCkge1xuXHRcdGlmICghdGhpcy5fc3RhdGVDaGFuZ2VkKSByZXR1cm47XG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG5cblx0XHR0aGlzLnZhbGlkYXRlQXR0YWNobWVudHMoKTtcblxuXHRcdHRoaXMudHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblx0fVxuXG5cdHByaXZhdGUgdmFsaWRhdGVBdHRhY2htZW50cyAoKSB7XG5cdFx0Y29uc3QgY3VycmVudERyYXdPcmRlciA9IHRoaXMuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Y29uc3QgbGFzdEF0dGFjaG1lbnRzID0gdGhpcy5fbGFzdEF0dGFjaG1lbnRzO1xuXG5cdFx0bGV0IGluZGV4ID0gMDtcblxuXHRcdGxldCBzcGluZUF0dGFjaG1lbnRzRGlydHkgPSBmYWxzZTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyYXdPcmRlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGN1cnJlbnREcmF3T3JkZXJbaV07XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICE9PSBsYXN0QXR0YWNobWVudHNbaW5kZXhdKSB7XG5cdFx0XHRcdFx0c3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRsYXN0QXR0YWNobWVudHNbaW5kZXhdID0gYXR0YWNobWVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGluZGV4ICE9PSBsYXN0QXR0YWNobWVudHMubGVuZ3RoKSB7XG5cdFx0XHRzcGluZUF0dGFjaG1lbnRzRGlydHkgPSB0cnVlO1xuXHRcdFx0bGFzdEF0dGFjaG1lbnRzLmxlbmd0aCA9IGluZGV4O1xuXHRcdH1cblxuXHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gc3BpbmVBdHRhY2htZW50c0RpcnR5O1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVBbmRTZXRQaXhpTWFzayAoc2xvdDogU2xvdCwgbGFzdDogYm9vbGVhbikge1xuXHRcdC8vIGFzc2lnbi9jcmVhdGUgdGhlIGN1cnJlbnRDbGlwcGluZ1Nsb3Rcblx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5hdHRhY2htZW50O1xuXHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBDbGlwcGluZ0F0dGFjaG1lbnQpIHtcblx0XHRcdGNvbnN0IGNsaXAgPSAodGhpcy5jbGlwcGluZ1Nsb3RUb1BpeGlNYXNrc1tzbG90LmRhdGEubmFtZV0gfHw9IHsgc2xvdCwgdmVydGljZXM6IG5ldyBBcnJheTxudW1iZXI+KCkgfSk7XG5cdFx0XHRjbGlwLm1hc2tDb21wdXRlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90ID0gdGhpcy5jbGlwcGluZ1Nsb3RUb1BpeGlNYXNrc1tzbG90LmRhdGEubmFtZV07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gYXNzaWduIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90IG1hc2sgdG8gdGhlIHNsb3Qgb2JqZWN0XG5cdFx0bGV0IGN1cnJlbnRDbGlwcGluZ1Nsb3QgPSB0aGlzLmN1cnJlbnRDbGlwcGluZ1Nsb3Q7XG5cdFx0bGV0IHNsb3RPYmplY3QgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV07XG5cdFx0aWYgKGN1cnJlbnRDbGlwcGluZ1Nsb3QgJiYgc2xvdE9iamVjdCkge1xuXHRcdFx0bGV0IHNsb3RDbGlwcGluZyA9IGN1cnJlbnRDbGlwcGluZ1Nsb3Quc2xvdDtcblx0XHRcdGxldCBjbGlwcGluZ0F0dGFjaG1lbnQgPSBzbG90Q2xpcHBpbmcuYXR0YWNobWVudCBhcyBDbGlwcGluZ0F0dGFjaG1lbnQ7XG5cblx0XHRcdC8vIGNyZWF0ZSB0aGUgcGl4aSBtYXNrLCBvbmx5IHRoZSBmaXJzdCB0aW1lIGFuZCBpZiB0aGUgY2xpcHBlZCBzbG90IGlzIHRoZSBmaXJzdCBvbmUgY2xpcHBlZCBieSB0aGlzIGN1cnJlbnRDbGlwcGluZ1Nsb3Rcblx0XHRcdGxldCBtYXNrID0gY3VycmVudENsaXBwaW5nU2xvdC5tYXNrIGFzIEdyYXBoaWNzO1xuXHRcdFx0aWYgKCFtYXNrKSB7XG5cdFx0XHRcdG1hc2sgPSBtYXNrUG9vbC5vYnRhaW4oKTtcblx0XHRcdFx0Y3VycmVudENsaXBwaW5nU2xvdC5tYXNrID0gbWFzaztcblx0XHRcdFx0dGhpcy5hZGRDaGlsZChtYXNrKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY29tcHV0ZSB0aGUgcGl4aSBtYXNrIHBvbHlnb24sIGlmIHRoZSBjbGlwcGVkIHNsb3QgaXMgdGhlIGZpcnN0IG9uZSBjbGlwcGVkIGJ5IHRoaXMgY3VycmVudENsaXBwaW5nU2xvdFxuXHRcdFx0aWYgKCFjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2tDb21wdXRlZCkge1xuXHRcdFx0XHRjdXJyZW50Q2xpcHBpbmdTbG90Lm1hc2tDb21wdXRlZCA9IHRydWU7XG5cdFx0XHRcdGNvbnN0IHdvcmxkVmVydGljZXNMZW5ndGggPSBjbGlwcGluZ0F0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aDtcblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSBjdXJyZW50Q2xpcHBpbmdTbG90LnZlcnRpY2VzO1xuXHRcdFx0XHRjbGlwcGluZ0F0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdENsaXBwaW5nLCAwLCB3b3JsZFZlcnRpY2VzTGVuZ3RoLCB2ZXJ0aWNlcywgMCwgMik7XG5cdFx0XHRcdG1hc2suY2xlYXIoKS5wb2x5KHZlcnRpY2VzKS5zdHJva2UoeyB3aWR0aDogMCB9KS5maWxsKHsgYWxwaGE6IC4yNSB9KTtcblx0XHRcdH1cblx0XHRcdHNsb3RPYmplY3QuY29udGFpbmVyLm1hc2sgPSBtYXNrO1xuXHRcdH0gZWxzZSBpZiAoc2xvdE9iamVjdD8uY29udGFpbmVyLm1hc2spIHtcblx0XHRcdC8vIHJlbW92ZSB0aGUgbWFzaywgaWYgc2xvdCBvYmplY3QgaGFzIGEgbWFzaywgYnV0IGN1cnJlbnRDbGlwcGluZ1Nsb3QgaXMgdW5kZWZpbmVkXG5cdFx0XHRzbG90T2JqZWN0LmNvbnRhaW5lci5tYXNrID0gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBpZiBjdXJyZW50IHNsb3QgaXMgdGhlIGVuZGluZyBvbmUgb2YgdGhlIGN1cnJlbnRDbGlwcGluZ1Nsb3QgbWFzaywgc2V0IGN1cnJlbnRDbGlwcGluZ1Nsb3QgdG8gdW5kZWZpbmVkXG5cdFx0aWYgKGN1cnJlbnRDbGlwcGluZ1Nsb3QgJiYgKGN1cnJlbnRDbGlwcGluZ1Nsb3Quc2xvdC5hdHRhY2htZW50IGFzIENsaXBwaW5nQXR0YWNobWVudCkuZW5kU2xvdCA9PSBzbG90LmRhdGEpIHtcblx0XHRcdHRoaXMuY3VycmVudENsaXBwaW5nU2xvdCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBjbGVhbiB1cCB1bnVzZWQgbWFza3Ncblx0XHRpZiAobGFzdCkge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jbGlwcGluZ1Nsb3RUb1BpeGlNYXNrcykge1xuXHRcdFx0XHRjb25zdCBjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrID0gdGhpcy5jbGlwcGluZ1Nsb3RUb1BpeGlNYXNrc1trZXldO1xuXHRcdFx0XHRpZiAoKCEoY2xpcHBpbmdTbG90VG9QaXhpTWFzay5zbG90LmF0dGFjaG1lbnQgaW5zdGFuY2VvZiBDbGlwcGluZ0F0dGFjaG1lbnQpIHx8ICFjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2tDb21wdXRlZCkgJiYgY2xpcHBpbmdTbG90VG9QaXhpTWFzay5tYXNrKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVDaGlsZChjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2spO1xuXHRcdFx0XHRcdG1hc2tQb29sLmZyZWUoY2xpcHBpbmdTbG90VG9QaXhpTWFzay5tYXNrKTtcblx0XHRcdFx0XHRjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrLm1hc2sgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGN1cnJlbnRDbGlwcGluZ1Nsb3Q6IFNsb3RzVG9DbGlwcGluZyB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSB0cmFuc2Zvcm1BdHRhY2htZW50cyAoKSB7XG5cdFx0Y29uc3QgY3VycmVudERyYXdPcmRlciA9IHRoaXMuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RHJhd09yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gY3VycmVudERyYXdPcmRlcltpXTtcblxuXHRcdFx0dGhpcy51cGRhdGVBbmRTZXRQaXhpTWFzayhzbG90LCBpID09PSBjdXJyZW50RHJhd09yZGVyLmxlbmd0aCAtIDEpO1xuXG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQgfHwgYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSB0aGlzLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzKHNsb3QsIGNhY2hlRGF0YS52ZXJ0aWNlcywgMCwgMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhcblx0XHRcdFx0XHRcdFx0c2xvdCxcblx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRjYWNoZURhdGEudmVydGljZXMsXG5cdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdDIsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHNlcXVlbmNlcyB1dnMgYXJlIGtub3duIG9ubHkgYWZ0ZXIgY29tcHV0ZVdvcmxkVmVydGljZXMgaXMgaW52b2tlZFxuXHRcdFx0XHRcdGlmIChjYWNoZURhdGEudXZzLmxlbmd0aCA8IGF0dGFjaG1lbnQudXZzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y2FjaGVEYXRhLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0YWNobWVudC51dnMubGVuZ3RoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBuZWVkIHRvIGNvcHkgYmVjYXVzZSBhdHRhY2htZW50cyB1dnMgYXJlIHNoYXJlZCBhbW9uZyBza2VsZXRvbnMgdXNpbmcgdGhlIHNhbWUgYXRsYXNcblx0XHRcdFx0XHRmYXN0Q29weSgoYXR0YWNobWVudC51dnMgYXMgRmxvYXQzMkFycmF5KS5idWZmZXIsIGNhY2hlRGF0YS51dnMuYnVmZmVyKTtcblxuXHRcdFx0XHRcdGNvbnN0IHNrZWxldG9uID0gc2xvdC5ib25lLnNrZWxldG9uO1xuXHRcdFx0XHRcdGNvbnN0IHNrZWxldG9uQ29sb3IgPSBza2VsZXRvbi5jb2xvcjtcblx0XHRcdFx0XHRjb25zdCBzbG90Q29sb3IgPSBzbG90LmNvbG9yO1xuXG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudENvbG9yID0gYXR0YWNobWVudC5jb2xvcjtcblxuXHRcdFx0XHRcdGNhY2hlRGF0YS5jb2xvci5zZXQoXG5cdFx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIGF0dGFjaG1lbnRDb2xvci5yLFxuXHRcdFx0XHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiBhdHRhY2htZW50Q29sb3IuZyxcblx0XHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogYXR0YWNobWVudENvbG9yLmIsXG5cdFx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLmEgKiBzbG90Q29sb3IuYSAqIGF0dGFjaG1lbnRDb2xvci5hLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoc2xvdC5kYXJrQ29sb3IpIHtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS5kYXJrQ29sb3Iuc2V0RnJvbUNvbG9yKHNsb3QuZGFya0NvbG9yKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjYWNoZURhdGEuc2tpcFJlbmRlciA9IGNhY2hlRGF0YS5jbGlwcGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gYXR0YWNobWVudC5yZWdpb24/LnRleHR1cmUudGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuXG5cdFx0XHRcdFx0aWYgKGNhY2hlRGF0YS50ZXh0dXJlICE9PSB0ZXh0dXJlKSB7XG5cdFx0XHRcdFx0XHRjYWNoZURhdGEudGV4dHVyZSA9IHRleHR1cmU7XG5cdFx0XHRcdFx0XHR0aGlzLnNwaW5lVGV4dHVyZXNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGNsaXBwZXIuaXNDbGlwcGluZygpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUNsaXBwaW5nRGF0YShjYWNoZURhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgQ2xpcHBpbmdBdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0Y2xpcHBlci5jbGlwU3RhcnQoc2xvdCwgYXR0YWNobWVudCk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNsaXBwZXIuY2xpcEVuZFdpdGhTbG90KHNsb3QpO1xuXHRcdH1cblx0XHRjbGlwcGVyLmNsaXBFbmQoKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQ2xpcHBpbmdEYXRhIChjYWNoZURhdGE6IEF0dGFjaG1lbnRDYWNoZURhdGEpIHtcblx0XHRjYWNoZURhdGEuY2xpcHBlZCA9IHRydWU7XG5cblx0XHRjbGlwcGVyLmNsaXBUcmlhbmdsZXNVbnBhY2tlZChcblx0XHRcdGNhY2hlRGF0YS52ZXJ0aWNlcyxcblx0XHRcdGNhY2hlRGF0YS5pbmRpY2VzLFxuXHRcdFx0Y2FjaGVEYXRhLmluZGljZXMubGVuZ3RoLFxuXHRcdFx0Y2FjaGVEYXRhLnV2cyxcblx0XHQpO1xuXG5cdFx0Y29uc3QgeyBjbGlwcGVkVmVydGljZXMsIGNsaXBwZWRVVnMsIGNsaXBwZWRUcmlhbmdsZXMgfSA9IGNsaXBwZXI7XG5cblx0XHRjb25zdCB2ZXJ0aWNlc0NvdW50ID0gY2xpcHBlZFZlcnRpY2VzLmxlbmd0aCAvIDI7XG5cdFx0Y29uc3QgaW5kaWNlc0NvdW50ID0gY2xpcHBlZFRyaWFuZ2xlcy5sZW5ndGg7XG5cblx0XHRpZiAoIWNhY2hlRGF0YS5jbGlwcGVkRGF0YSkge1xuXHRcdFx0Y2FjaGVEYXRhLmNsaXBwZWREYXRhID0ge1xuXHRcdFx0XHR2ZXJ0aWNlczogbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlc0NvdW50ICogMiksXG5cdFx0XHRcdHV2czogbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlc0NvdW50ICogMiksXG5cdFx0XHRcdHZlcnRleENvdW50OiB2ZXJ0aWNlc0NvdW50LFxuXHRcdFx0XHRpbmRpY2VzOiBuZXcgVWludDE2QXJyYXkoaW5kaWNlc0NvdW50KSxcblx0XHRcdFx0aW5kaWNlc0NvdW50LFxuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5zcGluZUF0dGFjaG1lbnRzRGlydHkgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsaXBwZWREYXRhID0gY2FjaGVEYXRhLmNsaXBwZWREYXRhO1xuXG5cdFx0Y29uc3Qgc2l6ZUNoYW5nZSA9IGNsaXBwZWREYXRhLnZlcnRleENvdW50ICE9PSB2ZXJ0aWNlc0NvdW50IHx8IGluZGljZXNDb3VudCAhPT0gY2xpcHBlZERhdGEuaW5kaWNlc0NvdW50O1xuXG5cdFx0Y2FjaGVEYXRhLnNraXBSZW5kZXIgPSB2ZXJ0aWNlc0NvdW50ID09PSAwO1xuXG5cdFx0aWYgKHNpemVDaGFuZ2UpIHtcblx0XHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblxuXHRcdFx0aWYgKGNsaXBwZWREYXRhLnZlcnRleENvdW50IDwgdmVydGljZXNDb3VudCkge1xuXHRcdFx0XHQvLyBidWZmZXIgcmV1c2UhXG5cdFx0XHRcdGNsaXBwZWREYXRhLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlc0NvdW50ICogMik7XG5cdFx0XHRcdGNsaXBwZWREYXRhLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xpcHBlZERhdGEuaW5kaWNlcy5sZW5ndGggPCBpbmRpY2VzQ291bnQpIHtcblx0XHRcdFx0Y2xpcHBlZERhdGEuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzQ291bnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHsgdmVydGljZXMsIHV2cywgaW5kaWNlcyB9ID0gY2xpcHBlZERhdGE7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzQ291bnQ7IGkrKykge1xuXHRcdFx0dmVydGljZXNbaSAqIDJdID0gY2xpcHBlZFZlcnRpY2VzW2kgKiAyXTtcblx0XHRcdHZlcnRpY2VzWyhpICogMikgKyAxXSA9IGNsaXBwZWRWZXJ0aWNlc1soaSAqIDIpICsgMV07XG5cblx0XHRcdHV2c1tpICogMl0gPSBjbGlwcGVkVVZzWyhpICogMildO1xuXHRcdFx0dXZzWyhpICogMikgKyAxXSA9IGNsaXBwZWRVVnNbKGkgKiAyKSArIDFdO1xuXHRcdH1cblxuXHRcdGNsaXBwZWREYXRhLnZlcnRleENvdW50ID0gdmVydGljZXNDb3VudDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc0NvdW50OyBpKyspIHtcblx0XHRcdGlmIChpbmRpY2VzW2ldICE9PSBjbGlwcGVkVHJpYW5nbGVzW2ldKSB7XG5cdFx0XHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0aW5kaWNlc1tpXSA9IGNsaXBwZWRUcmlhbmdsZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2xpcHBlZERhdGEuaW5kaWNlc0NvdW50ID0gaW5kaWNlc0NvdW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIGVuc3VyZSB0aGF0IGF0dGFjaGVkIGNvbnRhaW5lcnMgbWFwIGNvcnJlY3RseSB0byB0aGVpciBzbG90c1xuXHQgKiBhbG9uZyB3aXRoIHRoZWlyIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUsIGFuZCB2aXNpYmlsaXR5LlxuXHQgKi9cblx0cHJpdmF0ZSB1cGRhdGVTbG90T2JqZWN0cyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIHRoaXMuX3Nsb3RzT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBzbG90QXR0YWNobWVudCA9IHRoaXMuX3Nsb3RzT2JqZWN0W2ldO1xuXG5cdFx0XHRpZiAoIXNsb3RBdHRhY2htZW50KSBjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVTbG90T2JqZWN0KHNsb3RBdHRhY2htZW50KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVNsb3RPYmplY3QgKHNsb3RBdHRhY2htZW50OiB7IHNsb3Q6IFNsb3QsIGNvbnRhaW5lcjogQ29udGFpbmVyIH0pIHtcblx0XHRjb25zdCB7IHNsb3QsIGNvbnRhaW5lciB9ID0gc2xvdEF0dGFjaG1lbnQ7XG5cblx0XHRjb250YWluZXIudmlzaWJsZSA9IHRoaXMuc2tlbGV0b24uZHJhd09yZGVyLmluY2x1ZGVzKHNsb3QpO1xuXG5cdFx0aWYgKGNvbnRhaW5lci52aXNpYmxlKSB7XG5cdFx0XHRjb25zdCBib25lID0gc2xvdC5ib25lO1xuXG5cdFx0XHRjb250YWluZXIucG9zaXRpb24uc2V0KGJvbmUud29ybGRYLCBib25lLndvcmxkWSk7XG5cblx0XHRcdGNvbnRhaW5lci5zY2FsZS54ID0gYm9uZS5nZXRXb3JsZFNjYWxlWCgpO1xuXHRcdFx0Y29udGFpbmVyLnNjYWxlLnkgPSBib25lLmdldFdvcmxkU2NhbGVZKCk7XG5cblx0XHRcdGNvbnRhaW5lci5yb3RhdGlvbiA9IGJvbmUuZ2V0V29ybGRSb3RhdGlvblgoKSAqIERFR19UT19SQUQ7XG5cblx0XHRcdGNvbnRhaW5lci5hbHBoYSA9IHRoaXMuc2tlbGV0b24uY29sb3IuYSAqIHNsb3QuY29sb3IuYTtcblx0XHR9XG5cdH1cblxuXHQvKiogQGludGVybmFsICovXG5cdF9nZXRDYWNoZWREYXRhIChzbG90OiBTbG90LCBhdHRhY2htZW50OiBSZWdpb25BdHRhY2htZW50IHwgTWVzaEF0dGFjaG1lbnQpOiBBdHRhY2htZW50Q2FjaGVEYXRhIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXSB8fCB0aGlzLmluaXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0Q2FjaGVkRGF0YSAoc2xvdDogU2xvdCwgYXR0YWNobWVudDogUmVnaW9uQXR0YWNobWVudCB8IE1lc2hBdHRhY2htZW50KTogQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdFx0bGV0IHZlcnRpY2VzOiBGbG9hdDMyQXJyYXk7XG5cblx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQpIHtcblx0XHRcdHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcblxuXHRcdFx0dGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXSA9IHtcblx0XHRcdFx0aWQ6IGAke3Nsb3QuZGF0YS5pbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YCxcblx0XHRcdFx0dmVydGljZXMsXG5cdFx0XHRcdGNsaXBwZWQ6IGZhbHNlLFxuXHRcdFx0XHRpbmRpY2VzOiBbMCwgMSwgMiwgMCwgMiwgM10sXG5cdFx0XHRcdHV2czogbmV3IEZsb2F0MzJBcnJheShhdHRhY2htZW50LnV2cy5sZW5ndGgpLFxuXHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKDEsIDEsIDEsIDEpLFxuXHRcdFx0XHRkYXJrQ29sb3I6IG5ldyBDb2xvcigwLCAwLCAwLCAwKSxcblx0XHRcdFx0ZGFya1RpbnQ6IHRoaXMuZGFya1RpbnQsXG5cdFx0XHRcdHNraXBSZW5kZXI6IGZhbHNlLFxuXHRcdFx0XHR0ZXh0dXJlOiBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoKTtcblxuXHRcdFx0dGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXSA9IHtcblx0XHRcdFx0aWQ6IGAke3Nsb3QuZGF0YS5pbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YCxcblx0XHRcdFx0dmVydGljZXMsXG5cdFx0XHRcdGNsaXBwZWQ6IGZhbHNlLFxuXHRcdFx0XHRpbmRpY2VzOiBhdHRhY2htZW50LnRyaWFuZ2xlcyxcblx0XHRcdFx0dXZzOiBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQudXZzLmxlbmd0aCksXG5cdFx0XHRcdGNvbG9yOiBuZXcgQ29sb3IoMSwgMSwgMSwgMSksXG5cdFx0XHRcdGRhcmtDb2xvcjogbmV3IENvbG9yKDAsIDAsIDAsIDApLFxuXHRcdFx0XHRkYXJrVGludDogdGhpcy5kYXJrVGludCxcblx0XHRcdFx0c2tpcFJlbmRlcjogZmFsc2UsXG5cdFx0XHRcdHRleHR1cmU6IGF0dGFjaG1lbnQucmVnaW9uPy50ZXh0dXJlLnRleHR1cmUsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmF0dGFjaG1lbnRDYWNoZURhdGFbc2xvdC5kYXRhLmluZGV4XVthdHRhY2htZW50Lm5hbWVdO1xuXHR9XG5cblx0cHJvdGVjdGVkIG9uVmlld1VwZGF0ZSAoKSB7XG5cdFx0Ly8gaW5jcmVtZW50IGZyb20gdGhlIDEydGggYml0IVxuXHRcdHRoaXMuX2RpZFZpZXdDaGFuZ2VUaWNrKys7XG5cdFx0dGhpcy5fYm91bmRzRGlydHkgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuZGlkVmlld1VwZGF0ZSkgcmV0dXJuO1xuXHRcdHRoaXMuZGlkVmlld1VwZGF0ZSA9IHRydWU7XG5cblx0XHRjb25zdCByZW5kZXJHcm91cCA9IHRoaXMucmVuZGVyR3JvdXAgfHwgdGhpcy5wYXJlbnRSZW5kZXJHcm91cDtcblxuXHRcdGlmIChyZW5kZXJHcm91cCkge1xuXHRcdFx0cmVuZGVyR3JvdXAub25DaGlsZFZpZXdVcGRhdGUodGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWJ1Zz8ucmVuZGVyRGVidWcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoZXMgYSBQaXhpSlMgY29udGFpbmVyIHRvIGEgc3BlY2lmaWVkIHNsb3QuIFRoaXMgd2lsbCBtYXAgdGhlIHdvcmxkIHRyYW5zZm9ybSBvZiB0aGUgc2xvdHMgYm9uZVxuXHQgKiB0byB0aGUgYXR0YWNoZWQgY29udGFpbmVyLiBBIGNvbnRhaW5lciBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBvbmUgc2xvdCBhdCBhIHRpbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250YWluZXIgLSBUaGUgY29udGFpbmVyIHRvIGF0dGFjaCB0byB0aGUgc2xvdFxuXHQgKiBAcGFyYW0gc2xvdFJlZiAtIFRoZSBzbG90IGlkIG9yICBzbG90IHRvIGF0dGFjaCB0b1xuXHQgKi9cblx0cHVibGljIGFkZFNsb3RPYmplY3QgKHNsb3Q6IG51bWJlciB8IHN0cmluZyB8IFNsb3QsIGNvbnRhaW5lcjogQ29udGFpbmVyKSB7XG5cdFx0c2xvdCA9IHRoaXMuZ2V0U2xvdEZyb21SZWYoc2xvdCk7XG5cblx0XHQvLyBuZWVkIHRvIGNoZWNrIGluIG9uIHRoZSBjb250YWluZXIgdG9vLi4uXG5cdFx0Zm9yIChjb25zdCBpIGluIHRoaXMuX3Nsb3RzT2JqZWN0KSB7XG5cdFx0XHRpZiAodGhpcy5fc2xvdHNPYmplY3RbaV0/LmNvbnRhaW5lciA9PT0gY29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlU2xvdE9iamVjdCh0aGlzLl9zbG90c09iamVjdFtpXS5zbG90KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlbW92ZVNsb3RPYmplY3Qoc2xvdCk7XG5cblx0XHRjb250YWluZXIuaW5jbHVkZUluQnVpbGQgPSBmYWxzZTtcblxuXHRcdC8vIFRPRE8gb25seSBhZGQgb25jZT8/XG5cdFx0dGhpcy5hZGRDaGlsZChjb250YWluZXIpO1xuXG5cdFx0Y29uc3Qgc2xvdE9iamVjdCA9IHsgY29udGFpbmVyLCBzbG90IH07XG5cdFx0dGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdID0gc2xvdE9iamVjdDtcblxuXHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90T2JqZWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgUGl4aUpTIGNvbnRhaW5lciBmcm9tIHRoZSBzbG90IGl0IGlzIGF0dGFjaGVkIHRvLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciB0byBkZXRhY2ggZnJvbSB0aGUgc2xvdFxuXHQgKiBAcGFyYW0gc2xvdE9yQ29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciwgc2xvdCBpZCBvciBzbG90IHRvIGRldGFjaCBmcm9tXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlU2xvdE9iamVjdCAoc2xvdE9yQ29udGFpbmVyOiBudW1iZXIgfCBzdHJpbmcgfCBTbG90IHwgQ29udGFpbmVyKSB7XG5cdFx0bGV0IGNvbnRhaW5lclRvUmVtb3ZlOiBDb250YWluZXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2xvdE9yQ29udGFpbmVyIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5fc2xvdHNPYmplY3QpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IHNsb3RPckNvbnRhaW5lcikge1xuXHRcdFx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W2ldID0gbnVsbDtcblxuXHRcdFx0XHRcdGNvbnRhaW5lclRvUmVtb3ZlID0gc2xvdE9yQ29udGFpbmVyO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IHRoaXMuZ2V0U2xvdEZyb21SZWYoc2xvdE9yQ29udGFpbmVyKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUgPSB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV0/LmNvbnRhaW5lcjtcblx0XHRcdHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lclRvUmVtb3ZlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNvbnRhaW5lclRvUmVtb3ZlKTtcblxuXHRcdFx0Y29udGFpbmVyVG9SZW1vdmUuaW5jbHVkZUluQnVpbGQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgY29udGFpbmVyIGF0dGFjaGVkIHRvIGEgc2xvdCwgb3IgdW5kZWZpbmVkIGlmIG5vIGNvbnRhaW5lciBpcyBhdHRhY2hlZC5cblx0ICpcblx0ICogQHBhcmFtIHNsb3RSZWYgLSBUaGUgc2xvdCBpZCBvciBzbG90IHRvIGdldCB0aGUgYXR0YWNobWVudCBmcm9tXG5cdCAqIEByZXR1cm5zIC0gVGhlIGNvbnRhaW5lciBhdHRhY2hlZCB0byB0aGUgc2xvdFxuXHQgKi9cblx0cHVibGljIGdldFNsb3RPYmplY3QgKHNsb3Q6IG51bWJlciB8IHN0cmluZyB8IFNsb3QpIHtcblx0XHRzbG90ID0gdGhpcy5nZXRTbG90RnJvbVJlZihzbG90KTtcblxuXHRcdHJldHVybiB0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV0/LmNvbnRhaW5lcjtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVCb3VuZHMgKCkge1xuXHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gZmFsc2U7XG5cblx0XHR0aGlzLnNrZWxldG9uQm91bmRzIHx8PSBuZXcgU2tlbGV0b25Cb3VuZHMoKTtcblxuXHRcdGNvbnN0IHNrZWxldG9uQm91bmRzID0gdGhpcy5za2VsZXRvbkJvdW5kcztcblxuXHRcdHNrZWxldG9uQm91bmRzLnVwZGF0ZSh0aGlzLnNrZWxldG9uLCB0cnVlKTtcblxuXHRcdGlmIChza2VsZXRvbkJvdW5kcy5taW5YID09PSBJbmZpbml0eSkge1xuXHRcdFx0aWYgKHRoaXMuaGFzTmV2ZXJVcGRhdGVkKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuZEFwcGx5U3RhdGUoMCk7XG5cdFx0XHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHRcdGNvbnN0IGRyYXdPcmRlciA9IHRoaXMuc2tlbGV0b24uZHJhd09yZGVyO1xuXHRcdFx0Y29uc3QgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG5cdFx0XHRib3VuZHMuY2xlYXIoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmF3T3JkZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblxuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgJiYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkpIHtcblx0XHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSB0aGlzLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0Ym91bmRzLmFkZFZlcnRleERhdGEoY2FjaGVEYXRhLnZlcnRpY2VzLCAwLCBjYWNoZURhdGEudmVydGljZXMubGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHRoaXMuX2JvdW5kcy5taW5YID0gc2tlbGV0b25Cb3VuZHMubWluWDtcblx0XHRcdHRoaXMuX2JvdW5kcy5taW5ZID0gc2tlbGV0b25Cb3VuZHMubWluWTtcblx0XHRcdHRoaXMuX2JvdW5kcy5tYXhYID0gc2tlbGV0b25Cb3VuZHMubWF4WDtcblx0XHRcdHRoaXMuX2JvdW5kcy5tYXhZID0gc2tlbGV0b25Cb3VuZHMubWF4WTtcblx0XHR9XG5cdH1cblxuXHQvKiogQGludGVybmFsICovXG5cdGFkZEJvdW5kcyAoYm91bmRzOiBCb3VuZHMpIHtcblx0XHRib3VuZHMuYWRkQm91bmRzKHRoaXMuYm91bmRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cm95cyB0aGlzIHNwcml0ZSByZW5kZXJhYmxlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgcGFyYW1ldGVyLiBBIGJvb2xlYW4gd2lsbCBhY3QgYXMgaWYgYWxsIG9wdGlvbnNcblx0ICogIGhhdmUgYmVlbiBzZXQgdG8gdGhhdCB2YWx1ZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRleHR1cmU9ZmFsc2VdIC0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgcmVuZGVyYWJsZSBhcyB3ZWxsXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGV4dHVyZVNvdXJjZT1mYWxzZV0gLSBTaG91bGQgaXQgZGVzdHJveSB0aGUgdGV4dHVyZVNvdXJjZSBvZiB0aGUgcmVuZGVyYWJsZSBhcyB3ZWxsXG5cdCAqL1xuXHRwdWJsaWMgb3ZlcnJpZGUgZGVzdHJveSAob3B0aW9uczogRGVzdHJveU9wdGlvbnMgPSBmYWxzZSkge1xuXHRcdHN1cGVyLmRlc3Ryb3kob3B0aW9ucyk7XG5cblx0XHRUaWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLmludGVybmFsVXBkYXRlLCB0aGlzKTtcblx0XHR0aGlzLnN0YXRlLmNsZWFyTGlzdGVuZXJzKCk7XG5cdFx0dGhpcy5kZWJ1ZyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnNrZWxldG9uID0gbnVsbCBhcyBhbnk7XG5cdFx0dGhpcy5zdGF0ZSA9IG51bGwgYXMgYW55O1xuXHRcdCh0aGlzLl9zbG90c09iamVjdCBhcyBhbnkpID0gbnVsbDtcblx0XHR0aGlzLl9sYXN0QXR0YWNobWVudHMubGVuZ3RoID0gMDtcblx0XHR0aGlzLmF0dGFjaG1lbnRDYWNoZURhdGEgPSBudWxsIGFzIGFueTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBQaXhpIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwdWJsaWMgc2tlbGV0b25Ub1BpeGlXb3JsZENvb3JkaW5hdGVzIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG5cdFx0dGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb2ludCwgcG9pbnQpO1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGl4aSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0uICovXG5cdHB1YmxpYyBwaXhpV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24gKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHR0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgcG9pbnQpO1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGl4aSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwdWJsaWMgcGl4aVdvcmxkQ29vcmRpbmF0ZXNUb0JvbmUgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIGJvbmU6IEJvbmUpIHtcblx0XHR0aGlzLnBpeGlXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbihwb2ludCk7XG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRib25lLnBhcmVudC53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Ym9uZS53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVzZSB0aGlzIG1ldGhvZCB0byBpbnN0YW50aWF0ZSBhIFNwaW5lIGdhbWUgb2JqZWN0LlxuXHQgKiBCZWZvcmUgaW5zdGFudGlhdGluZyBhIFNwaW5lIGdhbWUgb2JqZWN0LCB0aGUgc2tlbGV0b24gKGAuc2tlbGAgb3IgYC5qc29uYCkgYW5kIHRoZSBhdGxhcyB0ZXh0IGZpbGVzIG11c3QgYmUgbG9hZGVkIGludG8gdGhlIEFzc2V0cy4gRm9yIGV4YW1wbGU6XG5cdCAqIGBgYFxuXHQgKiBQSVhJLkFzc2V0cy5hZGQoXCJzYWNrRGF0YVwiLCBcIi4vYXNzZXRzL3NhY2stcHJvLnNrZWxcIik7XG5cdCAqIFBJWEkuQXNzZXRzLmFkZChcInNhY2tBdGxhc1wiLCBcIi4vYXNzZXRzL3NhY2stcG1hLmF0bGFzXCIpO1xuXHQgKiBhd2FpdCBQSVhJLkFzc2V0cy5sb2FkKFtcInNhY2tEYXRhXCIsIFwic2Fja0F0bGFzXCJdKTtcblx0ICogYGBgXG5cdCAqIE9uY2UgYSBTcGluZSBnYW1lIG9iamVjdCBpcyBjcmVhdGVkLCBpdHMgc2tlbGV0b24gZGF0YSBpcyBjYWNoZWQgaW50byB7QGxpbmsgQ2FjaGV9IHVzaW5nIHRoZSBrZXk6XG5cdCAqIGAke3NrZWxldG9uQXNzZXROYW1lfS0ke2F0bGFzQXNzZXROYW1lfS0ke29wdGlvbnM/LnNjYWxlID8/IDF9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBTcGluZSBnYW1lIG9iamVjdC4gU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zfVxuXHQgKiBAcmV0dXJucyB7U3BpbmV9IFRoZSBTcGluZSBnYW1lIG9iamVjdCBpbnN0YW50aWF0ZWRcblx0ICovXG5cdHN0YXRpYyBmcm9tICh7IHNrZWxldG9uLCBhdGxhcywgc2NhbGUgPSAxLCBkYXJrVGludCwgYXV0b1VwZGF0ZSA9IHRydWUgfTogU3BpbmVGcm9tT3B0aW9ucykge1xuXHRcdGNvbnN0IGNhY2hlS2V5ID0gYCR7c2tlbGV0b259LSR7YXRsYXN9LSR7c2NhbGV9YDtcblxuXHRcdGlmIChDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFNwaW5lKENhY2hlLmdldDxTa2VsZXRvbkRhdGE+KGNhY2hlS2V5KSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2tlbGV0b25Bc3NldCA9IEFzc2V0cy5nZXQ8YW55IHwgVWludDhBcnJheT4oc2tlbGV0b24pO1xuXG5cdFx0Y29uc3QgYXRsYXNBc3NldCA9IEFzc2V0cy5nZXQ8VGV4dHVyZUF0bGFzPihhdGxhcyk7XG5cdFx0Y29uc3QgYXR0YWNobWVudExvYWRlciA9IG5ldyBBdGxhc0F0dGFjaG1lbnRMb2FkZXIoYXRsYXNBc3NldCk7XG5cdFx0Y29uc3QgcGFyc2VyID0gc2tlbGV0b25Bc3NldCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcblx0XHRcdD8gbmV3IFNrZWxldG9uQmluYXJ5KGF0dGFjaG1lbnRMb2FkZXIpXG5cdFx0XHQ6IG5ldyBTa2VsZXRvbkpzb24oYXR0YWNobWVudExvYWRlcik7XG5cblx0XHRwYXJzZXIuc2NhbGUgPSBzY2FsZTtcblx0XHRjb25zdCBza2VsZXRvbkRhdGEgPSBwYXJzZXIucmVhZFNrZWxldG9uRGF0YShza2VsZXRvbkFzc2V0KTtcblxuXHRcdENhY2hlLnNldChjYWNoZUtleSwgc2tlbGV0b25EYXRhKTtcblxuXHRcdHJldHVybiBuZXcgU3BpbmUoe1xuXHRcdFx0c2tlbGV0b25EYXRhLFxuXHRcdFx0ZGFya1RpbnQsXG5cdFx0XHRhdXRvVXBkYXRlLFxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFDTixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsRUFFVCxVQUFVLEVBRVYsUUFBUSxFQUNSLFFBQVEsRUFFUixPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsR0FDYixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQ04sY0FBYyxFQUNkLGtCQUFrQixFQUNsQixxQkFBcUIsRUFHckIsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxjQUFjLEVBQ2QsT0FBTyxFQUNQLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBSVosT0FBTyxHQUNQLE1BQU0sOEJBQThCLENBQUM7QUF3QnJDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRWhDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQWtEdEMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLEtBQU0sU0FBUSxhQUFhO0lBQ3ZDLGtCQUFrQjtJQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ00sWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUN6QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRXhCLDJCQUEyQixHQUE0QixHQUFHLEVBQUUsR0FBVSxDQUFDLENBQUM7SUFDeEUsMEJBQTBCLEdBQTRC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QUNuRCxNQUFNLGdCQUFnQixHQUFHLElBQUkscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxZQUFZLFVBQVU7WUFDakQsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVsQyxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ2hCLFlBQVk7WUFDWixRQUFRO1lBQ1IsVUFBVTtTQUNWLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEp1bHkgMjgsIDIwMjMuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMywgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvclxuICogb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRIRVxuICogU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7XG5cdEFzc2V0cyxcblx0Qm91bmRzLFxuXHRDYWNoZSxcblx0Q29udGFpbmVyLFxuXHRDb250YWluZXJPcHRpb25zLFxuXHRERUdfVE9fUkFELFxuXHREZXN0cm95T3B0aW9ucyxcblx0ZmFzdENvcHksXG5cdEdyYXBoaWNzLFxuXHRQb2ludERhdGEsXG5cdFRleHR1cmUsXG5cdFRpY2tlcixcblx0Vmlld0NvbnRhaW5lcixcbn0gZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgeyBJU3BpbmVEZWJ1Z1JlbmRlcmVyIH0gZnJvbSAnLi9TcGluZURlYnVnUmVuZGVyZXIuanMnO1xuaW1wb3J0IHtcblx0QW5pbWF0aW9uU3RhdGUsXG5cdEFuaW1hdGlvblN0YXRlRGF0YSxcblx0QXRsYXNBdHRhY2htZW50TG9hZGVyLFxuXHRBdHRhY2htZW50LFxuXHRCb25lLFxuXHRDbGlwcGluZ0F0dGFjaG1lbnQsXG5cdENvbG9yLFxuXHRNZXNoQXR0YWNobWVudCxcblx0UGh5c2ljcyxcblx0UG9vbCxcblx0UmVnaW9uQXR0YWNobWVudCxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQmluYXJ5LFxuXHRTa2VsZXRvbkJvdW5kcyxcblx0U2tlbGV0b25DbGlwcGluZyxcblx0U2tlbGV0b25EYXRhLFxuXHRTa2VsZXRvbkpzb24sXG5cdFNsb3QsXG5cdHR5cGUgVGV4dHVyZUF0bGFzLFxuXHRUcmFja0VudHJ5LFxuXHRWZWN0b3IyLFxufSBmcm9tICdAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlJztcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIHtAbGluayBTcGluZX0gdXNpbmcge0BsaW5rIFNwaW5lLmZyb219LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwaW5lRnJvbU9wdGlvbnMge1xuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBza2VsZXRvbiBgLnNrZWxgIG9yIGAuanNvbmAgZmlsZSBwcmV2aW91c2x5IGxvYWRlZCBpbnRvIHRoZSBBc3NldHMgKi9cblx0c2tlbGV0b246IHN0cmluZztcblxuXHQvKiogdGhlIGFzc2V0IG5hbWUgZm9yIHRoZSBhdGxhcyBmaWxlIHByZXZpb3VzbHkgbG9hZGVkIGludG8gdGhlIEFzc2V0cyAqL1xuXHRhdGxhczogc3RyaW5nO1xuXG5cdC8qKiAgVGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgc2tlbGV0b24gcmVhZGVyLiBJZiBvbWl0dGVkLCAxIGlzIHBhc3NlZC4gU2VlIHtAbGluayBTa2VsZXRvbkJpbmFyeS5zY2FsZX0gZm9yIGRldGFpbHMuICovXG5cdHNjYWxlPzogbnVtYmVyO1xuXG5cdC8qKiAgU2V0IHRoZSB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gdmFsdWUuIElmIG9taXR0ZWQsIGl0IGlzIHNldCB0byBgdHJ1ZWAuICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAsIHVzZSB0aGUgZGFyayB0aW50IHJlbmRlcmVyIHRvIHJlbmRlciB0aGUgc2tlbGV0b25cblx0ICogSWYgYGZhbHNlYCwgdXNlIHRoZSBkZWZhdWx0IHBpeGkgcmVuZGVyZXIgdG8gcmVuZGVyIHRoZSBza2VsZXRvblxuXHQgKiBJZiBgdW5kZWZpbmVkYCwgdXNlIHRoZSBkYXJrIHRpbnQgcmVuZGVyZXIgaWYgYXQgbGVhc3Qgb25lIHNsb3QgaGFzIHRpbnQgYmxhY2tcblx0ICovXG5cdGRhcmtUaW50PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IHZlY3RvckF1eCA9IG5ldyBWZWN0b3IyKCk7XG5cblNrZWxldG9uLnlEb3duID0gdHJ1ZTtcblxuY29uc3QgY2xpcHBlciA9IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVPcHRpb25zIGV4dGVuZHMgQ29udGFpbmVyT3B0aW9ucyB7XG5cdC8qKiB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgc2tlbGV0b24gKi9cblx0c2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqICBTZWUge0BsaW5rIFNwaW5lRnJvbU9wdGlvbnMuYXV0b1VwZGF0ZX0uICovXG5cdGF1dG9VcGRhdGU/OiBib29sZWFuO1xuXG5cdC8qKiAgU2VlIHtAbGluayBTcGluZUZyb21PcHRpb25zLmRhcmtUaW50fS4gKi9cblx0ZGFya1RpbnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuaW1hdGlvblN0YXRlTGlzdGVuZXIge0BsaW5rIGh0dHBzOi8vZW4uZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBpLXJlZmVyZW5jZSNBbmltYXRpb25TdGF0ZUxpc3RlbmVyIGV2ZW50c30gZXhwb3NlZCBmb3IgUGl4aS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUV2ZW50cyB7XG5cdGNvbXBsZXRlOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGRpc3Bvc2U6IFt0cmFja0VudHJ5OiBUcmFja0VudHJ5XTtcblx0ZW5kOiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdGV2ZW50OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeSwgZXZlbnQ6IEV2ZW50XTtcblx0aW50ZXJydXB0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG5cdHN0YXJ0OiBbdHJhY2tFbnRyeTogVHJhY2tFbnRyeV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdGlkOiBzdHJpbmc7XG5cdGNsaXBwZWQ6IGJvb2xlYW47XG5cdHZlcnRpY2VzOiBGbG9hdDMyQXJyYXk7XG5cdHV2czogRmxvYXQzMkFycmF5O1xuXHRpbmRpY2VzOiBudW1iZXJbXTtcblx0Y29sb3I6IENvbG9yO1xuXHRkYXJrQ29sb3I6IENvbG9yO1xuXHRkYXJrVGludDogYm9vbGVhbjtcblx0c2tpcFJlbmRlcjogYm9vbGVhbjtcblx0dGV4dHVyZTogVGV4dHVyZTtcblx0Y2xpcHBlZERhdGE/OiB7XG5cdFx0dmVydGljZXM6IEZsb2F0MzJBcnJheTtcblx0XHR1dnM6IEZsb2F0MzJBcnJheTtcblx0XHRpbmRpY2VzOiBVaW50MTZBcnJheTtcblx0XHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuXHRcdGluZGljZXNDb3VudDogbnVtYmVyO1xuXHR9O1xufVxuXG5pbnRlcmZhY2UgU2xvdHNUb0NsaXBwaW5nIHtcblx0c2xvdDogU2xvdCxcblx0bWFzaz86IEdyYXBoaWNzLFxuXHRtYXNrQ29tcHV0ZWQ/OiBib29sZWFuLFxuXHR2ZXJ0aWNlczogQXJyYXk8bnVtYmVyPixcbn07XG5cbmNvbnN0IG1hc2tQb29sID0gbmV3IFBvb2w8R3JhcGhpY3M+KCgpID0+IG5ldyBHcmFwaGljcyk7XG5cbi8qKlxuICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGEge0BsaW5rIFNwaW5lfSBnYW1lIG9iamVjdCBpbiBQaXhpLlxuICogVGhlIHN0YXRpYyBtZXRob2Qge0BsaW5rIFNwaW5lLmZyb219IHNob3VsZCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgU3BpbmUgZ2FtZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZSBleHRlbmRzIFZpZXdDb250YWluZXIge1xuXHQvLyBQaXhpIHByb3BlcnRpZXNcblx0cHVibGljIGJhdGNoZWQgPSB0cnVlO1xuXHRwdWJsaWMgYnVpbGRJZCA9IDA7XG5cdHB1YmxpYyBvdmVycmlkZSByZWFkb25seSByZW5kZXJQaXBlSWQgPSAnc3BpbmUnO1xuXHRwdWJsaWMgX2RpZFNwaW5lVXBkYXRlID0gZmFsc2U7XG5cblx0cHVibGljIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3JtczogKG9iamVjdDogU3BpbmUpID0+IHZvaWQgPSAoKSA9PiB7IC8qKiAqLyB9O1xuXHRwdWJsaWMgYWZ0ZXJVcGRhdGVXb3JsZFRyYW5zZm9ybXM6IChvYmplY3Q6IFNwaW5lKSA9PiB2b2lkID0gKCkgPT4geyAvKiogKi8gfTtcblxuXHQvLyBTcGluZSBwcm9wZXJ0aWVzXG5cdC8qKiBUaGUgc2tlbGV0b24gZm9yIHRoaXMgU3BpbmUgZ2FtZSBvYmplY3QuICovXG5cdHB1YmxpYyBza2VsZXRvbjogU2tlbGV0b247XG5cdC8qKiBUaGUgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGlzIFNwaW5lIGdhbWUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuXHRwdWJsaWMgc2tlbGV0b25Cb3VuZHM/OiBTa2VsZXRvbkJvdW5kcztcblxuXHRwcml2YXRlIGRhcmtUaW50ID0gZmFsc2U7XG5cdHByaXZhdGUgX2RlYnVnPzogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuXHRyZWFkb25seSBfc2xvdHNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHsgc2xvdDogU2xvdCwgY29udGFpbmVyOiBDb250YWluZXIgfSB8IG51bGw+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0cHJpdmF0ZSBjbGlwcGluZ1Nsb3RUb1BpeGlNYXNrczogUmVjb3JkPHN0cmluZywgU2xvdHNUb0NsaXBwaW5nPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0cHJpdmF0ZSBnZXRTbG90RnJvbVJlZiAoc2xvdFJlZjogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCk6IFNsb3Qge1xuXHRcdGxldCBzbG90OiBTbG90IHwgbnVsbDtcblxuXHRcdGlmICh0eXBlb2Ygc2xvdFJlZiA9PT0gJ251bWJlcicpIHNsb3QgPSB0aGlzLnNrZWxldG9uLnNsb3RzW3Nsb3RSZWZdO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBzbG90UmVmID09PSAnc3RyaW5nJykgc2xvdCA9IHRoaXMuc2tlbGV0b24uZmluZFNsb3Qoc2xvdFJlZik7XG5cdFx0ZWxzZSBzbG90ID0gc2xvdFJlZjtcblxuXHRcdGlmICghc2xvdCkgdGhyb3cgbmV3IEVycm9yKGBObyBzbG90IGZvdW5kIHdpdGggdGhlIGdpdmVuIHNsb3QgcmVmZXJlbmNlOiAke3Nsb3RSZWZ9YCk7XG5cblx0XHRyZXR1cm4gc2xvdDtcblx0fVxuXG5cdHB1YmxpYyBzcGluZUF0dGFjaG1lbnRzRGlydHkgPSB0cnVlO1xuXHRwdWJsaWMgc3BpbmVUZXh0dXJlc0RpcnR5ID0gdHJ1ZTtcblxuXHRwcml2YXRlIF9sYXN0QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuXG5cdHByaXZhdGUgX3N0YXRlQ2hhbmdlZCA9IHRydWU7XG5cdHByaXZhdGUgYXR0YWNobWVudENhY2hlRGF0YTogUmVjb3JkPHN0cmluZywgQXR0YWNobWVudENhY2hlRGF0YT5bXSA9IFtdO1xuXG5cdHB1YmxpYyBnZXQgZGVidWcgKCk6IElTcGluZURlYnVnUmVuZGVyZXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9kZWJ1Zztcblx0fVxuXG5cdC8qKiBQYXNzIGEge0BsaW5rIFNwaW5lRGVidWdSZW5kZXJlcn0gb3IgY3JlYXRlIHlvdXIgb3duIHtAbGluayBJU3BpbmVEZWJ1Z1JlbmRlcmVyfSB0byByZW5kZXIgYm9uZXMsIG1lc2hlcywgLi4uXG5cdCAqIEBleGFtcGxlIHNwaW5lR08uZGVidWcgPSBuZXcgU3BpbmVEZWJ1Z1JlbmRlcmVyKCk7XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGRlYnVnICh2YWx1ZTogSVNwaW5lRGVidWdSZW5kZXJlciB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICh0aGlzLl9kZWJ1Zykge1xuXHRcdFx0dGhpcy5fZGVidWcudW5yZWdpc3RlclNwaW5lKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHZhbHVlLnJlZ2lzdGVyU3BpbmUodGhpcyk7XG5cdFx0fVxuXHRcdHRoaXMuX2RlYnVnID0gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIF9hdXRvVXBkYXRlID0gdHJ1ZTtcblxuXHRwdWJsaWMgZ2V0IGF1dG9VcGRhdGUgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9hdXRvVXBkYXRlO1xuXHR9XG5cdC8qKiBXaGVuIGB0cnVlYCwgdGhlIFNwaW5lIEFuaW1hdGlvblN0YXRlIGFuZCB0aGUgU2tlbGV0b24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgdXNpbmcgdGhlIHtAbGluayBUaWNrZXIuc2hhcmVkfSBpbnN0YW5jZS4gKi9cblx0cHVibGljIHNldCBhdXRvVXBkYXRlICh2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0VGlja2VyLnNoYXJlZC5hZGQodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMuaW50ZXJuYWxVcGRhdGUsIHRoaXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2F1dG9VcGRhdGUgPSB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgaGFzTmV2ZXJVcGRhdGVkID0gdHJ1ZTtcblx0Y29uc3RydWN0b3IgKG9wdGlvbnM6IFNwaW5lT3B0aW9ucyB8IFNrZWxldG9uRGF0YSkge1xuXHRcdGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2tlbGV0b25EYXRhKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHRza2VsZXRvbkRhdGE6IG9wdGlvbnMsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHN1cGVyKCk7XG5cblx0XHRjb25zdCBza2VsZXRvbkRhdGEgPSBvcHRpb25zIGluc3RhbmNlb2YgU2tlbGV0b25EYXRhID8gb3B0aW9ucyA6IG9wdGlvbnMuc2tlbGV0b25EYXRhO1xuXG5cdFx0dGhpcy5za2VsZXRvbiA9IG5ldyBTa2VsZXRvbihza2VsZXRvbkRhdGEpO1xuXHRcdHRoaXMuc3RhdGUgPSBuZXcgQW5pbWF0aW9uU3RhdGUobmV3IEFuaW1hdGlvblN0YXRlRGF0YShza2VsZXRvbkRhdGEpKTtcblx0XHR0aGlzLmF1dG9VcGRhdGUgPSBvcHRpb25zPy5hdXRvVXBkYXRlID8/IHRydWU7XG5cblx0XHQvLyBkYXJrIHRpbnQgY2FuIGJlIGVuYWJsZWQgYnkgb3B0aW9ucywgb3RoZXJ3aXNlIGlzIGVuYWJsZSBpZiBhdCBsZWFzdCBvbmUgc2xvdCBoYXMgdGludCBibGFja1xuXHRcdHRoaXMuZGFya1RpbnQgPSBvcHRpb25zPy5kYXJrVGludCA9PT0gdW5kZWZpbmVkXG5cdFx0XHQ/IHRoaXMuc2tlbGV0b24uc2xvdHMuc29tZShzbG90ID0+ICEhc2xvdC5kYXRhLmRhcmtDb2xvcilcblx0XHRcdDogb3B0aW9ucz8uZGFya1RpbnQ7XG5cblx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2tlbGV0b24uc2xvdHM7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNsb3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRDYWNoZURhdGFbaV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBJZiB7QGxpbmsgU3BpbmUuYXV0b1VwZGF0ZX0gaXMgYGZhbHNlYCwgdGhpcyBtZXRob2QgYWxsb3dzIHRvIHVwZGF0ZSB0aGUgQW5pbWF0aW9uU3RhdGUgYW5kIHRoZSBTa2VsZXRvbiB3aXRoIHRoZSBnaXZlbiBkZWx0YS4gKi9cblx0cHVibGljIHVwZGF0ZSAoZHQ6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuaW50ZXJuYWxVcGRhdGUoMCwgZHQpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGludGVybmFsVXBkYXRlIChfZGVsdGFGcmFtZTogYW55LCBkZWx0YVNlY29uZHM/OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBCZWNhdXNlIHJlYXNvbnMsIHBpeGkgdXNlcyBkZWx0YUZyYW1lcyBhdCA2MGZwcy5cblx0XHQvLyBXZSBpZ25vcmUgdGhlIGRlZmF1bHQgZGVsdGFGcmFtZXMgYW5kIHVzZSB0aGUgZGVsdGFTZWNvbmRzIGZyb20gcGl4aSB0aWNrZXIuXG5cdFx0dGhpcy5fdXBkYXRlQW5kQXBwbHlTdGF0ZShkZWx0YVNlY29uZHMgPz8gVGlja2VyLnNoYXJlZC5kZWx0YU1TIC8gMTAwMCk7XG5cdH1cblxuXHRvdmVycmlkZSBnZXQgYm91bmRzICgpIHtcblx0XHRpZiAodGhpcy5fYm91bmRzRGlydHkpIHtcblx0XHRcdHRoaXMudXBkYXRlQm91bmRzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2JvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBib25lIGdpdmVuIGluIGlucHV0IHRocm91Z2ggYSB7QGxpbmsgSVBvaW50RGF0YX0uXG5cdCAqIEBwYXJhbSBib25lOiB0aGUgYm9uZSBuYW1lIG9yIHRoZSBib25lIGluc3RhbmNlIHRvIHNldCB0aGUgcG9zaXRpb25cblx0ICogQHBhcmFtIG91dFBvczogdGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgYm9uZS5cblx0ICogQHRocm93cyB7RXJyb3J9OiBpZiB0aGUgZ2l2ZW4gYm9uZSBpcyBub3QgZm91bmQgaW4gdGhlIHNrZWxldG9uLCBhbiBlcnJvciBpcyB0aHJvd25cblx0ICovXG5cdHB1YmxpYyBzZXRCb25lUG9zaXRpb24gKGJvbmU6IHN0cmluZyB8IEJvbmUsIHBvc2l0aW9uOiBQb2ludERhdGEpOiB2b2lkIHtcblx0XHRjb25zdCBib25lQXV4ID0gYm9uZTtcblxuXHRcdGlmICh0eXBlb2YgYm9uZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGJvbmUgPSB0aGlzLnNrZWxldG9uLmZpbmRCb25lKGJvbmUpIGFzIEJvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKCFib25lKSB0aHJvdyBFcnJvcihgQ2FudCBzZXQgYm9uZSBwb3NpdGlvbiwgYm9uZSAke1N0cmluZyhib25lQXV4KX0gbm90IGZvdW5kYCk7XG5cdFx0dmVjdG9yQXV4LnNldChwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcblxuXHRcdGlmIChib25lLnBhcmVudCkge1xuXHRcdFx0Y29uc3QgYXV4ID0gYm9uZS5wYXJlbnQud29ybGRUb0xvY2FsKHZlY3RvckF1eCk7XG5cblx0XHRcdGJvbmUueCA9IGF1eC54O1xuXHRcdFx0Ym9uZS55ID0gLWF1eC55O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGJvbmUueCA9IHZlY3RvckF1eC54O1xuXHRcdFx0Ym9uZS55ID0gdmVjdG9yQXV4Lnk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgZ2l2ZW4gaW4gaW5wdXQgaW50byBhbiB7QGxpbmsgSVBvaW50RGF0YX0uXG5cdCAqIEBwYXJhbSBib25lOiB0aGUgYm9uZSBuYW1lIG9yIHRoZSBib25lIGluc3RhbmNlIHRvIGdldCB0aGUgcG9zaXRpb24gZnJvbVxuXHQgKiBAcGFyYW0gb3V0UG9zOiBhbiBvcHRpb25hbCB7QGxpbmsgSVBvaW50RGF0YX0gdG8gdXNlIHRvIHJldHVybiB0aGUgYm9uZSBwb3NpdGlvbiwgcmF0aGVybiB0aGFuIGluc3RhbnRpYXRpbmcgYSBuZXcgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyB7SVBvaW50RGF0YSB8IHVuZGVmaW5lZH06IHRoZSBwb3NpdGlvbiBvZiB0aGUgYm9uZSwgb3IgdW5kZWZpbmVkIGlmIG5vIG1hdGNoaW5nIGJvbmUgaXMgZm91bmQgaW4gdGhlIHNrZWxldG9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Qm9uZVBvc2l0aW9uIChib25lOiBzdHJpbmcgfCBCb25lLCBvdXRQb3M/OiBQb2ludERhdGEpOiBQb2ludERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGJvbmVBdXggPSBib25lO1xuXG5cdFx0aWYgKHR5cGVvZiBib25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ym9uZSA9IHRoaXMuc2tlbGV0b24uZmluZEJvbmUoYm9uZSkgYXMgQm9uZTtcblx0XHR9XG5cblx0XHRpZiAoIWJvbmUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYENhbnQgc2V0IGJvbmUgcG9zaXRpb24hIEJvbmUgJHtTdHJpbmcoYm9uZUF1eCl9IG5vdCBmb3VuZGApO1xuXG5cdFx0XHRyZXR1cm4gb3V0UG9zO1xuXHRcdH1cblxuXHRcdGlmICghb3V0UG9zKSB7XG5cdFx0XHRvdXRQb3MgPSB7IHg6IDAsIHk6IDAgfTtcblx0XHR9XG5cblx0XHRvdXRQb3MueCA9IGJvbmUud29ybGRYO1xuXHRcdG91dFBvcy55ID0gYm9uZS53b3JsZFk7XG5cblx0XHRyZXR1cm4gb3V0UG9zO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkdmFuY2UgdGhlIHN0YXRlIGFuZCBza2VsZXRvbiBieSB0aGUgZ2l2ZW4gdGltZSwgdGhlbiB1cGRhdGUgc2xvdCBvYmplY3RzIHRvby5cblx0ICogVGhlIGNvbnRhaW5lciB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB0aW1lIHRoZSB0aW1lIGF0IHdoaWNoIHRvIHNldCB0aGUgc3RhdGVcblx0ICovXG5cdHByaXZhdGUgX3VwZGF0ZUFuZEFwcGx5U3RhdGUgKHRpbWU6IG51bWJlcikge1xuXHRcdHRoaXMuaGFzTmV2ZXJVcGRhdGVkID0gZmFsc2U7XG5cblx0XHR0aGlzLnN0YXRlLnVwZGF0ZSh0aW1lKTtcblx0XHR0aGlzLnNrZWxldG9uLnVwZGF0ZSh0aW1lKTtcblxuXHRcdGNvbnN0IHsgc2tlbGV0b24gfSA9IHRoaXM7XG5cblx0XHR0aGlzLnN0YXRlLmFwcGx5KHNrZWxldG9uKTtcblxuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHR0aGlzLmFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXG5cdFx0dGhpcy51cGRhdGVTbG90T2JqZWN0cygpO1xuXG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuXHRcdHRoaXMub25WaWV3VXBkYXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogLSB2YWxpZGF0ZXMgdGhlIGF0dGFjaG1lbnRzIC0gdG8gZmxhZyBpZiB0aGUgYXR0YWNobWVudHMgaGF2ZSBjaGFuZ2VkIHRoaXMgc3RhdGVcblx0ICogLSB0cmFuc2Zvcm1zIHRoZSBhdHRhY2htZW50cyAtIHRvIHVwZGF0ZSB0aGUgdmVydGljZXMgb2YgdGhlIGF0dGFjaG1lbnRzIGJhc2VkIG9uIHRoZSBuZXcgcG9zaXRpb25zXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0X3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMgKCkge1xuXHRcdGlmICghdGhpcy5fc3RhdGVDaGFuZ2VkKSByZXR1cm47XG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG5cblx0XHR0aGlzLnZhbGlkYXRlQXR0YWNobWVudHMoKTtcblxuXHRcdHRoaXMudHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblx0fVxuXG5cdHByaXZhdGUgdmFsaWRhdGVBdHRhY2htZW50cyAoKSB7XG5cblx0XHRjb25zdCBjdXJyZW50RHJhd09yZGVyID0gdGhpcy5za2VsZXRvbi5kcmF3T3JkZXI7XG5cblx0XHRjb25zdCBsYXN0QXR0YWNobWVudHMgPSB0aGlzLl9sYXN0QXR0YWNobWVudHM7XG5cblx0XHRsZXQgaW5kZXggPSAwO1xuXG5cdFx0bGV0IHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RHJhd09yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gY3VycmVudERyYXdPcmRlcltpXTtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblxuXHRcdFx0aWYgKGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgIT09IGxhc3RBdHRhY2htZW50c1tpbmRleF0pIHtcblx0XHRcdFx0XHRzcGluZUF0dGFjaG1lbnRzRGlydHkgPSB0cnVlO1xuXHRcdFx0XHRcdGxhc3RBdHRhY2htZW50c1tpbmRleF0gPSBhdHRhY2htZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaW5kZXggIT09IGxhc3RBdHRhY2htZW50cy5sZW5ndGgpIHtcblx0XHRcdHNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRsYXN0QXR0YWNobWVudHMubGVuZ3RoID0gaW5kZXg7XG5cdFx0fVxuXG5cdFx0dGhpcy5zcGluZUF0dGFjaG1lbnRzRGlydHkgfHw9IHNwaW5lQXR0YWNobWVudHNEaXJ0eTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQW5kU2V0UGl4aU1hc2sgKHNsb3Q6IFNsb3QsIGxhc3Q6IGJvb2xlYW4pIHtcblx0XHQvLyBhc3NpZ24vY3JlYXRlIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuYXR0YWNobWVudDtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50IGluc3RhbmNlb2YgQ2xpcHBpbmdBdHRhY2htZW50KSB7XG5cdFx0XHRjb25zdCBjbGlwID0gKHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3Nbc2xvdC5kYXRhLm5hbWVdIHx8PSB7IHNsb3QsIHZlcnRpY2VzOiBuZXcgQXJyYXk8bnVtYmVyPigpIH0pO1xuXHRcdFx0Y2xpcC5tYXNrQ29tcHV0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuY3VycmVudENsaXBwaW5nU2xvdCA9IHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3Nbc2xvdC5kYXRhLm5hbWVdO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGFzc2lnbiB0aGUgY3VycmVudENsaXBwaW5nU2xvdCBtYXNrIHRvIHRoZSBzbG90IG9iamVjdFxuXHRcdGxldCBjdXJyZW50Q2xpcHBpbmdTbG90ID0gdGhpcy5jdXJyZW50Q2xpcHBpbmdTbG90O1xuXHRcdGxldCBzbG90T2JqZWN0ID0gdGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdO1xuXHRcdGlmIChjdXJyZW50Q2xpcHBpbmdTbG90ICYmIHNsb3RPYmplY3QpIHtcblx0XHRcdGxldCBzbG90Q2xpcHBpbmcgPSBjdXJyZW50Q2xpcHBpbmdTbG90LnNsb3Q7XG5cdFx0XHRsZXQgY2xpcHBpbmdBdHRhY2htZW50ID0gc2xvdENsaXBwaW5nLmF0dGFjaG1lbnQgYXMgQ2xpcHBpbmdBdHRhY2htZW50O1xuXG5cdFx0XHQvLyBjcmVhdGUgdGhlIHBpeGkgbWFzaywgb25seSB0aGUgZmlyc3QgdGltZSBhbmQgaWYgdGhlIGNsaXBwZWQgc2xvdCBpcyB0aGUgZmlyc3Qgb25lIGNsaXBwZWQgYnkgdGhpcyBjdXJyZW50Q2xpcHBpbmdTbG90XG5cdFx0XHRsZXQgbWFzayA9IGN1cnJlbnRDbGlwcGluZ1Nsb3QubWFzayBhcyBHcmFwaGljcztcblx0XHRcdGlmICghbWFzaykge1xuXHRcdFx0XHRtYXNrID0gbWFza1Bvb2wub2J0YWluKCk7XG5cdFx0XHRcdGN1cnJlbnRDbGlwcGluZ1Nsb3QubWFzayA9IG1hc2s7XG5cdFx0XHRcdHRoaXMuYWRkQ2hpbGQobWFzayk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbXB1dGUgdGhlIHBpeGkgbWFzayBwb2x5Z29uLCBpZiB0aGUgY2xpcHBlZCBzbG90IGlzIHRoZSBmaXJzdCBvbmUgY2xpcHBlZCBieSB0aGlzIGN1cnJlbnRDbGlwcGluZ1Nsb3Rcblx0XHRcdGlmICghY3VycmVudENsaXBwaW5nU2xvdC5tYXNrQ29tcHV0ZWQpIHtcblx0XHRcdFx0Y3VycmVudENsaXBwaW5nU2xvdC5tYXNrQ29tcHV0ZWQgPSB0cnVlO1xuXHRcdFx0XHRjb25zdCB3b3JsZFZlcnRpY2VzTGVuZ3RoID0gY2xpcHBpbmdBdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGg7XG5cdFx0XHRcdGNvbnN0IHZlcnRpY2VzID0gY3VycmVudENsaXBwaW5nU2xvdC52ZXJ0aWNlcztcblx0XHRcdFx0Y2xpcHBpbmdBdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzKHNsb3RDbGlwcGluZywgMCwgd29ybGRWZXJ0aWNlc0xlbmd0aCwgdmVydGljZXMsIDAsIDIpO1xuXHRcdFx0XHRtYXNrLmNsZWFyKCkucG9seSh2ZXJ0aWNlcykuc3Ryb2tlKHsgd2lkdGg6IDAgfSkuZmlsbCh7IGFscGhhOiAuMjUgfSk7XG5cdFx0XHR9XG5cdFx0XHRzbG90T2JqZWN0LmNvbnRhaW5lci5tYXNrID0gbWFzaztcblx0XHR9IGVsc2UgaWYgKHNsb3RPYmplY3Q/LmNvbnRhaW5lci5tYXNrKSB7XG5cdFx0XHQvLyByZW1vdmUgdGhlIG1hc2ssIGlmIHNsb3Qgb2JqZWN0IGhhcyBhIG1hc2ssIGJ1dCBjdXJyZW50Q2xpcHBpbmdTbG90IGlzIHVuZGVmaW5lZFxuXHRcdFx0c2xvdE9iamVjdC5jb250YWluZXIubWFzayA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgY3VycmVudCBzbG90IGlzIHRoZSBlbmRpbmcgb25lIG9mIHRoZSBjdXJyZW50Q2xpcHBpbmdTbG90IG1hc2ssIHNldCBjdXJyZW50Q2xpcHBpbmdTbG90IHRvIHVuZGVmaW5lZFxuXHRcdGlmIChjdXJyZW50Q2xpcHBpbmdTbG90ICYmIChjdXJyZW50Q2xpcHBpbmdTbG90LnNsb3QuYXR0YWNobWVudCBhcyBDbGlwcGluZ0F0dGFjaG1lbnQpLmVuZFNsb3QgPT0gc2xvdC5kYXRhKSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRDbGlwcGluZ1Nsb3QgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gY2xlYW4gdXAgdW51c2VkIG1hc2tzXG5cdFx0aWYgKGxhc3QpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3MpIHtcblx0XHRcdFx0Y29uc3QgY2xpcHBpbmdTbG90VG9QaXhpTWFzayA9IHRoaXMuY2xpcHBpbmdTbG90VG9QaXhpTWFza3Nba2V5XTtcblx0XHRcdFx0aWYgKCghKGNsaXBwaW5nU2xvdFRvUGl4aU1hc2suc2xvdC5hdHRhY2htZW50IGluc3RhbmNlb2YgQ2xpcHBpbmdBdHRhY2htZW50KSB8fCAhY2xpcHBpbmdTbG90VG9QaXhpTWFzay5tYXNrQ29tcHV0ZWQpICYmIGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzaykge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQoY2xpcHBpbmdTbG90VG9QaXhpTWFzay5tYXNrKTtcblx0XHRcdFx0XHRtYXNrUG9vbC5mcmVlKGNsaXBwaW5nU2xvdFRvUGl4aU1hc2subWFzayk7XG5cdFx0XHRcdFx0Y2xpcHBpbmdTbG90VG9QaXhpTWFzay5tYXNrID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjdXJyZW50Q2xpcHBpbmdTbG90OiBTbG90c1RvQ2xpcHBpbmcgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgdHJhbnNmb3JtQXR0YWNobWVudHMgKCkge1xuXHRcdGNvbnN0IGN1cnJlbnREcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyYXdPcmRlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGN1cnJlbnREcmF3T3JkZXJbaV07XG5cblx0XHRcdHRoaXMudXBkYXRlQW5kU2V0UGl4aU1hc2soc2xvdCwgaSA9PT0gY3VycmVudERyYXdPcmRlci5sZW5ndGggLSAxKTtcblxuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90LCBjYWNoZURhdGEudmVydGljZXMsIDAsIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoXG5cdFx0XHRcdFx0XHRcdHNsb3QsXG5cdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCxcblx0XHRcdFx0XHRcdFx0Y2FjaGVEYXRhLnZlcnRpY2VzLFxuXHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzZXF1ZW5jZXMgdXZzIGFyZSBrbm93biBvbmx5IGFmdGVyIGNvbXB1dGVXb3JsZFZlcnRpY2VzIGlzIGludm9rZWRcblx0XHRcdFx0XHRpZiAoY2FjaGVEYXRhLnV2cy5sZW5ndGggPCBhdHRhY2htZW50LnV2cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNhY2hlRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQudXZzLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gbmVlZCB0byBjb3B5IGJlY2F1c2UgYXR0YWNobWVudHMgdXZzIGFyZSBzaGFyZWQgYW1vbmcgc2tlbGV0b25zIHVzaW5nIHRoZSBzYW1lIGF0bGFzXG5cdFx0XHRcdFx0ZmFzdENvcHkoKGF0dGFjaG1lbnQudXZzIGFzIEZsb2F0MzJBcnJheSkuYnVmZmVyLCBjYWNoZURhdGEudXZzLmJ1ZmZlcik7XG5cblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IHNsb3QuYm9uZS5za2VsZXRvbjtcblx0XHRcdFx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0XHRcdFx0Y29uc3Qgc2xvdENvbG9yID0gc2xvdC5jb2xvcjtcblxuXHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnRDb2xvciA9IGF0dGFjaG1lbnQuY29sb3I7XG5cblx0XHRcdFx0XHRjYWNoZURhdGEuY29sb3Iuc2V0KFxuXHRcdFx0XHRcdFx0c2tlbGV0b25Db2xvci5yICogc2xvdENvbG9yLnIgKiBhdHRhY2htZW50Q29sb3Iucixcblx0XHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuZyAqIHNsb3RDb2xvci5nICogYXR0YWNobWVudENvbG9yLmcsXG5cdFx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLmIgKiBzbG90Q29sb3IuYiAqIGF0dGFjaG1lbnRDb2xvci5iLFxuXHRcdFx0XHRcdFx0c2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiBhdHRhY2htZW50Q29sb3IuYSxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHNsb3QuZGFya0NvbG9yKSB7XG5cdFx0XHRcdFx0XHRjYWNoZURhdGEuZGFya0NvbG9yLnNldEZyb21Db2xvcihzbG90LmRhcmtDb2xvcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y2FjaGVEYXRhLnNraXBSZW5kZXIgPSBjYWNoZURhdGEuY2xpcHBlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IGF0dGFjaG1lbnQucmVnaW9uPy50ZXh0dXJlLnRleHR1cmUgfHwgVGV4dHVyZS5FTVBUWTtcblxuXHRcdFx0XHRcdGlmIChjYWNoZURhdGEudGV4dHVyZSAhPT0gdGV4dHVyZSkge1xuXHRcdFx0XHRcdFx0Y2FjaGVEYXRhLnRleHR1cmUgPSB0ZXh0dXJlO1xuXHRcdFx0XHRcdFx0dGhpcy5zcGluZVRleHR1cmVzRGlydHkgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChjbGlwcGVyLmlzQ2xpcHBpbmcoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVDbGlwcGluZ0RhdGEoY2FjaGVEYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFN0YXJ0KHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHR9XG5cdFx0Y2xpcHBlci5jbGlwRW5kKCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUNsaXBwaW5nRGF0YSAoY2FjaGVEYXRhOiBBdHRhY2htZW50Q2FjaGVEYXRhKSB7XG5cdFx0Y2FjaGVEYXRhLmNsaXBwZWQgPSB0cnVlO1xuXG5cdFx0Y2xpcHBlci5jbGlwVHJpYW5nbGVzVW5wYWNrZWQoXG5cdFx0XHRjYWNoZURhdGEudmVydGljZXMsXG5cdFx0XHRjYWNoZURhdGEuaW5kaWNlcyxcblx0XHRcdGNhY2hlRGF0YS5pbmRpY2VzLmxlbmd0aCxcblx0XHRcdGNhY2hlRGF0YS51dnMsXG5cdFx0KTtcblxuXHRcdGNvbnN0IHsgY2xpcHBlZFZlcnRpY2VzLCBjbGlwcGVkVVZzLCBjbGlwcGVkVHJpYW5nbGVzIH0gPSBjbGlwcGVyO1xuXG5cdFx0Y29uc3QgdmVydGljZXNDb3VudCA9IGNsaXBwZWRWZXJ0aWNlcy5sZW5ndGggLyAyO1xuXHRcdGNvbnN0IGluZGljZXNDb3VudCA9IGNsaXBwZWRUcmlhbmdsZXMubGVuZ3RoO1xuXG5cdFx0aWYgKCFjYWNoZURhdGEuY2xpcHBlZERhdGEpIHtcblx0XHRcdGNhY2hlRGF0YS5jbGlwcGVkRGF0YSA9IHtcblx0XHRcdFx0dmVydGljZXM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpLFxuXHRcdFx0XHR2ZXJ0ZXhDb3VudDogdmVydGljZXNDb3VudCxcblx0XHRcdFx0aW5kaWNlczogbmV3IFVpbnQxNkFycmF5KGluZGljZXNDb3VudCksXG5cdFx0XHRcdGluZGljZXNDb3VudCxcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc3BpbmVBdHRhY2htZW50c0RpcnR5ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBjbGlwcGVkRGF0YSA9IGNhY2hlRGF0YS5jbGlwcGVkRGF0YTtcblxuXHRcdGNvbnN0IHNpemVDaGFuZ2UgPSBjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCAhPT0gdmVydGljZXNDb3VudCB8fCBpbmRpY2VzQ291bnQgIT09IGNsaXBwZWREYXRhLmluZGljZXNDb3VudDtcblxuXHRcdGNhY2hlRGF0YS5za2lwUmVuZGVyID0gdmVydGljZXNDb3VudCA9PT0gMDtcblxuXHRcdGlmIChzaXplQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cblx0XHRcdGlmIChjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA8IHZlcnRpY2VzQ291bnQpIHtcblx0XHRcdFx0Ly8gYnVmZmVyIHJldXNlIVxuXHRcdFx0XHRjbGlwcGVkRGF0YS52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXNDb3VudCAqIDIpO1xuXHRcdFx0XHRjbGlwcGVkRGF0YS51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRpY2VzQ291bnQgKiAyKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsaXBwZWREYXRhLmluZGljZXMubGVuZ3RoIDwgaW5kaWNlc0NvdW50KSB7XG5cdFx0XHRcdGNsaXBwZWREYXRhLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlc0NvdW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB7IHZlcnRpY2VzLCB1dnMsIGluZGljZXMgfSA9IGNsaXBwZWREYXRhO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlc0NvdW50OyBpKyspIHtcblx0XHRcdHZlcnRpY2VzW2kgKiAyXSA9IGNsaXBwZWRWZXJ0aWNlc1tpICogMl07XG5cdFx0XHR2ZXJ0aWNlc1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVmVydGljZXNbKGkgKiAyKSArIDFdO1xuXG5cdFx0XHR1dnNbaSAqIDJdID0gY2xpcHBlZFVWc1soaSAqIDIpXTtcblx0XHRcdHV2c1soaSAqIDIpICsgMV0gPSBjbGlwcGVkVVZzWyhpICogMikgKyAxXTtcblx0XHR9XG5cblx0XHRjbGlwcGVkRGF0YS52ZXJ0ZXhDb3VudCA9IHZlcnRpY2VzQ291bnQ7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNDb3VudDsgaSsrKSB7XG5cdFx0XHRpZiAoaW5kaWNlc1tpXSAhPT0gY2xpcHBlZFRyaWFuZ2xlc1tpXSkge1xuXHRcdFx0XHR0aGlzLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdGluZGljZXNbaV0gPSBjbGlwcGVkVHJpYW5nbGVzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNsaXBwZWREYXRhLmluZGljZXNDb3VudCA9IGluZGljZXNDb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBlbnN1cmUgdGhhdCBhdHRhY2hlZCBjb250YWluZXJzIG1hcCBjb3JyZWN0bHkgdG8gdGhlaXIgc2xvdHNcblx0ICogYWxvbmcgd2l0aCB0aGVpciBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlLCBhbmQgdmlzaWJpbGl0eS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlU2xvdE9iamVjdHMgKCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0Y29uc3Qgc2xvdEF0dGFjaG1lbnQgPSB0aGlzLl9zbG90c09iamVjdFtpXTtcblxuXHRcdFx0aWYgKCFzbG90QXR0YWNobWVudCkgY29udGludWU7XG5cblx0XHRcdHRoaXMudXBkYXRlU2xvdE9iamVjdChzbG90QXR0YWNobWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTbG90T2JqZWN0IChzbG90QXR0YWNobWVudDogeyBzbG90OiBTbG90LCBjb250YWluZXI6IENvbnRhaW5lciB9KSB7XG5cdFx0Y29uc3QgeyBzbG90LCBjb250YWluZXIgfSA9IHNsb3RBdHRhY2htZW50O1xuXG5cdFx0Y29udGFpbmVyLnZpc2libGUgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlci5pbmNsdWRlcyhzbG90KTtcblxuXHRcdGlmIChjb250YWluZXIudmlzaWJsZSkge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHNsb3QuYm9uZTtcblxuXHRcdFx0Y29udGFpbmVyLnBvc2l0aW9uLnNldChib25lLndvcmxkWCwgYm9uZS53b3JsZFkpO1xuXG5cdFx0XHRjb250YWluZXIuc2NhbGUueCA9IGJvbmUuZ2V0V29ybGRTY2FsZVgoKTtcblx0XHRcdGNvbnRhaW5lci5zY2FsZS55ID0gYm9uZS5nZXRXb3JsZFNjYWxlWSgpO1xuXG5cdFx0XHRjb250YWluZXIucm90YXRpb24gPSBib25lLmdldFdvcmxkUm90YXRpb25YKCkgKiBERUdfVE9fUkFEO1xuXG5cdFx0XHRjb250YWluZXIuYWxwaGEgPSB0aGlzLnNrZWxldG9uLmNvbG9yLmEgKiBzbG90LmNvbG9yLmE7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRfZ2V0Q2FjaGVkRGF0YSAoc2xvdDogU2xvdCwgYXR0YWNobWVudDogUmVnaW9uQXR0YWNobWVudCB8IE1lc2hBdHRhY2htZW50KTogQXR0YWNobWVudENhY2hlRGF0YSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gfHwgdGhpcy5pbml0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdENhY2hlZERhdGEgKHNsb3Q6IFNsb3QsIGF0dGFjaG1lbnQ6IFJlZ2lvbkF0dGFjaG1lbnQgfCBNZXNoQXR0YWNobWVudCk6IEF0dGFjaG1lbnRDYWNoZURhdGEge1xuXHRcdGxldCB2ZXJ0aWNlczogRmxvYXQzMkFycmF5O1xuXG5cdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHR2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogWzAsIDEsIDIsIDAsIDIsIDNdLFxuXHRcdFx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkoYXR0YWNobWVudC51dnMubGVuZ3RoKSxcblx0XHRcdFx0Y29sb3I6IG5ldyBDb2xvcigxLCAxLCAxLCAxKSxcblx0XHRcdFx0ZGFya0NvbG9yOiBuZXcgQ29sb3IoMCwgMCwgMCwgMCksXG5cdFx0XHRcdGRhcmtUaW50OiB0aGlzLmRhcmtUaW50LFxuXHRcdFx0XHRza2lwUmVuZGVyOiBmYWxzZSxcblx0XHRcdFx0dGV4dHVyZTogYXR0YWNobWVudC5yZWdpb24/LnRleHR1cmUudGV4dHVyZSxcblx0XHRcdH07XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudENhY2hlRGF0YVtzbG90LmRhdGEuaW5kZXhdW2F0dGFjaG1lbnQubmFtZV0gPSB7XG5cdFx0XHRcdGlkOiBgJHtzbG90LmRhdGEuaW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWAsXG5cdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRjbGlwcGVkOiBmYWxzZSxcblx0XHRcdFx0aW5kaWNlczogYXR0YWNobWVudC50cmlhbmdsZXMsXG5cdFx0XHRcdHV2czogbmV3IEZsb2F0MzJBcnJheShhdHRhY2htZW50LnV2cy5sZW5ndGgpLFxuXHRcdFx0XHRjb2xvcjogbmV3IENvbG9yKDEsIDEsIDEsIDEpLFxuXHRcdFx0XHRkYXJrQ29sb3I6IG5ldyBDb2xvcigwLCAwLCAwLCAwKSxcblx0XHRcdFx0ZGFya1RpbnQ6IHRoaXMuZGFya1RpbnQsXG5cdFx0XHRcdHNraXBSZW5kZXI6IGZhbHNlLFxuXHRcdFx0XHR0ZXh0dXJlOiBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZS50ZXh0dXJlLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhW3Nsb3QuZGF0YS5pbmRleF1bYXR0YWNobWVudC5uYW1lXTtcblx0fVxuXG5cdHByb3RlY3RlZCBvblZpZXdVcGRhdGUgKCkge1xuXHRcdC8vIGluY3JlbWVudCBmcm9tIHRoZSAxMnRoIGJpdCFcblx0XHR0aGlzLl9kaWRWaWV3Q2hhbmdlVGljaysrO1xuXHRcdHRoaXMuX2JvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLmRpZFZpZXdVcGRhdGUpIHJldHVybjtcblx0XHR0aGlzLmRpZFZpZXdVcGRhdGUgPSB0cnVlO1xuXG5cdFx0Y29uc3QgcmVuZGVyR3JvdXAgPSB0aGlzLnJlbmRlckdyb3VwIHx8IHRoaXMucGFyZW50UmVuZGVyR3JvdXA7XG5cblx0XHRpZiAocmVuZGVyR3JvdXApIHtcblx0XHRcdHJlbmRlckdyb3VwLm9uQ2hpbGRWaWV3VXBkYXRlKHRoaXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGVidWc/LnJlbmRlckRlYnVnKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaGVzIGEgUGl4aUpTIGNvbnRhaW5lciB0byBhIHNwZWNpZmllZCBzbG90LiBUaGlzIHdpbGwgbWFwIHRoZSB3b3JsZCB0cmFuc2Zvcm0gb2YgdGhlIHNsb3RzIGJvbmVcblx0ICogdG8gdGhlIGF0dGFjaGVkIGNvbnRhaW5lci4gQSBjb250YWluZXIgY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gb25lIHNsb3QgYXQgYSB0aW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciB0byBhdHRhY2ggdG8gdGhlIHNsb3Rcblx0ICogQHBhcmFtIHNsb3RSZWYgLSBUaGUgc2xvdCBpZCBvciAgc2xvdCB0byBhdHRhY2ggdG9cblx0ICovXG5cdHB1YmxpYyBhZGRTbG90T2JqZWN0IChzbG90OiBudW1iZXIgfCBzdHJpbmcgfCBTbG90LCBjb250YWluZXI6IENvbnRhaW5lcikge1xuXHRcdHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3QpO1xuXG5cdFx0Ly8gbmVlZCB0byBjaGVjayBpbiBvbiB0aGUgY29udGFpbmVyIHRvby4uLlxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLl9zbG90c09iamVjdCkge1xuXHRcdFx0aWYgKHRoaXMuX3Nsb3RzT2JqZWN0W2ldPy5jb250YWluZXIgPT09IGNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVNsb3RPYmplY3QodGhpcy5fc2xvdHNPYmplY3RbaV0uc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW1vdmVTbG90T2JqZWN0KHNsb3QpO1xuXG5cdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gZmFsc2U7XG5cblx0XHQvLyBUT0RPIG9ubHkgYWRkIG9uY2U/P1xuXHRcdHRoaXMuYWRkQ2hpbGQoY29udGFpbmVyKTtcblxuXHRcdGNvbnN0IHNsb3RPYmplY3QgPSB7IGNvbnRhaW5lciwgc2xvdCB9O1xuXHRcdHRoaXMuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXSA9IHNsb3RPYmplY3Q7XG5cblx0XHR0aGlzLnVwZGF0ZVNsb3RPYmplY3Qoc2xvdE9iamVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIFBpeGlKUyBjb250YWluZXIgZnJvbSB0aGUgc2xvdCBpdCBpcyBhdHRhY2hlZCB0by5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXIgdG8gZGV0YWNoIGZyb20gdGhlIHNsb3Rcblx0ICogQHBhcmFtIHNsb3RPckNvbnRhaW5lciAtIFRoZSBjb250YWluZXIsIHNsb3QgaWQgb3Igc2xvdCB0byBkZXRhY2ggZnJvbVxuXHQgKi9cblx0cHVibGljIHJlbW92ZVNsb3RPYmplY3QgKHNsb3RPckNvbnRhaW5lcjogbnVtYmVyIHwgc3RyaW5nIHwgU2xvdCB8IENvbnRhaW5lcikge1xuXHRcdGxldCBjb250YWluZXJUb1JlbW92ZTogQ29udGFpbmVyIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNsb3RPckNvbnRhaW5lciBpbnN0YW5jZW9mIENvbnRhaW5lcikge1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIHRoaXMuX3Nsb3RzT2JqZWN0KSB7XG5cdFx0XHRcdGlmICh0aGlzLl9zbG90c09iamVjdFtpXT8uY29udGFpbmVyID09PSBzbG90T3JDb250YWluZXIpIHtcblx0XHRcdFx0XHR0aGlzLl9zbG90c09iamVjdFtpXSA9IG51bGw7XG5cblx0XHRcdFx0XHRjb250YWluZXJUb1JlbW92ZSA9IHNsb3RPckNvbnRhaW5lcjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IHNsb3QgPSB0aGlzLmdldFNsb3RGcm9tUmVmKHNsb3RPckNvbnRhaW5lcik7XG5cblx0XHRcdGNvbnRhaW5lclRvUmVtb3ZlID0gdGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdPy5jb250YWluZXI7XG5cdFx0XHR0aGlzLl9zbG90c09iamVjdFtzbG90LmRhdGEubmFtZV0gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXJUb1JlbW92ZSkge1xuXHRcdFx0dGhpcy5yZW1vdmVDaGlsZChjb250YWluZXJUb1JlbW92ZSk7XG5cblx0XHRcdGNvbnRhaW5lclRvUmVtb3ZlLmluY2x1ZGVJbkJ1aWxkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGNvbnRhaW5lciBhdHRhY2hlZCB0byBhIHNsb3QsIG9yIHVuZGVmaW5lZCBpZiBubyBjb250YWluZXIgaXMgYXR0YWNoZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzbG90UmVmIC0gVGhlIHNsb3QgaWQgb3Igc2xvdCB0byBnZXQgdGhlIGF0dGFjaG1lbnQgZnJvbVxuXHQgKiBAcmV0dXJucyAtIFRoZSBjb250YWluZXIgYXR0YWNoZWQgdG8gdGhlIHNsb3Rcblx0ICovXG5cdHB1YmxpYyBnZXRTbG90T2JqZWN0IChzbG90OiBudW1iZXIgfCBzdHJpbmcgfCBTbG90KSB7XG5cdFx0c2xvdCA9IHRoaXMuZ2V0U2xvdEZyb21SZWYoc2xvdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdPy5jb250YWluZXI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgdXBkYXRlQm91bmRzICgpIHtcblx0XHR0aGlzLl9ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5za2VsZXRvbkJvdW5kcyB8fD0gbmV3IFNrZWxldG9uQm91bmRzKCk7XG5cblx0XHRjb25zdCBza2VsZXRvbkJvdW5kcyA9IHRoaXMuc2tlbGV0b25Cb3VuZHM7XG5cblx0XHRza2VsZXRvbkJvdW5kcy51cGRhdGUodGhpcy5za2VsZXRvbiwgdHJ1ZSk7XG5cblx0XHRpZiAoc2tlbGV0b25Cb3VuZHMubWluWCA9PT0gSW5maW5pdHkpIHtcblx0XHRcdGlmICh0aGlzLmhhc05ldmVyVXBkYXRlZCkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBbmRBcHBseVN0YXRlKDApO1xuXHRcdFx0XHR0aGlzLl9ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXG5cdFx0XHRjb25zdCBkcmF3T3JkZXIgPSB0aGlzLnNrZWxldG9uLmRyYXdPcmRlcjtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuXHRcdFx0Ym91bmRzLmNsZWFyKCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZHJhd09yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gdGhpcy5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdGJvdW5kcy5hZGRWZXJ0ZXhEYXRhKGNhY2hlRGF0YS52ZXJ0aWNlcywgMCwgY2FjaGVEYXRhLnZlcnRpY2VzLmxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWCA9IHNrZWxldG9uQm91bmRzLm1pblg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWluWSA9IHNrZWxldG9uQm91bmRzLm1pblk7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WCA9IHNrZWxldG9uQm91bmRzLm1heFg7XG5cdFx0XHR0aGlzLl9ib3VuZHMubWF4WSA9IHNrZWxldG9uQm91bmRzLm1heFk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRhZGRCb3VuZHMgKGJvdW5kczogQm91bmRzKSB7XG5cdFx0Ym91bmRzLmFkZEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgdGhpcyBzcHJpdGUgcmVuZGVyYWJsZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZS5cblx0ICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHBhcmFtZXRlci4gQSBib29sZWFuIHdpbGwgYWN0IGFzIGlmIGFsbCBvcHRpb25zXG5cdCAqICBoYXZlIGJlZW4gc2V0IHRvIHRoYXQgdmFsdWVcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50ZXh0dXJlPWZhbHNlXSAtIFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRleHR1cmVTb3VyY2U9ZmFsc2VdIC0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIHRleHR1cmVTb3VyY2Ugb2YgdGhlIHJlbmRlcmFibGUgYXMgd2VsbFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc3Ryb3kgKG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zID0gZmFsc2UpIHtcblx0XHRzdXBlci5kZXN0cm95KG9wdGlvbnMpO1xuXG5cdFx0VGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy5pbnRlcm5hbFVwZGF0ZSwgdGhpcyk7XG5cdFx0dGhpcy5zdGF0ZS5jbGVhckxpc3RlbmVycygpO1xuXHRcdHRoaXMuZGVidWcgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5za2VsZXRvbiA9IG51bGwgYXMgYW55O1xuXHRcdHRoaXMuc3RhdGUgPSBudWxsIGFzIGFueTtcblx0XHQodGhpcy5fc2xvdHNPYmplY3QgYXMgYW55KSA9IG51bGw7XG5cdFx0dGhpcy5fbGFzdEF0dGFjaG1lbnRzLmxlbmd0aCA9IDA7XG5cdFx0dGhpcy5hdHRhY2htZW50Q2FjaGVEYXRhID0gbnVsbCBhcyBhbnk7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBwb2ludCBmcm9tIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgUGl4aSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHNrZWxldG9uVG9QaXhpV29ybGRDb29yZGluYXRlcyAocG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuXHRcdHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9pbnQsIHBvaW50KTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBpeGkgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwdWJsaWMgcGl4aVdvcmxkQ29vcmRpbmF0ZXNUb1NrZWxldG9uIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG5cdFx0dGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsIHBvaW50KTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBpeGkgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHBpeGlXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waXhpV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24ocG9pbnQpO1xuXHRcdGlmIChib25lLnBhcmVudCkge1xuXHRcdFx0Ym9uZS5wYXJlbnQud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVc2UgdGhpcyBtZXRob2QgdG8gaW5zdGFudGlhdGUgYSBTcGluZSBnYW1lIG9iamVjdC5cblx0ICogQmVmb3JlIGluc3RhbnRpYXRpbmcgYSBTcGluZSBnYW1lIG9iamVjdCwgdGhlIHNrZWxldG9uIChgLnNrZWxgIG9yIGAuanNvbmApIGFuZCB0aGUgYXRsYXMgdGV4dCBmaWxlcyBtdXN0IGJlIGxvYWRlZCBpbnRvIHRoZSBBc3NldHMuIEZvciBleGFtcGxlOlxuXHQgKiBgYGBcblx0ICogUElYSS5Bc3NldHMuYWRkKFwic2Fja0RhdGFcIiwgXCIuL2Fzc2V0cy9zYWNrLXByby5za2VsXCIpO1xuXHQgKiBQSVhJLkFzc2V0cy5hZGQoXCJzYWNrQXRsYXNcIiwgXCIuL2Fzc2V0cy9zYWNrLXBtYS5hdGxhc1wiKTtcblx0ICogYXdhaXQgUElYSS5Bc3NldHMubG9hZChbXCJzYWNrRGF0YVwiLCBcInNhY2tBdGxhc1wiXSk7XG5cdCAqIGBgYFxuXHQgKiBPbmNlIGEgU3BpbmUgZ2FtZSBvYmplY3QgaXMgY3JlYXRlZCwgaXRzIHNrZWxldG9uIGRhdGEgaXMgY2FjaGVkIGludG8ge0BsaW5rIENhY2hlfSB1c2luZyB0aGUga2V5OlxuXHQgKiBgJHtza2VsZXRvbkFzc2V0TmFtZX0tJHthdGxhc0Fzc2V0TmFtZX0tJHtvcHRpb25zPy5zY2FsZSA/PyAxfWBcblx0ICpcblx0ICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgU3BpbmUgZ2FtZSBvYmplY3QuIFNlZSB7QGxpbmsgU3BpbmVGcm9tT3B0aW9uc31cblx0ICogQHJldHVybnMge1NwaW5lfSBUaGUgU3BpbmUgZ2FtZSBvYmplY3QgaW5zdGFudGlhdGVkXG5cdCAqL1xuXHRzdGF0aWMgZnJvbSAoeyBza2VsZXRvbiwgYXRsYXMsIHNjYWxlID0gMSwgZGFya1RpbnQsIGF1dG9VcGRhdGUgPSB0cnVlIH06IFNwaW5lRnJvbU9wdGlvbnMpIHtcblx0XHRjb25zdCBjYWNoZUtleSA9IGAke3NrZWxldG9ufS0ke2F0bGFzfS0ke3NjYWxlfWA7XG5cblx0XHRpZiAoQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuXHRcdFx0cmV0dXJuIG5ldyBTcGluZShDYWNoZS5nZXQ8U2tlbGV0b25EYXRhPihjYWNoZUtleSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZWxldG9uQXNzZXQgPSBBc3NldHMuZ2V0PGFueSB8IFVpbnQ4QXJyYXk+KHNrZWxldG9uKTtcblxuXHRcdGNvbnN0IGF0bGFzQXNzZXQgPSBBc3NldHMuZ2V0PFRleHR1cmVBdGxhcz4oYXRsYXMpO1xuXHRcdGNvbnN0IGF0dGFjaG1lbnRMb2FkZXIgPSBuZXcgQXRsYXNBdHRhY2htZW50TG9hZGVyKGF0bGFzQXNzZXQpO1xuXHRcdGNvbnN0IHBhcnNlciA9IHNrZWxldG9uQXNzZXQgaW5zdGFuY2VvZiBVaW50OEFycmF5XG5cdFx0XHQ/IG5ldyBTa2VsZXRvbkJpbmFyeShhdHRhY2htZW50TG9hZGVyKVxuXHRcdFx0OiBuZXcgU2tlbGV0b25Kc29uKGF0dGFjaG1lbnRMb2FkZXIpO1xuXG5cdFx0cGFyc2VyLnNjYWxlID0gc2NhbGU7XG5cdFx0Y29uc3Qgc2tlbGV0b25EYXRhID0gcGFyc2VyLnJlYWRTa2VsZXRvbkRhdGEoc2tlbGV0b25Bc3NldCk7XG5cblx0XHRDYWNoZS5zZXQoY2FjaGVLZXksIHNrZWxldG9uRGF0YSk7XG5cblx0XHRyZXR1cm4gbmV3IFNwaW5lKHtcblx0XHRcdHNrZWxldG9uRGF0YSxcblx0XHRcdGRhcmtUaW50LFxuXHRcdFx0YXV0b1VwZGF0ZSxcblx0XHR9KTtcblx0fVxufVxuIl19
package/dist/SpinePipe.js CHANGED
@@ -86,6 +86,8 @@ export class SpinePipe {
86
86
  const drawOrder = spine.skeleton.drawOrder;
87
87
  const roundPixels = (this.renderer._roundPixels | spine._roundPixels);
88
88
  spine._validateAndTransformAttachments();
89
+ spine.spineAttachmentsDirty = false;
90
+ spine.spineTexturesDirty = false;
89
91
  for (let i = 0, n = drawOrder.length; i < n; i++) {
90
92
  const slot = drawOrder[i];
91
93
  const attachment = slot.getAttachment();
@@ -110,6 +112,8 @@ export class SpinePipe {
110
112
  updateRenderable(spine) {
111
113
  const gpuSpine = this.gpuSpineData[spine.uid];
112
114
  spine._validateAndTransformAttachments();
115
+ spine.spineAttachmentsDirty = false;
116
+ spine.spineTexturesDirty = false;
113
117
  const drawOrder = spine.skeleton.drawOrder;
114
118
  for (let i = 0, n = drawOrder.length; i < n; i++) {
115
119
  const slot = drawOrder[i];
@@ -141,4 +145,4 @@ export class SpinePipe {
141
145
  }
142
146
  }
143
147
  extensions.add(SpinePipe);
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lUGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixVQUFVLEVBQUUsYUFBYSxHQU16QixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBZ0M7SUFDdEQsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsS0FBSztJQUNSLENBQUMsRUFBRSxVQUFVO0lBQ2IsQ0FBQyxFQUFFLFFBQVE7Q0FDWCxDQUFDO0FBSUYsbUNBQW1DO0FBQ25DLE1BQU0sT0FBTyxTQUFTO0lBQ3JCLGNBQWM7SUFDZCxNQUFNLENBQUMsU0FBUyxHQUFHO1FBQ2xCLElBQUksRUFBRTtZQUNMLGFBQWEsQ0FBQyxVQUFVO1lBQ3hCLGFBQWEsQ0FBQyxXQUFXO1lBQ3pCLGFBQWEsQ0FBQyxXQUFXO1NBQ3pCO1FBQ0QsSUFBSSxFQUFFLE9BQU87S0FDSixDQUFDO0lBRVgsUUFBUSxDQUFXO0lBRVgsWUFBWSxHQUF3QyxFQUFFLENBQUM7SUFDOUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9DLENBQUM7SUFFaEgsWUFBYSxRQUFrQjtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCLENBQUUsS0FBWTtRQUMvQixLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUV6QyxnRkFBZ0Y7UUFDaEYsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElB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KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgSnVseSAyOCwgMjAyMy4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDIzLCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yXG4gKiBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFXG4gKiBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHtcblx0Y29sbGVjdEFsbFJlbmRlcmFibGVzLFxuXHRleHRlbnNpb25zLCBFeHRlbnNpb25UeXBlLFxuXHRJbnN0cnVjdGlvblNldCxcblx0dHlwZSBCTEVORF9NT0RFUyxcblx0dHlwZSBDb250YWluZXIsXG5cdHR5cGUgUmVuZGVyZXIsXG5cdHR5cGUgUmVuZGVyUGlwZSxcbn0gZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgeyBCYXRjaGFibGVTcGluZVNsb3QgfSBmcm9tICcuL0JhdGNoYWJsZVNwaW5lU2xvdC5qcyc7XG5pbXBvcnQgeyBTcGluZSB9IGZyb20gJy4vU3BpbmUuanMnO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQsIFJlZ2lvbkF0dGFjaG1lbnQgfSBmcm9tICdAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlJztcblxuY29uc3Qgc3BpbmVCbGVuZE1vZGVNYXA6IFJlY29yZDxudW1iZXIsIEJMRU5EX01PREVTPiA9IHtcblx0MDogJ25vcm1hbCcsXG5cdDE6ICdhZGQnLFxuXHQyOiAnbXVsdGlwbHknLFxuXHQzOiAnc2NyZWVuJ1xufTtcblxudHlwZSBHcHVTcGluZURhdGFFbGVtZW50ID0geyBzbG90QmF0Y2hlczogUmVjb3JkPHN0cmluZywgQmF0Y2hhYmxlU3BpbmVTbG90PiB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuZXhwb3J0IGNsYXNzIFNwaW5lUGlwZSBpbXBsZW1lbnRzIFJlbmRlclBpcGU8U3BpbmU+IHtcblx0LyoqIEBpZ25vcmUgKi9cblx0c3RhdGljIGV4dGVuc2lvbiA9IHtcblx0XHR0eXBlOiBbXG5cdFx0XHRFeHRlbnNpb25UeXBlLldlYkdMUGlwZXMsXG5cdFx0XHRFeHRlbnNpb25UeXBlLldlYkdQVVBpcGVzLFxuXHRcdFx0RXh0ZW5zaW9uVHlwZS5DYW52YXNQaXBlcyxcblx0XHRdLFxuXHRcdG5hbWU6ICdzcGluZScsXG5cdH0gYXMgY29uc3Q7XG5cblx0cmVuZGVyZXI6IFJlbmRlcmVyO1xuXG5cdHByaXZhdGUgZ3B1U3BpbmVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBHcHVTcGluZURhdGFFbGVtZW50PiA9IHt9O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVuZGVyYWJsZUJvdW5kID0gdGhpcy5kZXN0cm95UmVuZGVyYWJsZS5iaW5kKHRoaXMpIGFzIChyZW5kZXJhYmxlOiBDb250YWluZXIpID0+IHZvaWQ7XG5cblx0Y29uc3RydWN0b3IgKHJlbmRlcmVyOiBSZW5kZXJlcikge1xuXHRcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblx0fVxuXG5cdHZhbGlkYXRlUmVuZGVyYWJsZSAoc3BpbmU6IFNwaW5lKTogYm9vbGVhbiB7XG5cdFx0c3BpbmUuX3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblxuXHRcdC8vIGlmIHNwaW5lIGF0dGFjaG1lbnRzIGhhdmUgY2hhbmdlZCBvciBkZXN0cm95ZWQsIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgYmF0Y2ghXG5cdFx0aWYgKHNwaW5lLnNwaW5lQXR0YWNobWVudHNEaXJ0eSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlIHRleHR1cmVzIGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSBiYXRjaCwgYnV0IG9ubHkgaWYgdGhlIHRleHR1cmUgaXMgbm90IGFscmVhZHkgaW4gdGhlIGJhdGNoXG5cdFx0ZWxzZSBpZiAoc3BpbmUuc3BpbmVUZXh0dXJlc0RpcnR5KSB7XG5cdFx0XHQvLyBsb29wIHRocm91Z2ggYW5kIHNlZSBpZiB0aGUgdGV4dHVyZXMgaGF2ZSBjaGFuZ2VkLi5cblx0XHRcdGNvbnN0IGRyYXdPcmRlciA9IHNwaW5lLnNrZWxldG9uLmRyYXdPcmRlcjtcblx0XHRcdGNvbnN0IGdwdVNwaW5lID0gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQgfHwgYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gc3BpbmUuX2dldENhY2hlZERhdGEoc2xvdCwgYXR0YWNobWVudCk7XG5cdFx0XHRcdFx0Y29uc3QgYmF0Y2hhYmxlU3BpbmVTbG90ID0gZ3B1U3BpbmUuc2xvdEJhdGNoZXNbY2FjaGVEYXRhLmlkXTtcblxuXHRcdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBjYWNoZURhdGEudGV4dHVyZTtcblxuXHRcdFx0XHRcdGlmICh0ZXh0dXJlICE9PSBiYXRjaGFibGVTcGluZVNsb3QudGV4dHVyZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFiYXRjaGFibGVTcGluZVNsb3QuX2JhdGNoZXIuY2hlY2tBbmRVcGRhdGVUZXh0dXJlKGJhdGNoYWJsZVNwaW5lU2xvdCwgdGV4dHVyZSkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YWRkUmVuZGVyYWJsZSAoc3BpbmU6IFNwaW5lLCBpbnN0cnVjdGlvblNldDogSW5zdHJ1Y3Rpb25TZXQpIHtcblx0XHRjb25zdCBncHVTcGluZSA9IHRoaXMuX2dldFNwaW5lRGF0YShzcGluZSk7XG5cblx0XHRjb25zdCBiYXRjaGVyID0gdGhpcy5yZW5kZXJlci5yZW5kZXJQaXBlcy5iYXRjaDtcblxuXHRcdGNvbnN0IGRyYXdPcmRlciA9IHNwaW5lLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGNvbnN0IHJvdW5kUGl4ZWxzID0gKHRoaXMucmVuZGVyZXIuX3JvdW5kUGl4ZWxzIHwgc3BpbmUuX3JvdW5kUGl4ZWxzKSBhcyAwIHwgMTtcblxuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cdFx0XHRjb25zdCBibGVuZE1vZGUgPSBzcGluZUJsZW5kTW9kZU1hcFtzbG90LmRhdGEuYmxlbmRNb2RlXTtcblxuXHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSBzcGluZS5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0XHRcdFx0Y29uc3QgYmF0Y2hhYmxlU3BpbmVTbG90ID0gZ3B1U3BpbmUuc2xvdEJhdGNoZXNbY2FjaGVEYXRhLmlkXSB8fD0gbmV3IEJhdGNoYWJsZVNwaW5lU2xvdCgpO1xuXG5cdFx0XHRcdGJhdGNoYWJsZVNwaW5lU2xvdC5zZXREYXRhKFxuXHRcdFx0XHRcdHNwaW5lLFxuXHRcdFx0XHRcdGNhY2hlRGF0YSxcblx0XHRcdFx0XHRibGVuZE1vZGUsXG5cdFx0XHRcdFx0cm91bmRQaXhlbHNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoIWNhY2hlRGF0YS5za2lwUmVuZGVyKSB7XG5cdFx0XHRcdFx0YmF0Y2hlci5hZGRUb0JhdGNoKGJhdGNoYWJsZVNwaW5lU2xvdCwgaW5zdHJ1Y3Rpb25TZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRhaW5lckF0dGFjaG1lbnQgPSBzcGluZS5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdO1xuXG5cdFx0XHRpZiAoY29udGFpbmVyQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXIgPSBjb250YWluZXJBdHRhY2htZW50LmNvbnRhaW5lcjtcblxuXHRcdFx0XHRjb250YWluZXIuaW5jbHVkZUluQnVpbGQgPSB0cnVlO1xuXHRcdFx0XHRjb2xsZWN0QWxsUmVuZGVyYWJsZXMoY29udGFpbmVyLCBpbnN0cnVjdGlvblNldCwgdGhpcy5yZW5kZXJlcik7XG5cdFx0XHRcdGNvbnRhaW5lci5pbmNsdWRlSW5CdWlsZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZVJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSkge1xuXHRcdGNvbnN0IGdwdVNwaW5lID0gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXTtcblxuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHRjb25zdCBkcmF3T3JkZXIgPSBzcGluZS5za2VsZXRvbi5kcmF3T3JkZXI7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBkcmF3T3JkZXJbaV07XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpIHtcblx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gc3BpbmUuX2dldENhY2hlZERhdGEoc2xvdCwgYXR0YWNobWVudCk7XG5cblx0XHRcdFx0aWYgKCFjYWNoZURhdGEuc2tpcFJlbmRlcikge1xuXHRcdFx0XHRcdGNvbnN0IGJhdGNoYWJsZVNwaW5lU2xvdCA9IGdwdVNwaW5lLnNsb3RCYXRjaGVzW3NwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpLmlkXTtcblxuXHRcdFx0XHRcdGJhdGNoYWJsZVNwaW5lU2xvdC5fYmF0Y2hlcj8udXBkYXRlRWxlbWVudChiYXRjaGFibGVTcGluZVNsb3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZGVzdHJveVJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSkge1xuXHRcdHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF0gPSBudWxsIGFzIGFueTtcblx0XHRzcGluZS5vZmYoJ2Rlc3Ryb3llZCcsIHRoaXMuX2Rlc3Ryb3lSZW5kZXJhYmxlQm91bmQpO1xuXHR9XG5cblx0ZGVzdHJveSAoKSB7XG5cdFx0dGhpcy5ncHVTcGluZURhdGEgPSBudWxsIGFzIGFueTtcblx0XHR0aGlzLnJlbmRlcmVyID0gbnVsbCBhcyBhbnk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRTcGluZURhdGEgKHNwaW5lOiBTcGluZSk6IEdwdVNwaW5lRGF0YUVsZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdIHx8IHRoaXMuX2luaXRNZXNoRGF0YShzcGluZSk7XG5cdH1cblxuXHRwcml2YXRlIF9pbml0TWVzaERhdGEgKHNwaW5lOiBTcGluZSk6IEdwdVNwaW5lRGF0YUVsZW1lbnQge1xuXHRcdHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF0gPSB7IHNsb3RCYXRjaGVzOiB7fSB9O1xuXHRcdHNwaW5lLm9uKCdkZXN0cm95ZWQnLCB0aGlzLl9kZXN0cm95UmVuZGVyYWJsZUJvdW5kKTtcblx0XHRyZXR1cm4gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXTtcblx0fVxufVxuXG5leHRlbnNpb25zLmFkZChTcGluZVBpcGUpO1xuIl19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lUGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixVQUFVLEVBQUUsYUFBYSxHQU16QixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBZ0M7SUFDdEQsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsS0FBSztJQUNSLENBQUMsRUFBRSxVQUFVO0lBQ2IsQ0FBQyxFQUFFLFFBQVE7Q0FDWCxDQUFDO0FBSUYsbUNBQW1DO0FBQ25DLE1BQU0sT0FBTyxTQUFTO0lBQ3JCLGNBQWM7SUFDZCxNQUFNLENBQUMsU0FBUyxHQUFHO1FBQ2xCLElBQUksRUFBRTtZQUNMLGFBQWEsQ0FBQyxVQUFVO1lBQ3hCLGFBQWEsQ0FBQyxXQUFXO1lBQ3pCLGFBQWEsQ0FBQyxXQUFXO1NBQ3pCO1FBQ0QsSUFBSSxFQUFFLE9BQU87S0FDSixDQUFDO0lBRVgsUUFBUSxDQUFXO0lBRVgsWUFBWSxHQUF3QyxFQUFFLENBQUM7SUFDOUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9DLENBQUM7SUFFaEgsWUFBYSxRQUFrQjtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCLENBQUUsS0FBWTtRQUMvQixLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUV6QyxnRkFBZ0Y7UUFDaEYsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElB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QUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDOztBQUdGLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBKdWx5IDI4LCAyMDIzLiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjMsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3JcbiAqIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEVcbiAqIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQge1xuXHRjb2xsZWN0QWxsUmVuZGVyYWJsZXMsXG5cdGV4dGVuc2lvbnMsIEV4dGVuc2lvblR5cGUsXG5cdEluc3RydWN0aW9uU2V0LFxuXHR0eXBlIEJMRU5EX01PREVTLFxuXHR0eXBlIENvbnRhaW5lcixcblx0dHlwZSBSZW5kZXJlcixcblx0dHlwZSBSZW5kZXJQaXBlLFxufSBmcm9tICdwaXhpLmpzJztcbmltcG9ydCB7IEJhdGNoYWJsZVNwaW5lU2xvdCB9IGZyb20gJy4vQmF0Y2hhYmxlU3BpbmVTbG90LmpzJztcbmltcG9ydCB7IFNwaW5lIH0gZnJvbSAnLi9TcGluZS5qcyc7XG5pbXBvcnQgeyBNZXNoQXR0YWNobWVudCwgUmVnaW9uQXR0YWNobWVudCB9IGZyb20gJ0Blc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmUnO1xuXG5jb25zdCBzcGluZUJsZW5kTW9kZU1hcDogUmVjb3JkPG51bWJlciwgQkxFTkRfTU9ERVM+ID0ge1xuXHQwOiAnbm9ybWFsJyxcblx0MTogJ2FkZCcsXG5cdDI6ICdtdWx0aXBseScsXG5cdDM6ICdzY3JlZW4nXG59O1xuXG50eXBlIEdwdVNwaW5lRGF0YUVsZW1lbnQgPSB7IHNsb3RCYXRjaGVzOiBSZWNvcmQ8c3RyaW5nLCBCYXRjaGFibGVTcGluZVNsb3Q+IH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5leHBvcnQgY2xhc3MgU3BpbmVQaXBlIGltcGxlbWVudHMgUmVuZGVyUGlwZTxTcGluZT4ge1xuXHQvKiogQGlnbm9yZSAqL1xuXHRzdGF0aWMgZXh0ZW5zaW9uID0ge1xuXHRcdHR5cGU6IFtcblx0XHRcdEV4dGVuc2lvblR5cGUuV2ViR0xQaXBlcyxcblx0XHRcdEV4dGVuc2lvblR5cGUuV2ViR1BVUGlwZXMsXG5cdFx0XHRFeHRlbnNpb25UeXBlLkNhbnZhc1BpcGVzLFxuXHRcdF0sXG5cdFx0bmFtZTogJ3NwaW5lJyxcblx0fSBhcyBjb25zdDtcblxuXHRyZW5kZXJlcjogUmVuZGVyZXI7XG5cblx0cHJpdmF0ZSBncHVTcGluZURhdGE6IFJlY29yZDxzdHJpbmcsIEdwdVNwaW5lRGF0YUVsZW1lbnQ+ID0ge307XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZW5kZXJhYmxlQm91bmQgPSB0aGlzLmRlc3Ryb3lSZW5kZXJhYmxlLmJpbmQodGhpcykgYXMgKHJlbmRlcmFibGU6IENvbnRhaW5lcikgPT4gdm9pZDtcblxuXHRjb25zdHJ1Y3RvciAocmVuZGVyZXI6IFJlbmRlcmVyKSB7XG5cdFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXHR9XG5cblx0dmFsaWRhdGVSZW5kZXJhYmxlIChzcGluZTogU3BpbmUpOiBib29sZWFuIHtcblx0XHRzcGluZS5fdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXG5cdFx0Ly8gaWYgc3BpbmUgYXR0YWNobWVudHMgaGF2ZSBjaGFuZ2VkIG9yIGRlc3Ryb3llZCwgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSBiYXRjaCFcblx0XHRpZiAoc3BpbmUuc3BpbmVBdHRhY2htZW50c0RpcnR5KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBpZiB0aGUgdGV4dHVyZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlYnVpbGQgdGhlIGJhdGNoLCBidXQgb25seSBpZiB0aGUgdGV4dHVyZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgYmF0Y2hcblx0XHRlbHNlIGlmIChzcGluZS5zcGluZVRleHR1cmVzRGlydHkpIHtcblx0XHRcdC8vIGxvb3AgdGhyb3VnaCBhbmQgc2VlIGlmIHRoZSB0ZXh0dXJlcyBoYXZlIGNoYW5nZWQuLlxuXHRcdFx0Y29uc3QgZHJhd09yZGVyID0gc3BpbmUuc2tlbGV0b24uZHJhd09yZGVyO1xuXHRcdFx0Y29uc3QgZ3B1U3BpbmUgPSB0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSBzcGluZS5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0XHRcdFx0XHRjb25zdCBiYXRjaGFibGVTcGluZVNsb3QgPSBncHVTcGluZS5zbG90QmF0Y2hlc1tjYWNoZURhdGEuaWRdO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IGNhY2hlRGF0YS50ZXh0dXJlO1xuXG5cdFx0XHRcdFx0aWYgKHRleHR1cmUgIT09IGJhdGNoYWJsZVNwaW5lU2xvdC50ZXh0dXJlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWJhdGNoYWJsZVNwaW5lU2xvdC5fYmF0Y2hlci5jaGVja0FuZFVwZGF0ZVRleHR1cmUoYmF0Y2hhYmxlU3BpbmVTbG90LCB0ZXh0dXJlKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRhZGRSZW5kZXJhYmxlIChzcGluZTogU3BpbmUsIGluc3RydWN0aW9uU2V0OiBJbnN0cnVjdGlvblNldCkge1xuXHRcdGNvbnN0IGdwdVNwaW5lID0gdGhpcy5fZ2V0U3BpbmVEYXRhKHNwaW5lKTtcblxuXHRcdGNvbnN0IGJhdGNoZXIgPSB0aGlzLnJlbmRlcmVyLnJlbmRlclBpcGVzLmJhdGNoO1xuXG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc3BpbmUuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Y29uc3Qgcm91bmRQaXhlbHMgPSAodGhpcy5yZW5kZXJlci5fcm91bmRQaXhlbHMgfCBzcGluZS5fcm91bmRQaXhlbHMpIGFzIDAgfCAxO1xuXG5cdFx0c3BpbmUuX3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblxuXHRcdHNwaW5lLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IGZhbHNlO1xuXHRcdHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXHRcdFx0Y29uc3QgYmxlbmRNb2RlID0gc3BpbmVCbGVuZE1vZGVNYXBbc2xvdC5kYXRhLmJsZW5kTW9kZV07XG5cblx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCB8fCBhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpIHtcblx0XHRcdFx0Y29uc3QgY2FjaGVEYXRhID0gc3BpbmUuX2dldENhY2hlZERhdGEoc2xvdCwgYXR0YWNobWVudCk7XG5cdFx0XHRcdGNvbnN0IGJhdGNoYWJsZVNwaW5lU2xvdCA9IGdwdVNwaW5lLnNsb3RCYXRjaGVzW2NhY2hlRGF0YS5pZF0gfHw9IG5ldyBCYXRjaGFibGVTcGluZVNsb3QoKTtcblxuXHRcdFx0XHRiYXRjaGFibGVTcGluZVNsb3Quc2V0RGF0YShcblx0XHRcdFx0XHRzcGluZSxcblx0XHRcdFx0XHRjYWNoZURhdGEsXG5cdFx0XHRcdFx0YmxlbmRNb2RlLFxuXHRcdFx0XHRcdHJvdW5kUGl4ZWxzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKCFjYWNoZURhdGEuc2tpcFJlbmRlcikge1xuXHRcdFx0XHRcdGJhdGNoZXIuYWRkVG9CYXRjaChiYXRjaGFibGVTcGluZVNsb3QsIGluc3RydWN0aW9uU2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJBdHRhY2htZW50ID0gc3BpbmUuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXTtcblxuXHRcdFx0aWYgKGNvbnRhaW5lckF0dGFjaG1lbnQpIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gY29udGFpbmVyQXR0YWNobWVudC5jb250YWluZXI7XG5cblx0XHRcdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gdHJ1ZTtcblx0XHRcdFx0Y29sbGVjdEFsbFJlbmRlcmFibGVzKGNvbnRhaW5lciwgaW5zdHJ1Y3Rpb25TZXQsIHRoaXMucmVuZGVyZXIpO1xuXHRcdFx0XHRjb250YWluZXIuaW5jbHVkZUluQnVpbGQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR1cGRhdGVSZW5kZXJhYmxlIChzcGluZTogU3BpbmUpIHtcblx0XHRjb25zdCBncHVTcGluZSA9IHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF07XG5cblx0XHRzcGluZS5fdmFsaWRhdGVBbmRUcmFuc2Zvcm1BdHRhY2htZW50cygpO1xuXHRcdFxuXHRcdHNwaW5lLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IGZhbHNlO1xuXHRcdHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc3BpbmUuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQgfHwgYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGNvbnN0IGNhY2hlRGF0YSA9IHNwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdGlmICghY2FjaGVEYXRhLnNraXBSZW5kZXIpIHtcblx0XHRcdFx0XHRjb25zdCBiYXRjaGFibGVTcGluZVNsb3QgPSBncHVTcGluZS5zbG90QmF0Y2hlc1tzcGluZS5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KS5pZF07XG5cblx0XHRcdFx0XHRiYXRjaGFibGVTcGluZVNsb3QuX2JhdGNoZXI/LnVwZGF0ZUVsZW1lbnQoYmF0Y2hhYmxlU3BpbmVTbG90KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRlc3Ryb3lSZW5kZXJhYmxlIChzcGluZTogU3BpbmUpIHtcblx0XHR0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdID0gbnVsbCBhcyBhbnk7XG5cdFx0c3BpbmUub2ZmKCdkZXN0cm95ZWQnLCB0aGlzLl9kZXN0cm95UmVuZGVyYWJsZUJvdW5kKTtcblx0fVxuXG5cdGRlc3Ryb3kgKCkge1xuXHRcdHRoaXMuZ3B1U3BpbmVEYXRhID0gbnVsbCBhcyBhbnk7XG5cdFx0dGhpcy5yZW5kZXJlciA9IG51bGwgYXMgYW55O1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U3BpbmVEYXRhIChzcGluZTogU3BpbmUpOiBHcHVTcGluZURhdGFFbGVtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXSB8fCB0aGlzLl9pbml0TWVzaERhdGEoc3BpbmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdE1lc2hEYXRhIChzcGluZTogU3BpbmUpOiBHcHVTcGluZURhdGFFbGVtZW50IHtcblx0XHR0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdID0geyBzbG90QmF0Y2hlczoge30gfTtcblx0XHRzcGluZS5vbignZGVzdHJveWVkJywgdGhpcy5fZGVzdHJveVJlbmRlcmFibGVCb3VuZCk7XG5cdFx0cmV0dXJuIHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF07XG5cdH1cbn1cblxuZXh0ZW5zaW9ucy5hZGQoU3BpbmVQaXBlKTtcbiJdfQ==
@@ -24,4 +24,4 @@
24
24
 
25
25
  finalColor.a = outColor.a * vColor.a;
26
26
  finalColor.rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb;
27
- `}},Mi=class extends Ai{constructor(e){const t=bi({name:"dark-tint-batch",bits:[xi,Ii,vi(e),ki]}),s=wi({name:"dark-tint-batch",bits:[pi,Ti,yi(e),Si]});super({glProgram:t,gpuProgram:s,resources:{batchSamplers:Ci(e)}})}},er=null,tr=class extends li{geometry=new gi;shader=er||(er=new Mi(this.maxTextures));name=tr.extension.name;vertexSize=7;packAttributes(e,t,s,r,n){const h=n<<16|e.roundPixels&65535,o=e.transform,i=o.a,l=o.b,a=o.c,c=o.d,d=o.tx,f=o.ty,{positions:u,uvs:m}=e,p=e.color,w=(p>>24&255)/255,b=hi.shared.setValue(e.darkColor).premultiply(w,!0).toPremultiplied(1,!1),g=e.attributeOffset,x=g+e.attributeSize;for(let v=g;v<x;v++){const y=v*2,C=u[y],S=u[y+1];t[r++]=i*C+a*S+d,t[r++]=c*S+l*C+f,t[r++]=m[y],t[r++]=m[y+1],s[r++]=p,s[r++]=b,s[r++]=h}}packQuadAttributes(e,t,s,r,n){const h=e.texture,o=e.transform,i=o.a,l=o.b,a=o.c,c=o.d,d=o.tx,f=o.ty,u=e.bounds,m=u.maxX,p=u.minX,w=u.maxY,b=u.minY,g=h.uvs,x=e.color,v=e.darkColor,y=n<<16|e.roundPixels&65535;t[r+0]=i*p+a*b+d,t[r+1]=c*b+l*p+f,t[r+2]=g.x0,t[r+3]=g.y0,s[r+4]=x,s[r+5]=v,s[r+6]=y,t[r+7]=i*m+a*b+d,t[r+8]=c*b+l*m+f,t[r+9]=g.x1,t[r+10]=g.y1,s[r+11]=x,s[r+12]=v,s[r+13]=y,t[r+14]=i*m+a*w+d,t[r+15]=c*w+l*m+f,t[r+16]=g.x2,t[r+17]=g.y2,s[r+18]=x,s[r+19]=v,s[r+20]=y,t[r+21]=i*p+a*w+d,t[r+22]=c*w+l*p+f,t[r+23]=g.x3,t[r+24]=g.y3,s[r+25]=x,s[r+26]=v,s[r+27]=y}},sr=tr;E(sr,"extension",{type:[di.Batcher],name:"darkTint"}),ci.add(sr);import{collectAllRenderables as Yi,extensions as Xi,ExtensionType as ds}from"pixi.js";var Fi=class{indexOffset=0;attributeOffset=0;indexSize;attributeSize;batcherName="darkTint";topology="triangle-list";packAsQuad=!1;renderable;positions;indices;uvs;roundPixels;data;blendMode;darkTint;texture;transform;_textureId;_attributeStart;_indexStart;_batcher;_batch;get color(){const e=this.data.color,t=this.renderable.groupColor,s=this.renderable.groupAlpha;let r;const n=e.a*s*255;if(t!==16777215){const h=t>>16&255,o=t>>8&255,i=t&255,l=e.r*i,a=e.g*o,c=e.b*h;r=n<<24|c<<16|a<<8|l}else r=n<<24|e.b*255<<16|e.g*255<<8|e.r*255;return r}get darkColor(){const e=this.data.darkColor;return e.b*255<<16|e.g*255<<8|e.r*255}get groupTransform(){return this.renderable.groupTransform}setData(e,t,s,r){if(this.renderable=e,this.transform=e.groupTransform,this.data=t,t.clipped){const n=t.clippedData;this.indexSize=n.indicesCount,this.attributeSize=n.vertexCount,this.positions=n.vertices,this.indices=n.indices,this.uvs=n.uvs}else this.indexSize=t.indices.length,this.attributeSize=t.vertices.length/2,this.positions=t.vertices,this.indices=t.indices,this.uvs=t.uvs;this.texture=t.texture,this.roundPixels=r,this.blendMode=s,this.batcherName=t.darkTint?"darkTint":"default"}},Pi={0:"normal",1:"add",2:"multiply",3:"screen"},fs=class{renderer;gpuSpineData={};_destroyRenderableBound=this.destroyRenderable.bind(this);constructor(e){this.renderer=e}validateRenderable(e){if(e._validateAndTransformAttachments(),e.spineAttachmentsDirty)return!0;if(e.spineTexturesDirty){const t=e.skeleton.drawOrder,s=this.gpuSpineData[e.uid];for(let r=0,n=t.length;r<n;r++){const h=t[r],o=h.getAttachment();if(o instanceof O||o instanceof ae){const i=e._getCachedData(h,o),l=s.slotBatches[i.id],a=i.texture;if(a!==l.texture&&!l._batcher.checkAndUpdateTexture(l,a))return!0}}}return!1}addRenderable(e,t){const s=this._getSpineData(e),r=this.renderer.renderPipes.batch,n=e.skeleton.drawOrder,h=this.renderer._roundPixels|e._roundPixels;e._validateAndTransformAttachments();for(let o=0,i=n.length;o<i;o++){const l=n[o],a=l.getAttachment(),c=Pi[l.data.blendMode];if(a instanceof O||a instanceof ae){const f=e._getCachedData(l,a),u=s.slotBatches[f.id]||=new Fi;u.setData(e,f,c,h),f.skipRender||r.addToBatch(u,t)}const d=e._slotsObject[l.data.name];if(d){const f=d.container;f.includeInBuild=!0,Yi(f,t,this.renderer),f.includeInBuild=!1}}}updateRenderable(e){const t=this.gpuSpineData[e.uid];e._validateAndTransformAttachments();const s=e.skeleton.drawOrder;for(let r=0,n=s.length;r<n;r++){const h=s[r],o=h.getAttachment();if((o instanceof O||o instanceof ae)&&!e._getCachedData(h,o).skipRender){const l=t.slotBatches[e._getCachedData(h,o).id];l._batcher?.updateElement(l)}}}destroyRenderable(e){this.gpuSpineData[e.uid]=null,e.off("destroyed",this._destroyRenderableBound)}destroy(){this.gpuSpineData=null,this.renderer=null}_getSpineData(e){return this.gpuSpineData[e.uid]||this._initMeshData(e)}_initMeshData(e){return this.gpuSpineData[e.uid]={slotBatches:{}},e.on("destroyed",this._destroyRenderableBound),this.gpuSpineData[e.uid]}};E(fs,"extension",{type:[ds.WebGLPipes,ds.WebGPUPipes,ds.CanvasPipes],name:"spine"}),Xi.add(fs);import{Assets as rr,Cache as us,Container as Bi,DEG_TO_RAD as Ri,fastCopy as Ei,Graphics as Di,Texture as Li,Ticker as ot,ViewContainer as Vi}from"pixi.js";var lt=new Re;Ae.yDown=!0;var Fe=new it,ir=new Me(()=>new Di),ms=class extends Vi{batched=!0;buildId=0;renderPipeId="spine";_didSpineUpdate=!1;beforeUpdateWorldTransforms=()=>{};afterUpdateWorldTransforms=()=>{};skeleton;state;skeletonBounds;darkTint=!1;_debug=void 0;_slotsObject=Object.create(null);clippingSlotToPixiMasks=Object.create(null);getSlotFromRef(e){let t;if(typeof e=="number"?t=this.skeleton.slots[e]:typeof e=="string"?t=this.skeleton.findSlot(e):t=e,!t)throw new Error(`No slot found with the given slot reference: ${e}`);return t}spineAttachmentsDirty=!0;spineTexturesDirty=!0;_lastAttachments=[];_stateChanged=!0;attachmentCacheData=[];get debug(){return this._debug}set debug(e){this._debug&&this._debug.unregisterSpine(this),e&&e.registerSpine(this),this._debug=e}_autoUpdate=!0;get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e?ot.shared.add(this.internalUpdate,this):ot.shared.remove(this.internalUpdate,this),this._autoUpdate=e}hasNeverUpdated=!0;constructor(e){e instanceof _e&&(e={skeletonData:e}),super();const t=e instanceof _e?e:e.skeletonData;this.skeleton=new Ae(t),this.state=new qt(new Ls(t)),this.autoUpdate=e?.autoUpdate??!0,this.darkTint=e?.darkTint===void 0?this.skeleton.slots.some(r=>!!r.data.darkColor):e?.darkTint;const s=this.skeleton.slots;for(let r=0;r<s.length;r++)this.attachmentCacheData[r]=Object.create(null)}update(e){this.internalUpdate(0,e)}internalUpdate(e,t){this._updateAndApplyState(t??ot.shared.deltaMS/1e3)}get bounds(){return this._boundsDirty&&this.updateBounds(),this._bounds}setBonePosition(e,t){const s=e;if(typeof e=="string"&&(e=this.skeleton.findBone(e)),!e)throw Error(`Cant set bone position, bone ${String(s)} not found`);if(lt.set(t.x,t.y),e.parent){const r=e.parent.worldToLocal(lt);e.x=r.x,e.y=-r.y}else e.x=lt.x,e.y=lt.y}getBonePosition(e,t){const s=e;return typeof e=="string"&&(e=this.skeleton.findBone(e)),e?(t||(t={x:0,y:0}),t.x=e.worldX,t.y=e.worldY,t):(console.error(`Cant set bone position! Bone ${String(s)} not found`),t)}_updateAndApplyState(e){this.hasNeverUpdated=!1,this.state.update(e),this.skeleton.update(e);const{skeleton:t}=this;this.state.apply(t),this.beforeUpdateWorldTransforms(this),t.updateWorldTransform(2),this.afterUpdateWorldTransforms(this),this.updateSlotObjects(),this._stateChanged=!0,this._boundsDirty=!0,this.onViewUpdate()}_validateAndTransformAttachments(){this._stateChanged&&(this._stateChanged=!1,this.validateAttachments(),this.transformAttachments())}validateAttachments(){const e=this.skeleton.drawOrder,t=this._lastAttachments;let s=0,r=!1;for(let n=0;n<e.length;n++){const o=e[n].getAttachment();o&&(o!==t[s]&&(r=!0,t[s]=o),s++)}s!==t.length&&(r=!0,t.length=s),this.spineAttachmentsDirty=r}updateAndSetPixiMask(e,t){const s=e.attachment;if(s&&s instanceof be){const h=this.clippingSlotToPixiMasks[e.data.name]||={slot:e,vertices:new Array};h.maskComputed=!1,this.currentClippingSlot=this.clippingSlotToPixiMasks[e.data.name];return}let r=this.currentClippingSlot,n=this._slotsObject[e.data.name];if(r&&n){let h=r.slot,o=h.attachment,i=r.mask;if(i||(i=ir.obtain(),r.mask=i,this.addChild(i)),!r.maskComputed){r.maskComputed=!0;const l=o.worldVerticesLength,a=r.vertices;o.computeWorldVertices(h,0,l,a,0,2),i.clear().poly(a).stroke({width:0}).fill({alpha:.25})}n.container.mask=i}else n?.container.mask&&(n.container.mask=null);if(r&&r.slot.attachment.endSlot==e.data&&(this.currentClippingSlot=void 0),t)for(const h in this.clippingSlotToPixiMasks){const o=this.clippingSlotToPixiMasks[h];(!(o.slot.attachment instanceof be)||!o.maskComputed)&&o.mask&&(this.removeChild(o.mask),ir.free(o.mask),o.mask=void 0)}}currentClippingSlot;transformAttachments(){const e=this.skeleton.drawOrder;for(let t=0;t<e.length;t++){const s=e[t];this.updateAndSetPixiMask(s,t===e.length-1);const r=s.getAttachment();if(r){if(r instanceof ae||r instanceof O){const n=this._getCachedData(s,r);r instanceof O?r.computeWorldVertices(s,n.vertices,0,2):r.computeWorldVertices(s,0,r.worldVerticesLength,n.vertices,0,2),n.uvs.length<r.uvs.length&&(n.uvs=new Float32Array(r.uvs.length)),Ei(r.uvs.buffer,n.uvs.buffer);const o=s.bone.skeleton.color,i=s.color,l=r.color;n.color.set(o.r*i.r*l.r,o.g*i.g*l.g,o.b*i.b*l.b,o.a*i.a*l.a),s.darkColor&&n.darkColor.setFromColor(s.darkColor),n.skipRender=n.clipped=!1;const a=r.region?.texture.texture||Li.EMPTY;n.texture!==a&&(n.texture=a,this.spineTexturesDirty=!0),Fe.isClipping()&&this.updateClippingData(n)}else if(r instanceof be){Fe.clipStart(s,r);continue}}Fe.clipEndWithSlot(s)}Fe.clipEnd()}updateClippingData(e){e.clipped=!0,Fe.clipTrianglesUnpacked(e.vertices,e.indices,e.indices.length,e.uvs);const{clippedVertices:t,clippedUVs:s,clippedTriangles:r}=Fe,n=t.length/2,h=r.length;e.clippedData||(e.clippedData={vertices:new Float32Array(n*2),uvs:new Float32Array(n*2),vertexCount:n,indices:new Uint16Array(h),indicesCount:h},this.spineAttachmentsDirty=!0);const o=e.clippedData,i=o.vertexCount!==n||h!==o.indicesCount;e.skipRender=n===0,i&&(this.spineAttachmentsDirty=!0,o.vertexCount<n&&(o.vertices=new Float32Array(n*2),o.uvs=new Float32Array(n*2)),o.indices.length<h&&(o.indices=new Uint16Array(h)));const{vertices:l,uvs:a,indices:c}=o;for(let d=0;d<n;d++)l[d*2]=t[d*2],l[d*2+1]=t[d*2+1],a[d*2]=s[d*2],a[d*2+1]=s[d*2+1];o.vertexCount=n;for(let d=0;d<h;d++)c[d]!==r[d]&&(this.spineAttachmentsDirty=!0,c[d]=r[d]);o.indicesCount=h}updateSlotObjects(){for(const e in this._slotsObject){const t=this._slotsObject[e];t&&this.updateSlotObject(t)}}updateSlotObject(e){const{slot:t,container:s}=e;if(s.visible=this.skeleton.drawOrder.includes(t),s.visible){const r=t.bone;s.position.set(r.worldX,r.worldY),s.scale.x=r.getWorldScaleX(),s.scale.y=r.getWorldScaleY(),s.rotation=r.getWorldRotationX()*Ri,s.alpha=this.skeleton.color.a*t.color.a}}_getCachedData(e,t){return this.attachmentCacheData[e.data.index][t.name]||this.initCachedData(e,t)}initCachedData(e,t){let s;return t instanceof O?(s=new Float32Array(8),this.attachmentCacheData[e.data.index][t.name]={id:`${e.data.index}-${t.name}`,vertices:s,clipped:!1,indices:[0,1,2,0,2,3],uvs:new Float32Array(t.uvs.length),color:new V(1,1,1,1),darkColor:new V(0,0,0,0),darkTint:this.darkTint,skipRender:!1,texture:t.region?.texture.texture}):(s=new Float32Array(t.worldVerticesLength),this.attachmentCacheData[e.data.index][t.name]={id:`${e.data.index}-${t.name}`,vertices:s,clipped:!1,indices:t.triangles,uvs:new Float32Array(t.uvs.length),color:new V(1,1,1,1),darkColor:new V(0,0,0,0),darkTint:this.darkTint,skipRender:!1,texture:t.region?.texture.texture}),this.attachmentCacheData[e.data.index][t.name]}onViewUpdate(){if(this._didViewChangeTick++,this._boundsDirty=!0,this.didViewUpdate)return;this.didViewUpdate=!0;const e=this.renderGroup||this.parentRenderGroup;e&&e.onChildViewUpdate(this),this.debug?.renderDebug(this)}addSlotObject(e,t){e=this.getSlotFromRef(e);for(const r in this._slotsObject)this._slotsObject[r]?.container===t&&this.removeSlotObject(this._slotsObject[r].slot);this.removeSlotObject(e),t.includeInBuild=!1,this.addChild(t);const s={container:t,slot:e};this._slotsObject[e.data.name]=s,this.updateSlotObject(s)}removeSlotObject(e){let t;if(e instanceof Bi){for(const s in this._slotsObject)if(this._slotsObject[s]?.container===e){this._slotsObject[s]=null,t=e;break}}else{const s=this.getSlotFromRef(e);t=this._slotsObject[s.data.name]?.container,this._slotsObject[s.data.name]=null}t&&(this.removeChild(t),t.includeInBuild=!0)}getSlotObject(e){return e=this.getSlotFromRef(e),this._slotsObject[e.data.name]?.container}updateBounds(){this._boundsDirty=!1,this.skeletonBounds||=new ls;const e=this.skeletonBounds;if(e.update(this.skeleton,!0),e.minX===1/0){this.hasNeverUpdated&&(this._updateAndApplyState(0),this._boundsDirty=!1),this._validateAndTransformAttachments();const t=this.skeleton.drawOrder,s=this._bounds;s.clear();for(let r=0;r<t.length;r++){const n=t[r],h=n.getAttachment();if(h&&(h instanceof O||h instanceof ae)){const o=this._getCachedData(n,h);s.addVertexData(o.vertices,0,o.vertices.length)}}}else this._bounds.minX=e.minX,this._bounds.minY=e.minY,this._bounds.maxX=e.maxX,this._bounds.maxY=e.maxY}addBounds(e){e.addBounds(this.bounds)}destroy(e=!1){super.destroy(e),ot.shared.remove(this.internalUpdate,this),this.state.clearListeners(),this.debug=void 0,this.skeleton=null,this.state=null,this._slotsObject=null,this._lastAttachments.length=0,this.attachmentCacheData=null}skeletonToPixiWorldCoordinates(e){this.worldTransform.apply(e,e)}pixiWorldCoordinatesToSkeleton(e){this.worldTransform.applyInverse(e,e)}pixiWorldCoordinatesToBone(e,t){this.pixiWorldCoordinatesToSkeleton(e),t.parent?t.parent.worldToLocal(e):t.worldToLocal(e)}static from({skeleton:e,atlas:t,scale:s=1,darkTint:r,autoUpdate:n=!0}){const h=`${e}-${t}-${s}`;if(us.has(h))return new ms(us.get(h));const o=rr.get(e),i=rr.get(t),l=new Us(i),a=o instanceof Uint8Array?new js(l):new Ks(l);a.scale=s;const c=a.readSkeletonData(o);return us.set(h,c),new ms({skeletonData:c,darkTint:r,autoUpdate:n})}};import{Container as gs,Graphics as de,Text as _i}from"pixi.js";var Oi=class{registeredSpines=new Map;drawMeshHull=!0;drawMeshTriangles=!0;drawBones=!0;drawPaths=!0;drawBoundingBoxes=!0;drawClipping=!0;drawRegionAttachments=!0;drawEvents=!0;lineWidth=1;regionAttachmentsColor=30975;meshHullColor=30975;meshTrianglesColor=16763904;clippingPolygonColor=16711935;boundingBoxesRectColor=65280;boundingBoxesPolygonColor=65280;boundingBoxesCircleColor=65280;pathsCurveColor=16711680;pathsLineColor=16711935;skeletonXYColor=16711680;bonesColor=61132;eventFontSize=24;eventFontColor=0;registerSpine(e){if(this.registeredSpines.has(e)){console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!",e);return}const t={parentDebugContainer:new gs,bones:new gs,skeletonXY:new de,regionAttachmentsShape:new de,meshTrianglesLine:new de,meshHullLine:new de,clippingPolygon:new de,boundingBoxesRect:new de,boundingBoxesCircle:new de,boundingBoxesPolygon:new de,pathsCurve:new de,pathsLine:new de,eventText:new gs,eventCallback:{event:(s,r)=>{if(this.drawEvents){const n=Math.abs(e.scale.x||e.scale.y||1),h=new _i({text:r.data.name,style:{fontSize:this.eventFontSize/n,fill:this.eventFontColor,fontFamily:"monospace"}});h.scale.x=Math.sign(e.scale.x),h.anchor.set(.5),t.eventText.addChild(h),setTimeout(()=>{h.destroyed||h.destroy()},250)}}}};t.parentDebugContainer.addChild(t.bones),t.parentDebugContainer.addChild(t.skeletonXY),t.parentDebugContainer.addChild(t.regionAttachmentsShape),t.parentDebugContainer.addChild(t.meshTrianglesLine),t.parentDebugContainer.addChild(t.meshHullLine),t.parentDebugContainer.addChild(t.clippingPolygon),t.parentDebugContainer.addChild(t.boundingBoxesRect),t.parentDebugContainer.addChild(t.boundingBoxesCircle),t.parentDebugContainer.addChild(t.boundingBoxesPolygon),t.parentDebugContainer.addChild(t.pathsCurve),t.parentDebugContainer.addChild(t.pathsLine),t.parentDebugContainer.addChild(t.eventText),t.parentDebugContainer.zIndex=9999999,t.parentDebugContainer.accessibleChildren=!1,t.parentDebugContainer.eventMode="none",t.parentDebugContainer.interactiveChildren=!1,e.addChild(t.parentDebugContainer),e.state.addListener(t.eventCallback),this.registeredSpines.set(e,t)}renderDebug(e){this.registeredSpines.has(e)||this.registerSpine(e);const t=this.registeredSpines.get(e);if(!t)return;e.addChild(t.parentDebugContainer),t.skeletonXY.clear(),t.regionAttachmentsShape.clear(),t.meshTrianglesLine.clear(),t.meshHullLine.clear(),t.clippingPolygon.clear(),t.boundingBoxesRect.clear(),t.boundingBoxesCircle.clear(),t.boundingBoxesPolygon.clear(),t.pathsCurve.clear(),t.pathsLine.clear();for(let n=t.bones.children.length;n>0;n--)t.bones.children[n-1].destroy({children:!0,texture:!0,textureSource:!0});const s=Math.abs(e.scale.x||e.scale.y||1),r=this.lineWidth/s;if(this.drawBones&&this.drawBonesFunc(e,t,r,s),this.drawPaths&&this.drawPathsFunc(e,t,r),this.drawBoundingBoxes&&this.drawBoundingBoxesFunc(e,t,r),this.drawClipping&&this.drawClippingFunc(e,t,r),(this.drawMeshHull||this.drawMeshTriangles)&&this.drawMeshHullAndMeshTriangles(e,t,r),this.drawRegionAttachments&&this.drawRegionAttachmentsFunc(e,t,r),this.drawEvents)for(const n of t.eventText.children)n.alpha-=.05,n.y-=2}drawBonesFunc(e,t,s,r){const n=e.skeleton,h=n.x,o=n.y,i=n.bones;t.skeletonXY.strokeStyle={width:s,color:this.skeletonXYColor};for(let a=0,c=i.length;a<c;a++){const d=i[a],f=d.data.length,u=h+d.worldX,m=o+d.worldY,p=h+f*d.a+d.worldX,w=o+f*d.b+d.worldY;if(d.data.name==="root"||d.data.parent===null)continue;const b=Math.abs(u-p),g=Math.abs(m-w),x=Math.pow(b,2),v=g,y=Math.pow(g,2),C=Math.sqrt(x+y),S=Math.pow(C,2),A=Math.PI/180,M=Math.acos((S+y-x)/(2*v*C))||0;if(C===0)continue;const T=new de;t.bones.addChild(T);const F=C/50/r;T.context.poly([0,0,0-F,C-F*3,0,C-F,0+F,C-F*3]).fill(this.bonesColor),T.x=u,T.y=m,T.pivot.y=C;let X=0;u<p&&m<w?X=-M+180*A:u>p&&m<w?X=180*A+M:u>p&&m>w?X=-M:u<p&&m>w?X=M:m===w&&u<p?X=90*A:m===w&&u>p?X=-90*A:u===p&&m<w?X=180*A:u===p&&m>w&&(X=0),T.rotation=X,T.circle(0,C,F*1.2).fill({color:0,alpha:.6}).stroke({width:s+F/2.4,color:this.bonesColor})}const l=s*3;t.skeletonXY.context.moveTo(h-l,o-l).lineTo(h+l,o+l).moveTo(h+l,o-l).lineTo(h-l,o+l).stroke()}drawRegionAttachmentsFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h],l=i.getAttachment();if(l===null||!(l instanceof O))continue;const a=l,c=new Float32Array(8);a.computeWorldVertices(i,c,0,2),t.regionAttachmentsShape.poly(Array.from(c.slice(0,8)))}t.regionAttachmentsShape.stroke({color:this.regionAttachmentsColor,width:s})}drawMeshHullAndMeshTriangles(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof ae))continue;const a=l,c=new Float32Array(a.worldVerticesLength),d=a.triangles;let f=a.hullLength;if(a.computeWorldVertices(i,0,a.worldVerticesLength,c,0,2),this.drawMeshTriangles)for(let u=0,m=d.length;u<m;u+=3){const p=d[u]*2,w=d[u+1]*2,b=d[u+2]*2;t.meshTrianglesLine.context.moveTo(c[p],c[p+1]).lineTo(c[w],c[w+1]).lineTo(c[b],c[b+1])}if(this.drawMeshHull&&f>0){f=(f>>1)*2;let u=c[f-2],m=c[f-1];for(let p=0,w=f;p<w;p+=2){const b=c[p],g=c[p+1];t.meshHullLine.context.moveTo(b,g).lineTo(u,m),u=b,m=g}}}t.meshHullLine.stroke({width:s,color:this.meshHullColor}),t.meshTrianglesLine.stroke({width:s,color:this.meshTrianglesColor})}drawClippingFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof be))continue;const a=l,c=a.worldVerticesLength,d=new Float32Array(c);a.computeWorldVertices(i,0,c,d,0,2),t.clippingPolygon.poly(Array.from(d))}t.clippingPolygon.stroke({width:s,color:this.clippingPolygonColor,alpha:1})}drawBoundingBoxesFunc(e,t,s){const r=new ls;r.update(e.skeleton,!0),r.minX!==1/0&&t.boundingBoxesRect.rect(r.minX,r.minY,r.getWidth(),r.getHeight()).stroke({width:s,color:this.boundingBoxesRectColor});const n=r.polygons,h=(o,i,l)=>{if(l<3)throw new Error("Polygon must contain at least 3 vertices");const a=[],c=s*2;for(let d=0,f=o.length;d<f;d+=2){const u=o[d],m=o[d+1];t.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor),t.boundingBoxesCircle.drawCircle(u,m,c),t.boundingBoxesCircle.fill(0),t.boundingBoxesCircle.circle(u,m,c).fill({color:this.boundingBoxesCircleColor}),a.push(u,m)}t.boundingBoxesPolygon.poly(a).fill({color:this.boundingBoxesPolygonColor,alpha:.1}).stroke({width:s,color:this.boundingBoxesPolygonColor})};for(let o=0,i=n.length;o<i;o++){const l=n[o];h(l,0,l.length)}}drawPathsFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof ke))continue;const a=l;let c=a.worldVerticesLength;const d=new Float32Array(c);a.computeWorldVertices(i,0,c,d,0,2);let f=d[2],u=d[3],m=0,p=0;if(a.closed){const w=d[0],b=d[1],g=d[c-2],x=d[c-1];m=d[c-4],p=d[c-3],t.pathsCurve.moveTo(f,u),t.pathsCurve.bezierCurveTo(w,b,g,x,m,p),t.pathsLine.moveTo(f,u),t.pathsLine.lineTo(w,b),t.pathsLine.moveTo(m,p),t.pathsLine.lineTo(g,x)}c-=4;for(let w=4;w<c;w+=6){const b=d[w],g=d[w+1],x=d[w+2],v=d[w+3];m=d[w+4],p=d[w+5],t.pathsCurve.moveTo(f,u),t.pathsCurve.bezierCurveTo(b,g,x,v,m,p),t.pathsLine.moveTo(f,u),t.pathsLine.lineTo(b,g),t.pathsLine.moveTo(m,p),t.pathsLine.lineTo(x,v),f=m,u=p}}t.pathsCurve.stroke({width:s,color:this.pathsCurveColor}),t.pathsLine.stroke({width:s,color:this.pathsLineColor})}unregisterSpine(e){this.registeredSpines.has(e)||console.warn("SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!",e);const t=this.registeredSpines.get(e);t&&(e.state.removeListener(t.eventCallback),t.parentDebugContainer.destroy({textureSource:!0,children:!0,texture:!0}),this.registeredSpines.delete(e))}};export{It as AlphaTimeline,ze as Animation,qt as AnimationState,xr as AnimationStateAdapter,Ls as AnimationStateData,yr as AssetManagerBase,Us as AtlasAttachmentLoader,ut as Attachment,Ce as AttachmentTimeline,Js as BinaryInput,rt as BlendMode,Qt as Bone,Kt as BoneData,Ke as BoundingBoxAttachment,Ds as CURRENT,be as ClippingAttachment,V as Color,Ve as ConstraintData,he as CurveTimeline,ne as CurveTimeline1,Ge as CurveTimeline2,mr as DebugUtils,Xt as DeformTimeline,qs as Downloader,Se as DrawOrderTimeline,Zt as Event,es as EventData,Rs as EventQueue,De as EventTimeline,se as EventType,Wt as FIRST,br as FakeTexture,Je as HOLD_FIRST,Es as HOLD_MIX,zt as HOLD_SUBSEQUENT,Ws as IkConstraint,ts as IkConstraintData,Ft as IkConstraintTimeline,Le as Inherit,kt as InheritTimeline,fr as IntSet,Ss as Interpolation,P as MathUtils,ae as MeshAttachment,Ms as MixBlend,Ys as MixDirection,ke as PathAttachment,Xe as PathConstraint,ss as PathConstraintData,Et as PathConstraintMixTimeline,Bt as PathConstraintPositionTimeline,Rt as PathConstraintSpacingTimeline,Hs as Physics,Vt as PhysicsConstraintDampingTimeline,Nt as PhysicsConstraintGravityTimeline,Dt as PhysicsConstraintInertiaTimeline,_t as PhysicsConstraintMassTimeline,Ut as PhysicsConstraintMixTimeline,He as PhysicsConstraintResetTimeline,Lt as PhysicsConstraintStrengthTimeline,pe as PhysicsConstraintTimeline,Ot as PhysicsConstraintWindTimeline,Jt as PointAttachment,Me as Pool,Ze as PositionMode,ks as Pow,ur as PowOut,Yt as RGB2Timeline,Mt as RGBA2Timeline,At as RGBATimeline,Tt as RGBTimeline,O as RegionAttachment,tt as RotateMode,Ee as RotateTimeline,Gt as SETUP,je as SUBSEQUENT,bt as ScaleTimeline,wt as ScaleXTimeline,yt as ScaleYTimeline,Ye as SequenceTimeline,vt as ShearTimeline,Ct as ShearXTimeline,St as ShearYTimeline,Ae as Skeleton,js as SkeletonBinary,ls as SkeletonBounds,it as SkeletonClipping,_e as SkeletonData,Ks as SkeletonJson,st as Skin,is as SkinEntry,zs as Slot,ns as SlotData,et as SpacingMode,ms as Spine,Oi as SpineDebugRenderer,fs as SpinePipe,nt as SpineTexture,ft as StringSet,Ht as Texture,$t as TextureAtlas,Os as TextureAtlasPage,jt as TextureAtlasRegion,Qe as TextureFilter,_s as TextureRegion,Vs as TextureWrap,gr as TimeKeeper,J as Timeline,Bs as TrackEntry,Gs as TransformConstraint,as as TransformConstraintData,Pt as TransformConstraintTimeline,gt as TranslateTimeline,pt as TranslateXTimeline,xt as TranslateYTimeline,re as Triangulator,B as Utils,Re as Vector2,le as VertexAttachment,pr as WindowedMean};
27
+ `}},Mi=class extends Ai{constructor(e){const t=bi({name:"dark-tint-batch",bits:[xi,Ii,vi(e),ki]}),s=wi({name:"dark-tint-batch",bits:[pi,Ti,yi(e),Si]});super({glProgram:t,gpuProgram:s,resources:{batchSamplers:Ci(e)}})}},er=null,tr=class extends li{geometry=new gi;shader=er||(er=new Mi(this.maxTextures));name=tr.extension.name;vertexSize=7;packAttributes(e,t,s,r,n){const h=n<<16|e.roundPixels&65535,o=e.transform,i=o.a,l=o.b,a=o.c,c=o.d,d=o.tx,f=o.ty,{positions:u,uvs:m}=e,p=e.color,w=(p>>24&255)/255,b=hi.shared.setValue(e.darkColor).premultiply(w,!0).toPremultiplied(1,!1),g=e.attributeOffset,x=g+e.attributeSize;for(let v=g;v<x;v++){const y=v*2,C=u[y],S=u[y+1];t[r++]=i*C+a*S+d,t[r++]=c*S+l*C+f,t[r++]=m[y],t[r++]=m[y+1],s[r++]=p,s[r++]=b,s[r++]=h}}packQuadAttributes(e,t,s,r,n){const h=e.texture,o=e.transform,i=o.a,l=o.b,a=o.c,c=o.d,d=o.tx,f=o.ty,u=e.bounds,m=u.maxX,p=u.minX,w=u.maxY,b=u.minY,g=h.uvs,x=e.color,v=e.darkColor,y=n<<16|e.roundPixels&65535;t[r+0]=i*p+a*b+d,t[r+1]=c*b+l*p+f,t[r+2]=g.x0,t[r+3]=g.y0,s[r+4]=x,s[r+5]=v,s[r+6]=y,t[r+7]=i*m+a*b+d,t[r+8]=c*b+l*m+f,t[r+9]=g.x1,t[r+10]=g.y1,s[r+11]=x,s[r+12]=v,s[r+13]=y,t[r+14]=i*m+a*w+d,t[r+15]=c*w+l*m+f,t[r+16]=g.x2,t[r+17]=g.y2,s[r+18]=x,s[r+19]=v,s[r+20]=y,t[r+21]=i*p+a*w+d,t[r+22]=c*w+l*p+f,t[r+23]=g.x3,t[r+24]=g.y3,s[r+25]=x,s[r+26]=v,s[r+27]=y}},sr=tr;E(sr,"extension",{type:[di.Batcher],name:"darkTint"}),ci.add(sr);import{collectAllRenderables as Yi,extensions as Xi,ExtensionType as ds}from"pixi.js";var Fi=class{indexOffset=0;attributeOffset=0;indexSize;attributeSize;batcherName="darkTint";topology="triangle-list";packAsQuad=!1;renderable;positions;indices;uvs;roundPixels;data;blendMode;darkTint;texture;transform;_textureId;_attributeStart;_indexStart;_batcher;_batch;get color(){const e=this.data.color,t=this.renderable.groupColor,s=this.renderable.groupAlpha;let r;const n=e.a*s*255;if(t!==16777215){const h=t>>16&255,o=t>>8&255,i=t&255,l=e.r*i,a=e.g*o,c=e.b*h;r=n<<24|c<<16|a<<8|l}else r=n<<24|e.b*255<<16|e.g*255<<8|e.r*255;return r}get darkColor(){const e=this.data.darkColor;return e.b*255<<16|e.g*255<<8|e.r*255}get groupTransform(){return this.renderable.groupTransform}setData(e,t,s,r){if(this.renderable=e,this.transform=e.groupTransform,this.data=t,t.clipped){const n=t.clippedData;this.indexSize=n.indicesCount,this.attributeSize=n.vertexCount,this.positions=n.vertices,this.indices=n.indices,this.uvs=n.uvs}else this.indexSize=t.indices.length,this.attributeSize=t.vertices.length/2,this.positions=t.vertices,this.indices=t.indices,this.uvs=t.uvs;this.texture=t.texture,this.roundPixels=r,this.blendMode=s,this.batcherName=t.darkTint?"darkTint":"default"}},Pi={0:"normal",1:"add",2:"multiply",3:"screen"},fs=class{renderer;gpuSpineData={};_destroyRenderableBound=this.destroyRenderable.bind(this);constructor(e){this.renderer=e}validateRenderable(e){if(e._validateAndTransformAttachments(),e.spineAttachmentsDirty)return!0;if(e.spineTexturesDirty){const t=e.skeleton.drawOrder,s=this.gpuSpineData[e.uid];for(let r=0,n=t.length;r<n;r++){const h=t[r],o=h.getAttachment();if(o instanceof O||o instanceof ae){const i=e._getCachedData(h,o),l=s.slotBatches[i.id],a=i.texture;if(a!==l.texture&&!l._batcher.checkAndUpdateTexture(l,a))return!0}}}return!1}addRenderable(e,t){const s=this._getSpineData(e),r=this.renderer.renderPipes.batch,n=e.skeleton.drawOrder,h=this.renderer._roundPixels|e._roundPixels;e._validateAndTransformAttachments(),e.spineAttachmentsDirty=!1,e.spineTexturesDirty=!1;for(let o=0,i=n.length;o<i;o++){const l=n[o],a=l.getAttachment(),c=Pi[l.data.blendMode];if(a instanceof O||a instanceof ae){const f=e._getCachedData(l,a),u=s.slotBatches[f.id]||=new Fi;u.setData(e,f,c,h),f.skipRender||r.addToBatch(u,t)}const d=e._slotsObject[l.data.name];if(d){const f=d.container;f.includeInBuild=!0,Yi(f,t,this.renderer),f.includeInBuild=!1}}}updateRenderable(e){const t=this.gpuSpineData[e.uid];e._validateAndTransformAttachments(),e.spineAttachmentsDirty=!1,e.spineTexturesDirty=!1;const s=e.skeleton.drawOrder;for(let r=0,n=s.length;r<n;r++){const h=s[r],o=h.getAttachment();if((o instanceof O||o instanceof ae)&&!e._getCachedData(h,o).skipRender){const l=t.slotBatches[e._getCachedData(h,o).id];l._batcher?.updateElement(l)}}}destroyRenderable(e){this.gpuSpineData[e.uid]=null,e.off("destroyed",this._destroyRenderableBound)}destroy(){this.gpuSpineData=null,this.renderer=null}_getSpineData(e){return this.gpuSpineData[e.uid]||this._initMeshData(e)}_initMeshData(e){return this.gpuSpineData[e.uid]={slotBatches:{}},e.on("destroyed",this._destroyRenderableBound),this.gpuSpineData[e.uid]}};E(fs,"extension",{type:[ds.WebGLPipes,ds.WebGPUPipes,ds.CanvasPipes],name:"spine"}),Xi.add(fs);import{Assets as rr,Cache as us,Container as Bi,DEG_TO_RAD as Ri,fastCopy as Ei,Graphics as Di,Texture as Li,Ticker as ot,ViewContainer as Vi}from"pixi.js";var lt=new Re;Ae.yDown=!0;var Fe=new it,ir=new Me(()=>new Di),ms=class extends Vi{batched=!0;buildId=0;renderPipeId="spine";_didSpineUpdate=!1;beforeUpdateWorldTransforms=()=>{};afterUpdateWorldTransforms=()=>{};skeleton;state;skeletonBounds;darkTint=!1;_debug=void 0;_slotsObject=Object.create(null);clippingSlotToPixiMasks=Object.create(null);getSlotFromRef(e){let t;if(typeof e=="number"?t=this.skeleton.slots[e]:typeof e=="string"?t=this.skeleton.findSlot(e):t=e,!t)throw new Error(`No slot found with the given slot reference: ${e}`);return t}spineAttachmentsDirty=!0;spineTexturesDirty=!0;_lastAttachments=[];_stateChanged=!0;attachmentCacheData=[];get debug(){return this._debug}set debug(e){this._debug&&this._debug.unregisterSpine(this),e&&e.registerSpine(this),this._debug=e}_autoUpdate=!0;get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e?ot.shared.add(this.internalUpdate,this):ot.shared.remove(this.internalUpdate,this),this._autoUpdate=e}hasNeverUpdated=!0;constructor(e){e instanceof _e&&(e={skeletonData:e}),super();const t=e instanceof _e?e:e.skeletonData;this.skeleton=new Ae(t),this.state=new qt(new Ls(t)),this.autoUpdate=e?.autoUpdate??!0,this.darkTint=e?.darkTint===void 0?this.skeleton.slots.some(r=>!!r.data.darkColor):e?.darkTint;const s=this.skeleton.slots;for(let r=0;r<s.length;r++)this.attachmentCacheData[r]=Object.create(null)}update(e){this.internalUpdate(0,e)}internalUpdate(e,t){this._updateAndApplyState(t??ot.shared.deltaMS/1e3)}get bounds(){return this._boundsDirty&&this.updateBounds(),this._bounds}setBonePosition(e,t){const s=e;if(typeof e=="string"&&(e=this.skeleton.findBone(e)),!e)throw Error(`Cant set bone position, bone ${String(s)} not found`);if(lt.set(t.x,t.y),e.parent){const r=e.parent.worldToLocal(lt);e.x=r.x,e.y=-r.y}else e.x=lt.x,e.y=lt.y}getBonePosition(e,t){const s=e;return typeof e=="string"&&(e=this.skeleton.findBone(e)),e?(t||(t={x:0,y:0}),t.x=e.worldX,t.y=e.worldY,t):(console.error(`Cant set bone position! Bone ${String(s)} not found`),t)}_updateAndApplyState(e){this.hasNeverUpdated=!1,this.state.update(e),this.skeleton.update(e);const{skeleton:t}=this;this.state.apply(t),this.beforeUpdateWorldTransforms(this),t.updateWorldTransform(2),this.afterUpdateWorldTransforms(this),this.updateSlotObjects(),this._stateChanged=!0,this._boundsDirty=!0,this.onViewUpdate()}_validateAndTransformAttachments(){this._stateChanged&&(this._stateChanged=!1,this.validateAttachments(),this.transformAttachments())}validateAttachments(){const e=this.skeleton.drawOrder,t=this._lastAttachments;let s=0,r=!1;for(let n=0;n<e.length;n++){const o=e[n].getAttachment();o&&(o!==t[s]&&(r=!0,t[s]=o),s++)}s!==t.length&&(r=!0,t.length=s),this.spineAttachmentsDirty||=r}updateAndSetPixiMask(e,t){const s=e.attachment;if(s&&s instanceof be){const h=this.clippingSlotToPixiMasks[e.data.name]||={slot:e,vertices:new Array};h.maskComputed=!1,this.currentClippingSlot=this.clippingSlotToPixiMasks[e.data.name];return}let r=this.currentClippingSlot,n=this._slotsObject[e.data.name];if(r&&n){let h=r.slot,o=h.attachment,i=r.mask;if(i||(i=ir.obtain(),r.mask=i,this.addChild(i)),!r.maskComputed){r.maskComputed=!0;const l=o.worldVerticesLength,a=r.vertices;o.computeWorldVertices(h,0,l,a,0,2),i.clear().poly(a).stroke({width:0}).fill({alpha:.25})}n.container.mask=i}else n?.container.mask&&(n.container.mask=null);if(r&&r.slot.attachment.endSlot==e.data&&(this.currentClippingSlot=void 0),t)for(const h in this.clippingSlotToPixiMasks){const o=this.clippingSlotToPixiMasks[h];(!(o.slot.attachment instanceof be)||!o.maskComputed)&&o.mask&&(this.removeChild(o.mask),ir.free(o.mask),o.mask=void 0)}}currentClippingSlot;transformAttachments(){const e=this.skeleton.drawOrder;for(let t=0;t<e.length;t++){const s=e[t];this.updateAndSetPixiMask(s,t===e.length-1);const r=s.getAttachment();if(r){if(r instanceof ae||r instanceof O){const n=this._getCachedData(s,r);r instanceof O?r.computeWorldVertices(s,n.vertices,0,2):r.computeWorldVertices(s,0,r.worldVerticesLength,n.vertices,0,2),n.uvs.length<r.uvs.length&&(n.uvs=new Float32Array(r.uvs.length)),Ei(r.uvs.buffer,n.uvs.buffer);const o=s.bone.skeleton.color,i=s.color,l=r.color;n.color.set(o.r*i.r*l.r,o.g*i.g*l.g,o.b*i.b*l.b,o.a*i.a*l.a),s.darkColor&&n.darkColor.setFromColor(s.darkColor),n.skipRender=n.clipped=!1;const a=r.region?.texture.texture||Li.EMPTY;n.texture!==a&&(n.texture=a,this.spineTexturesDirty=!0),Fe.isClipping()&&this.updateClippingData(n)}else if(r instanceof be){Fe.clipStart(s,r);continue}}Fe.clipEndWithSlot(s)}Fe.clipEnd()}updateClippingData(e){e.clipped=!0,Fe.clipTrianglesUnpacked(e.vertices,e.indices,e.indices.length,e.uvs);const{clippedVertices:t,clippedUVs:s,clippedTriangles:r}=Fe,n=t.length/2,h=r.length;e.clippedData||(e.clippedData={vertices:new Float32Array(n*2),uvs:new Float32Array(n*2),vertexCount:n,indices:new Uint16Array(h),indicesCount:h},this.spineAttachmentsDirty=!0);const o=e.clippedData,i=o.vertexCount!==n||h!==o.indicesCount;e.skipRender=n===0,i&&(this.spineAttachmentsDirty=!0,o.vertexCount<n&&(o.vertices=new Float32Array(n*2),o.uvs=new Float32Array(n*2)),o.indices.length<h&&(o.indices=new Uint16Array(h)));const{vertices:l,uvs:a,indices:c}=o;for(let d=0;d<n;d++)l[d*2]=t[d*2],l[d*2+1]=t[d*2+1],a[d*2]=s[d*2],a[d*2+1]=s[d*2+1];o.vertexCount=n;for(let d=0;d<h;d++)c[d]!==r[d]&&(this.spineAttachmentsDirty=!0,c[d]=r[d]);o.indicesCount=h}updateSlotObjects(){for(const e in this._slotsObject){const t=this._slotsObject[e];t&&this.updateSlotObject(t)}}updateSlotObject(e){const{slot:t,container:s}=e;if(s.visible=this.skeleton.drawOrder.includes(t),s.visible){const r=t.bone;s.position.set(r.worldX,r.worldY),s.scale.x=r.getWorldScaleX(),s.scale.y=r.getWorldScaleY(),s.rotation=r.getWorldRotationX()*Ri,s.alpha=this.skeleton.color.a*t.color.a}}_getCachedData(e,t){return this.attachmentCacheData[e.data.index][t.name]||this.initCachedData(e,t)}initCachedData(e,t){let s;return t instanceof O?(s=new Float32Array(8),this.attachmentCacheData[e.data.index][t.name]={id:`${e.data.index}-${t.name}`,vertices:s,clipped:!1,indices:[0,1,2,0,2,3],uvs:new Float32Array(t.uvs.length),color:new V(1,1,1,1),darkColor:new V(0,0,0,0),darkTint:this.darkTint,skipRender:!1,texture:t.region?.texture.texture}):(s=new Float32Array(t.worldVerticesLength),this.attachmentCacheData[e.data.index][t.name]={id:`${e.data.index}-${t.name}`,vertices:s,clipped:!1,indices:t.triangles,uvs:new Float32Array(t.uvs.length),color:new V(1,1,1,1),darkColor:new V(0,0,0,0),darkTint:this.darkTint,skipRender:!1,texture:t.region?.texture.texture}),this.attachmentCacheData[e.data.index][t.name]}onViewUpdate(){if(this._didViewChangeTick++,this._boundsDirty=!0,this.didViewUpdate)return;this.didViewUpdate=!0;const e=this.renderGroup||this.parentRenderGroup;e&&e.onChildViewUpdate(this),this.debug?.renderDebug(this)}addSlotObject(e,t){e=this.getSlotFromRef(e);for(const r in this._slotsObject)this._slotsObject[r]?.container===t&&this.removeSlotObject(this._slotsObject[r].slot);this.removeSlotObject(e),t.includeInBuild=!1,this.addChild(t);const s={container:t,slot:e};this._slotsObject[e.data.name]=s,this.updateSlotObject(s)}removeSlotObject(e){let t;if(e instanceof Bi){for(const s in this._slotsObject)if(this._slotsObject[s]?.container===e){this._slotsObject[s]=null,t=e;break}}else{const s=this.getSlotFromRef(e);t=this._slotsObject[s.data.name]?.container,this._slotsObject[s.data.name]=null}t&&(this.removeChild(t),t.includeInBuild=!0)}getSlotObject(e){return e=this.getSlotFromRef(e),this._slotsObject[e.data.name]?.container}updateBounds(){this._boundsDirty=!1,this.skeletonBounds||=new ls;const e=this.skeletonBounds;if(e.update(this.skeleton,!0),e.minX===1/0){this.hasNeverUpdated&&(this._updateAndApplyState(0),this._boundsDirty=!1),this._validateAndTransformAttachments();const t=this.skeleton.drawOrder,s=this._bounds;s.clear();for(let r=0;r<t.length;r++){const n=t[r],h=n.getAttachment();if(h&&(h instanceof O||h instanceof ae)){const o=this._getCachedData(n,h);s.addVertexData(o.vertices,0,o.vertices.length)}}}else this._bounds.minX=e.minX,this._bounds.minY=e.minY,this._bounds.maxX=e.maxX,this._bounds.maxY=e.maxY}addBounds(e){e.addBounds(this.bounds)}destroy(e=!1){super.destroy(e),ot.shared.remove(this.internalUpdate,this),this.state.clearListeners(),this.debug=void 0,this.skeleton=null,this.state=null,this._slotsObject=null,this._lastAttachments.length=0,this.attachmentCacheData=null}skeletonToPixiWorldCoordinates(e){this.worldTransform.apply(e,e)}pixiWorldCoordinatesToSkeleton(e){this.worldTransform.applyInverse(e,e)}pixiWorldCoordinatesToBone(e,t){this.pixiWorldCoordinatesToSkeleton(e),t.parent?t.parent.worldToLocal(e):t.worldToLocal(e)}static from({skeleton:e,atlas:t,scale:s=1,darkTint:r,autoUpdate:n=!0}){const h=`${e}-${t}-${s}`;if(us.has(h))return new ms(us.get(h));const o=rr.get(e),i=rr.get(t),l=new Us(i),a=o instanceof Uint8Array?new js(l):new Ks(l);a.scale=s;const c=a.readSkeletonData(o);return us.set(h,c),new ms({skeletonData:c,darkTint:r,autoUpdate:n})}};import{Container as gs,Graphics as de,Text as _i}from"pixi.js";var Oi=class{registeredSpines=new Map;drawMeshHull=!0;drawMeshTriangles=!0;drawBones=!0;drawPaths=!0;drawBoundingBoxes=!0;drawClipping=!0;drawRegionAttachments=!0;drawEvents=!0;lineWidth=1;regionAttachmentsColor=30975;meshHullColor=30975;meshTrianglesColor=16763904;clippingPolygonColor=16711935;boundingBoxesRectColor=65280;boundingBoxesPolygonColor=65280;boundingBoxesCircleColor=65280;pathsCurveColor=16711680;pathsLineColor=16711935;skeletonXYColor=16711680;bonesColor=61132;eventFontSize=24;eventFontColor=0;registerSpine(e){if(this.registeredSpines.has(e)){console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!",e);return}const t={parentDebugContainer:new gs,bones:new gs,skeletonXY:new de,regionAttachmentsShape:new de,meshTrianglesLine:new de,meshHullLine:new de,clippingPolygon:new de,boundingBoxesRect:new de,boundingBoxesCircle:new de,boundingBoxesPolygon:new de,pathsCurve:new de,pathsLine:new de,eventText:new gs,eventCallback:{event:(s,r)=>{if(this.drawEvents){const n=Math.abs(e.scale.x||e.scale.y||1),h=new _i({text:r.data.name,style:{fontSize:this.eventFontSize/n,fill:this.eventFontColor,fontFamily:"monospace"}});h.scale.x=Math.sign(e.scale.x),h.anchor.set(.5),t.eventText.addChild(h),setTimeout(()=>{h.destroyed||h.destroy()},250)}}}};t.parentDebugContainer.addChild(t.bones),t.parentDebugContainer.addChild(t.skeletonXY),t.parentDebugContainer.addChild(t.regionAttachmentsShape),t.parentDebugContainer.addChild(t.meshTrianglesLine),t.parentDebugContainer.addChild(t.meshHullLine),t.parentDebugContainer.addChild(t.clippingPolygon),t.parentDebugContainer.addChild(t.boundingBoxesRect),t.parentDebugContainer.addChild(t.boundingBoxesCircle),t.parentDebugContainer.addChild(t.boundingBoxesPolygon),t.parentDebugContainer.addChild(t.pathsCurve),t.parentDebugContainer.addChild(t.pathsLine),t.parentDebugContainer.addChild(t.eventText),t.parentDebugContainer.zIndex=9999999,t.parentDebugContainer.accessibleChildren=!1,t.parentDebugContainer.eventMode="none",t.parentDebugContainer.interactiveChildren=!1,e.addChild(t.parentDebugContainer),e.state.addListener(t.eventCallback),this.registeredSpines.set(e,t)}renderDebug(e){this.registeredSpines.has(e)||this.registerSpine(e);const t=this.registeredSpines.get(e);if(!t)return;e.addChild(t.parentDebugContainer),t.skeletonXY.clear(),t.regionAttachmentsShape.clear(),t.meshTrianglesLine.clear(),t.meshHullLine.clear(),t.clippingPolygon.clear(),t.boundingBoxesRect.clear(),t.boundingBoxesCircle.clear(),t.boundingBoxesPolygon.clear(),t.pathsCurve.clear(),t.pathsLine.clear();for(let n=t.bones.children.length;n>0;n--)t.bones.children[n-1].destroy({children:!0,texture:!0,textureSource:!0});const s=Math.abs(e.scale.x||e.scale.y||1),r=this.lineWidth/s;if(this.drawBones&&this.drawBonesFunc(e,t,r,s),this.drawPaths&&this.drawPathsFunc(e,t,r),this.drawBoundingBoxes&&this.drawBoundingBoxesFunc(e,t,r),this.drawClipping&&this.drawClippingFunc(e,t,r),(this.drawMeshHull||this.drawMeshTriangles)&&this.drawMeshHullAndMeshTriangles(e,t,r),this.drawRegionAttachments&&this.drawRegionAttachmentsFunc(e,t,r),this.drawEvents)for(const n of t.eventText.children)n.alpha-=.05,n.y-=2}drawBonesFunc(e,t,s,r){const n=e.skeleton,h=n.x,o=n.y,i=n.bones;t.skeletonXY.strokeStyle={width:s,color:this.skeletonXYColor};for(let a=0,c=i.length;a<c;a++){const d=i[a],f=d.data.length,u=h+d.worldX,m=o+d.worldY,p=h+f*d.a+d.worldX,w=o+f*d.b+d.worldY;if(d.data.name==="root"||d.data.parent===null)continue;const b=Math.abs(u-p),g=Math.abs(m-w),x=Math.pow(b,2),v=g,y=Math.pow(g,2),C=Math.sqrt(x+y),S=Math.pow(C,2),A=Math.PI/180,M=Math.acos((S+y-x)/(2*v*C))||0;if(C===0)continue;const T=new de;t.bones.addChild(T);const F=C/50/r;T.context.poly([0,0,0-F,C-F*3,0,C-F,0+F,C-F*3]).fill(this.bonesColor),T.x=u,T.y=m,T.pivot.y=C;let X=0;u<p&&m<w?X=-M+180*A:u>p&&m<w?X=180*A+M:u>p&&m>w?X=-M:u<p&&m>w?X=M:m===w&&u<p?X=90*A:m===w&&u>p?X=-90*A:u===p&&m<w?X=180*A:u===p&&m>w&&(X=0),T.rotation=X,T.circle(0,C,F*1.2).fill({color:0,alpha:.6}).stroke({width:s+F/2.4,color:this.bonesColor})}const l=s*3;t.skeletonXY.context.moveTo(h-l,o-l).lineTo(h+l,o+l).moveTo(h+l,o-l).lineTo(h-l,o+l).stroke()}drawRegionAttachmentsFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h],l=i.getAttachment();if(l===null||!(l instanceof O))continue;const a=l,c=new Float32Array(8);a.computeWorldVertices(i,c,0,2),t.regionAttachmentsShape.poly(Array.from(c.slice(0,8)))}t.regionAttachmentsShape.stroke({color:this.regionAttachmentsColor,width:s})}drawMeshHullAndMeshTriangles(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof ae))continue;const a=l,c=new Float32Array(a.worldVerticesLength),d=a.triangles;let f=a.hullLength;if(a.computeWorldVertices(i,0,a.worldVerticesLength,c,0,2),this.drawMeshTriangles)for(let u=0,m=d.length;u<m;u+=3){const p=d[u]*2,w=d[u+1]*2,b=d[u+2]*2;t.meshTrianglesLine.context.moveTo(c[p],c[p+1]).lineTo(c[w],c[w+1]).lineTo(c[b],c[b+1])}if(this.drawMeshHull&&f>0){f=(f>>1)*2;let u=c[f-2],m=c[f-1];for(let p=0,w=f;p<w;p+=2){const b=c[p],g=c[p+1];t.meshHullLine.context.moveTo(b,g).lineTo(u,m),u=b,m=g}}}t.meshHullLine.stroke({width:s,color:this.meshHullColor}),t.meshTrianglesLine.stroke({width:s,color:this.meshTrianglesColor})}drawClippingFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof be))continue;const a=l,c=a.worldVerticesLength,d=new Float32Array(c);a.computeWorldVertices(i,0,c,d,0,2),t.clippingPolygon.poly(Array.from(d))}t.clippingPolygon.stroke({width:s,color:this.clippingPolygonColor,alpha:1})}drawBoundingBoxesFunc(e,t,s){const r=new ls;r.update(e.skeleton,!0),r.minX!==1/0&&t.boundingBoxesRect.rect(r.minX,r.minY,r.getWidth(),r.getHeight()).stroke({width:s,color:this.boundingBoxesRectColor});const n=r.polygons,h=(o,i,l)=>{if(l<3)throw new Error("Polygon must contain at least 3 vertices");const a=[],c=s*2;for(let d=0,f=o.length;d<f;d+=2){const u=o[d],m=o[d+1];t.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor),t.boundingBoxesCircle.drawCircle(u,m,c),t.boundingBoxesCircle.fill(0),t.boundingBoxesCircle.circle(u,m,c).fill({color:this.boundingBoxesCircleColor}),a.push(u,m)}t.boundingBoxesPolygon.poly(a).fill({color:this.boundingBoxesPolygonColor,alpha:.1}).stroke({width:s,color:this.boundingBoxesPolygonColor})};for(let o=0,i=n.length;o<i;o++){const l=n[o];h(l,0,l.length)}}drawPathsFunc(e,t,s){const n=e.skeleton.slots;for(let h=0,o=n.length;h<o;h++){const i=n[h];if(!i.bone.active)continue;const l=i.getAttachment();if(l===null||!(l instanceof ke))continue;const a=l;let c=a.worldVerticesLength;const d=new Float32Array(c);a.computeWorldVertices(i,0,c,d,0,2);let f=d[2],u=d[3],m=0,p=0;if(a.closed){const w=d[0],b=d[1],g=d[c-2],x=d[c-1];m=d[c-4],p=d[c-3],t.pathsCurve.moveTo(f,u),t.pathsCurve.bezierCurveTo(w,b,g,x,m,p),t.pathsLine.moveTo(f,u),t.pathsLine.lineTo(w,b),t.pathsLine.moveTo(m,p),t.pathsLine.lineTo(g,x)}c-=4;for(let w=4;w<c;w+=6){const b=d[w],g=d[w+1],x=d[w+2],v=d[w+3];m=d[w+4],p=d[w+5],t.pathsCurve.moveTo(f,u),t.pathsCurve.bezierCurveTo(b,g,x,v,m,p),t.pathsLine.moveTo(f,u),t.pathsLine.lineTo(b,g),t.pathsLine.moveTo(m,p),t.pathsLine.lineTo(x,v),f=m,u=p}}t.pathsCurve.stroke({width:s,color:this.pathsCurveColor}),t.pathsLine.stroke({width:s,color:this.pathsLineColor})}unregisterSpine(e){this.registeredSpines.has(e)||console.warn("SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!",e);const t=this.registeredSpines.get(e);t&&(e.state.removeListener(t.eventCallback),t.parentDebugContainer.destroy({textureSource:!0,children:!0,texture:!0}),this.registeredSpines.delete(e))}};export{It as AlphaTimeline,ze as Animation,qt as AnimationState,xr as AnimationStateAdapter,Ls as AnimationStateData,yr as AssetManagerBase,Us as AtlasAttachmentLoader,ut as Attachment,Ce as AttachmentTimeline,Js as BinaryInput,rt as BlendMode,Qt as Bone,Kt as BoneData,Ke as BoundingBoxAttachment,Ds as CURRENT,be as ClippingAttachment,V as Color,Ve as ConstraintData,he as CurveTimeline,ne as CurveTimeline1,Ge as CurveTimeline2,mr as DebugUtils,Xt as DeformTimeline,qs as Downloader,Se as DrawOrderTimeline,Zt as Event,es as EventData,Rs as EventQueue,De as EventTimeline,se as EventType,Wt as FIRST,br as FakeTexture,Je as HOLD_FIRST,Es as HOLD_MIX,zt as HOLD_SUBSEQUENT,Ws as IkConstraint,ts as IkConstraintData,Ft as IkConstraintTimeline,Le as Inherit,kt as InheritTimeline,fr as IntSet,Ss as Interpolation,P as MathUtils,ae as MeshAttachment,Ms as MixBlend,Ys as MixDirection,ke as PathAttachment,Xe as PathConstraint,ss as PathConstraintData,Et as PathConstraintMixTimeline,Bt as PathConstraintPositionTimeline,Rt as PathConstraintSpacingTimeline,Hs as Physics,Vt as PhysicsConstraintDampingTimeline,Nt as PhysicsConstraintGravityTimeline,Dt as PhysicsConstraintInertiaTimeline,_t as PhysicsConstraintMassTimeline,Ut as PhysicsConstraintMixTimeline,He as PhysicsConstraintResetTimeline,Lt as PhysicsConstraintStrengthTimeline,pe as PhysicsConstraintTimeline,Ot as PhysicsConstraintWindTimeline,Jt as PointAttachment,Me as Pool,Ze as PositionMode,ks as Pow,ur as PowOut,Yt as RGB2Timeline,Mt as RGBA2Timeline,At as RGBATimeline,Tt as RGBTimeline,O as RegionAttachment,tt as RotateMode,Ee as RotateTimeline,Gt as SETUP,je as SUBSEQUENT,bt as ScaleTimeline,wt as ScaleXTimeline,yt as ScaleYTimeline,Ye as SequenceTimeline,vt as ShearTimeline,Ct as ShearXTimeline,St as ShearYTimeline,Ae as Skeleton,js as SkeletonBinary,ls as SkeletonBounds,it as SkeletonClipping,_e as SkeletonData,Ks as SkeletonJson,st as Skin,is as SkinEntry,zs as Slot,ns as SlotData,et as SpacingMode,ms as Spine,Oi as SpineDebugRenderer,fs as SpinePipe,nt as SpineTexture,ft as StringSet,Ht as Texture,$t as TextureAtlas,Os as TextureAtlasPage,jt as TextureAtlasRegion,Qe as TextureFilter,_s as TextureRegion,Vs as TextureWrap,gr as TimeKeeper,J as Timeline,Bs as TrackEntry,Gs as TransformConstraint,as as TransformConstraintData,Pt as TransformConstraintTimeline,gt as TranslateTimeline,pt as TranslateXTimeline,xt as TranslateYTimeline,re as Triangulator,B as Utils,Re as Vector2,le as VertexAttachment,pr as WindowedMean};
@@ -12291,6 +12291,8 @@ var SpinePipe = class {
12291
12291
  const drawOrder = spine.skeleton.drawOrder;
12292
12292
  const roundPixels = this.renderer._roundPixels | spine._roundPixels;
12293
12293
  spine._validateAndTransformAttachments();
12294
+ spine.spineAttachmentsDirty = false;
12295
+ spine.spineTexturesDirty = false;
12294
12296
  for (let i = 0, n = drawOrder.length; i < n; i++) {
12295
12297
  const slot = drawOrder[i];
12296
12298
  const attachment = slot.getAttachment();
@@ -12320,6 +12322,8 @@ var SpinePipe = class {
12320
12322
  updateRenderable(spine) {
12321
12323
  const gpuSpine = this.gpuSpineData[spine.uid];
12322
12324
  spine._validateAndTransformAttachments();
12325
+ spine.spineAttachmentsDirty = false;
12326
+ spine.spineTexturesDirty = false;
12323
12327
  const drawOrder = spine.skeleton.drawOrder;
12324
12328
  for (let i = 0, n = drawOrder.length; i < n; i++) {
12325
12329
  const slot = drawOrder[i];
@@ -12570,7 +12574,7 @@ var Spine = class extends ViewContainer {
12570
12574
  spineAttachmentsDirty = true;
12571
12575
  lastAttachments.length = index;
12572
12576
  }
12573
- this.spineAttachmentsDirty = spineAttachmentsDirty;
12577
+ this.spineAttachmentsDirty ||= spineAttachmentsDirty;
12574
12578
  }
12575
12579
  updateAndSetPixiMask(slot, last) {
12576
12580
  const attachment = slot.attachment;