UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

225 lines 20.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /****************************************************************************** * Spine Runtimes License Agreement * Last updated May 1, 2019. Replaces all prior versions. * * Copyright (c) 2013-2019, Esoteric Software LLC * * Integration of the Spine Runtimes into software or otherwise creating * derivative works of the Spine Runtimes is permitted under the terms and * conditions of Section 2 of the Spine Editor License Agreement: * http://esotericsoftware.com/spine-editor-license * * Otherwise, it is permitted to integrate the Spine Runtimes into software * or otherwise create derivative works of the Spine Runtimes (collectively, * "Products"), provided that each user of the Products must obtain their own * Spine Editor license and redistribution of the Products in any form must * include this license and copyright notice. * * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { ManagedWebGLRenderingContext } from "./WebGL"; import { Mesh, Position2Attribute, ColorAttribute, TexCoordAttribute, Color2Attribute } from "./Mesh"; export class PolygonBatcher { /** * @param {?} context * @param {?=} twoColorTint * @param {?=} maxVertices */ constructor(context, twoColorTint = true, maxVertices = 10920) { this.isDrawing = false; this.shader = null; this.lastTexture = null; this.verticesLength = 0; this.indicesLength = 0; if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); this.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context); /** @type {?} */ let attributes = twoColorTint ? [ new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute(), new Color2Attribute() ] : [ new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute() ]; this.mesh = new Mesh(context, attributes, maxVertices, maxVertices * 3); this.srcBlend = this.context.gl.SRC_ALPHA; this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; } /** * @param {?} shader * @return {?} */ begin(shader) { /** @type {?} */ let gl = this.context.gl; if (this.isDrawing) throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()"); this.drawCalls = 0; this.shader = shader; this.lastTexture = null; this.isDrawing = true; gl.enable(gl.BLEND); gl.blendFunc(this.srcBlend, this.dstBlend); } /** * @param {?} srcBlend * @param {?} dstBlend * @return {?} */ setBlendMode(srcBlend, dstBlend) { /** @type {?} */ let gl = this.context.gl; this.srcBlend = srcBlend; this.dstBlend = dstBlend; if (this.isDrawing) { this.flush(); gl.blendFunc(this.srcBlend, this.dstBlend); } } /** * @param {?} texture * @param {?} vertices * @param {?} indices * @return {?} */ draw(texture, vertices, indices) { if (texture != this.lastTexture) { this.flush(); this.lastTexture = texture; } else if (this.verticesLength + vertices.length > this.mesh.getVertices().length || this.indicesLength + indices.length > this.mesh.getIndices().length) { this.flush(); } /** @type {?} */ let indexStart = this.mesh.numVertices(); this.mesh.getVertices().set(vertices, this.verticesLength); this.verticesLength += vertices.length; this.mesh.setVerticesLength(this.verticesLength); /** @type {?} */ let indicesArray = this.mesh.getIndices(); for (let i = this.indicesLength, j = 0; j < indices.length; i++, j++) indicesArray[i] = indices[j] + indexStart; this.indicesLength += indices.length; this.mesh.setIndicesLength(this.indicesLength); } /** * @private * @return {?} */ flush() { /** @type {?} */ let gl = this.context.gl; if (this.verticesLength == 0) return; this.lastTexture.bind(); this.mesh.draw(this.shader, gl.TRIANGLES); this.verticesLength = 0; this.indicesLength = 0; this.mesh.setVerticesLength(0); this.mesh.setIndicesLength(0); this.drawCalls++; } /** * @return {?} */ end() { /** @type {?} */ let gl = this.context.gl; if (!this.isDrawing) throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()"); if (this.verticesLength > 0 || this.indicesLength > 0) this.flush(); this.shader = null; this.lastTexture = null; this.isDrawing = false; gl.disable(gl.BLEND); } /** * @return {?} */ getDrawCalls() { return this.drawCalls; } /** * @return {?} */ dispose() { this.mesh.dispose(); } } if (false) { /** * @type {?} * @private */ PolygonBatcher.prototype.context; /** * @type {?} * @private */ PolygonBatcher.prototype.drawCalls; /** * @type {?} * @private */ PolygonBatcher.prototype.isDrawing; /** * @type {?} * @private */ PolygonBatcher.prototype.mesh; /** * @type {?} * @private */ PolygonBatcher.prototype.shader; /** * @type {?} * @private */ PolygonBatcher.prototype.lastTexture; /** * @type {?} * @private */ PolygonBatcher.prototype.verticesLength; /** * @type {?} * @private */ PolygonBatcher.prototype.indicesLength; /** * @type {?} * @private */ PolygonBatcher.prototype.srcBlend; /** * @type {?} * @private */ PolygonBatcher.prototype.dstBlend; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seWdvbkJhdGNoZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvd2ViZ2wvUG9seWdvbkJhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZELE9BQU8sRUFDTCxJQUFJLEVBQ0osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNoQixNQUFNLFFBQVEsQ0FBQztBQUtoQixNQUFNLE9BQU8sY0FBYzs7Ozs7O0lBV3pCLFlBQ0UsT0FBNkQsRUFDN0QsZUFBd0IsSUFBSSxFQUM1QixjQUFzQixLQUFLO1FBWHJCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsV0FBTSxHQUFXLElBQUksQ0FBQztRQUN0QixnQkFBVyxHQUFjLElBQUksQ0FBQztRQUM5QixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQVF4QixJQUFJLFdBQVcsR0FBRyxLQUFLO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0RBQWtELEdBQUcsV0FBVyxDQUNqRSxDQUFDO1FBQ0osSUFBSSxDQUFDLE9BQU87WUFDVixPQUFPLFlBQVksNEJBQTRCO2dCQUM3QyxDQUFDLENBQUMsT0FBTztnQkFDVCxDQUFDLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7WUFDNUMsVUFBVSxHQUFHLFlBQVk7WUFDM0IsQ0FBQyxDQUFDO2dCQUNFLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3hCLElBQUksY0FBYyxFQUFFO2dCQUNwQixJQUFJLGlCQUFpQixFQUFFO2dCQUN2QixJQUFJLGVBQWUsRUFBRTthQUN0QjtZQUNILENBQUMsQ0FBQztnQkFDRSxJQUFJLGtCQUFrQixFQUFFO2dCQUN4QixJQUFJLGNBQWMs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UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7OztJQUNELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQzs7OztJQUNELE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDRjs7Ozs7O0lBbEhDLGlDQUE4Qzs7Ozs7SUFDOUMsbUNBQTBCOzs7OztJQUMxQixtQ0FBMEI7Ozs7O0lBQzFCLDhCQUFtQjs7Ozs7SUFDbkIsZ0NBQThCOzs7OztJQUM5QixxQ0FBc0M7Ozs7O0lBQ3RDLHdDQUEyQjs7Ozs7SUFDM0IsdUNBQTBCOzs7OztJQUMxQixrQ0FBeUI7Ozs7O0lBQ3pCLGtDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcclxuICogTGFzdCB1cGRhdGVkIE1heSAxLCAyMDE5LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE5LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcclxuICpcclxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXHJcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXHJcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XHJcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxyXG4gKlxyXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcclxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxyXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXHJcbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxyXG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cclxuICpcclxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTU1xyXG4gKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTXHJcbiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOXHJcbiAqIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULFxyXG4gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLFxyXG4gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIEJVU0lORVNTXHJcbiAqIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcclxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXHJcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcclxuICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5pbXBvcnQgeyBNYW5hZ2VkV2ViR0xSZW5kZXJpbmdDb250ZXh0IH0gZnJvbSBcIi4vV2ViR0xcIjtcclxuaW1wb3J0IHtcclxuICBNZXNoLFxyXG4gIFBvc2l0aW9uMkF0dHJpYnV0ZSxcclxuICBDb2xvckF0dHJpYnV0ZSxcclxuICBUZXhDb29yZEF0dHJpYnV0ZSxcclxuICBDb2xvcjJBdHRyaWJ1dGVcclxufSBmcm9tIFwiLi9NZXNoXCI7XHJcbmltcG9ydCB7IFNoYWRlciB9IGZyb20gXCIuL1NoYWRlclwiO1xyXG5pbXBvcnQgeyBHTFRleHR1cmUgfSBmcm9tIFwiLi9HTFRleHR1cmVcIjtcclxuaW1wb3J0IHsgRGlzcG9zYWJsZSB9IGZyb20gXCIuLi9jb3JlL1V0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9seWdvbkJhdGNoZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcclxuICBwcml2YXRlIGNvbnRleHQ6IE1hbmFnZWRXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XHJcbiAgcHJpdmF0ZSBkcmF3Q2FsbHM6IG51bWJlcjtcclxuICBwcml2YXRlIGlzRHJhd2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbWVzaDogTWVzaDtcclxuICBwcml2YXRlIHNoYWRlcjogU2hhZGVyID0gbnVsbDtcclxuICBwcml2YXRlIGxhc3RUZXh0dXJlOiBHTFRleHR1cmUgPSBudWxsO1xyXG4gIHByaXZhdGUgdmVydGljZXNMZW5ndGggPSAwO1xyXG4gIHByaXZhdGUgaW5kaWNlc0xlbmd0aCA9IDA7XHJcbiAgcHJpdmF0ZSBzcmNCbGVuZDogbnVtYmVyO1xyXG4gIHByaXZhdGUgZHN0QmxlbmQ6IG51bWJlcjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbnRleHQ6IE1hbmFnZWRXZWJHTFJlbmRlcmluZ0NvbnRleHQgfCBXZWJHTFJlbmRlcmluZ0NvbnRleHQsXHJcbiAgICB0d29Db2xvclRpbnQ6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgbWF4VmVydGljZXM6IG51bWJlciA9IDEwOTIwXHJcbiAgKSB7XHJcbiAgICBpZiAobWF4VmVydGljZXMgPiAxMDkyMClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIFwiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gMTA5MjAgdHJpYW5nbGVzIHBlciBiYXRjaDogXCIgKyBtYXhWZXJ0aWNlc1xyXG4gICAgICApO1xyXG4gICAgdGhpcy5jb250ZXh0ID1cclxuICAgICAgY29udGV4dCBpbnN0YW5jZW9mIE1hbmFnZWRXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgICAgICA/IGNvbnRleHRcclxuICAgICAgICA6IG5ldyBNYW5hZ2VkV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNvbnRleHQpO1xyXG4gICAgbGV0IGF0dHJpYnV0ZXMgPSB0d29Db2xvclRpbnRcclxuICAgICAgPyBbXHJcbiAgICAgICAgICBuZXcgUG9zaXRpb24yQXR0cmlidXRlKCksXHJcbiAgICAgICAgICBuZXcgQ29sb3JBdHRyaWJ1dGUoKSxcclxuICAgICAgICAgIG5ldyBUZXhDb29yZEF0dHJpYnV0ZSgpLFxyXG4gICAgICAgICAgbmV3IENvbG9yMkF0dHJpYnV0ZSgpXHJcbiAgICAgICAgXVxyXG4gICAgICA6IFtcclxuICAgICAgICAgIG5ldyBQb3NpdGlvbjJBdHRyaWJ1dGUoKSxcclxuICAgICAgICAgIG5ldyBDb2xvckF0dHJpYnV0ZSgpLFxyXG4gICAgICAgICAgbmV3IFRleENvb3JkQXR0cmlidXRlKClcclxuICAgICAgICBdO1xyXG4gICAgdGhpcy5tZXNoID0gbmV3IE1lc2goY29udGV4dCwgYXR0cmlidXRlcywgbWF4VmVydGljZXMsIG1heFZlcnRpY2VzICogMyk7XHJcbiAgICB0aGlzLnNyY0JsZW5kID0gdGhpcy5jb250ZXh0LmdsLlNSQ19BTFBIQTtcclxuICAgIHRoaXMuZHN0QmxlbmQgPSB0aGlzLmNvbnRleHQuZ2wuT05FX01JTlVTX1NSQ19BTFBIQTtcclxuICB9XHJcbiAgYmVnaW4oc2hhZGVyOiBTaGFkZXIpIHtcclxuICAgIGxldCBnbCA9IHRoaXMuY29udGV4dC5nbDtcclxuICAgIGlmICh0aGlzLmlzRHJhd2luZylcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIFwiUG9seWdvbkJhdGNoIGlzIGFscmVhZHkgZHJhd2luZy4gQ2FsbCBQb2x5Z29uQmF0Y2guZW5kKCkgYmVmb3JlIGNhbGxpbmcgUG9seWdvbkJhdGNoLmJlZ2luKClcIlxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kcmF3Q2FsbHMgPSAwO1xyXG4gICAgdGhpcy5zaGFkZXIgPSBzaGFkZXI7XHJcbiAgICB0aGlzLmxhc3RUZXh0dXJlID0gbnVsbDtcclxuICAgIHRoaXMuaXNEcmF3aW5nID0gdHJ1ZTtcclxuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XHJcbiAgICBnbC5ibGVuZEZ1bmModGhpcy5zcmNCbGVuZCwgdGhpcy5kc3RCbGVuZCk7XHJcbiAgfVxyXG4gIHNldEJsZW5kTW9kZShzcmNCbGVuZDogbnVtYmVyLCBkc3RCbGVuZDogbnVtYmVyKSB7XHJcbiAgICBsZXQgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XHJcbiAgICB0aGlzLnNyY0JsZW5kID0gc3JjQmxlbmQ7XHJcbiAgICB0aGlzLmRzdEJsZW5kID0gZHN0QmxlbmQ7XHJcbiAgICBpZiAodGhpcy5pc0RyYXdpbmcpIHtcclxuICAgICAgdGhpcy5mbHVzaCgpO1xyXG4gICAgICBnbC5ibGVuZEZ1bmModGhpcy5zcmNCbGVuZCwgdGhpcy5kc3RCbGVuZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyYXcoXHJcbiAgICB0ZXh0dXJlOiBHTFRleHR1cmUsXHJcbiAgICB2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sXHJcbiAgICBpbmRpY2VzOiBBcnJheTxudW1iZXI+XHJcbiAgKSB7XHJcbiAgICBpZiAodGV4dHVyZSAhPSB0aGlzLmxhc3RUZXh0dXJlKSB7XHJcbiAgICAgIHRoaXMuZmx1c2goKTtcclxuICAgICAgdGhpcy5sYXN0VGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLnZlcnRpY2VzTGVuZ3RoICsgdmVydGljZXMubGVuZ3RoID4gdGhpcy5tZXNoLmdldFZlcnRpY2VzKCkubGVuZ3RoIHx8XHJcbiAgICAgIHRoaXMuaW5kaWNlc0xlbmd0aCArIGluZGljZXMubGVuZ3RoID4gdGhpcy5tZXNoLmdldEluZGljZXMoKS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZsdXNoKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgaW5kZXhTdGFydCA9IHRoaXMubWVzaC5udW1WZXJ0aWNlcygpO1xyXG4gICAgdGhpcy5tZXNoLmdldFZlcnRpY2VzKCkuc2V0KHZlcnRpY2VzLCB0aGlzLnZlcnRpY2VzTGVuZ3RoKTtcclxuICAgIHRoaXMudmVydGljZXNMZW5ndGggKz0gdmVydGljZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5tZXNoLnNldFZlcnRpY2VzTGVuZ3RoKHRoaXMudmVydGljZXNMZW5ndGgpO1xyXG4gICAgbGV0IGluZGljZXNBcnJheSA9IHRoaXMubWVzaC5nZXRJbmRpY2VzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gdGhpcy5pbmRpY2VzTGVuZ3RoLCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBpKyssIGorKylcclxuICAgICAgaW5kaWNlc0FycmF5W2ldID0gaW5kaWNlc1tqXSArIGluZGV4U3RhcnQ7XHJcbiAgICB0aGlzLmluZGljZXNMZW5ndGggKz0gaW5kaWNlcy5sZW5ndGg7XHJcbiAgICB0aGlzLm1lc2guc2V0SW5kaWNlc0xlbmd0aCh0aGlzLmluZGljZXNMZW5ndGgpO1xyXG4gIH1cclxuICBwcml2YXRlIGZsdXNoKCkge1xyXG4gICAgbGV0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xyXG4gICAgaWYgKHRoaXMudmVydGljZXNMZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgdGhpcy5sYXN0VGV4dHVyZS5iaW5kKCk7XHJcbiAgICB0aGlzLm1lc2guZHJhdyh0aGlzLnNoYWRlciwgZ2wuVFJJQU5HTEVTKTtcclxuICAgIHRoaXMudmVydGljZXNMZW5ndGggPSAwO1xyXG4gICAgdGhpcy5pbmRpY2VzTGVuZ3RoID0gMDtcclxuICAgIHRoaXMubWVzaC5zZXRWZXJ0aWNlc0xlbmd0aCgwKTtcclxuICAgIHRoaXMubWVzaC5zZXRJbmRpY2VzTGVuZ3RoKDApO1xyXG4gICAgdGhpcy5kcmF3Q2FsbHMrKztcclxuICB9XHJcbiAgZW5kKCkge1xyXG4gICAgbGV0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xyXG4gICAgaWYgKCF0aGlzLmlzRHJhd2luZylcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIFwiUG9seWdvbkJhdGNoIGlzIG5vdCBkcmF3aW5nLiBDYWxsIFBvbHlnb25CYXRjaC5iZWdpbigpIGJlZm9yZSBjYWxsaW5nIFBvbHlnb25CYXRjaC5lbmQoKVwiXHJcbiAgICAgICk7XHJcbiAgICBpZiAodGhpcy52ZXJ0aWNlc0xlbmd0aCA+IDAgfHwgdGhpcy5pbmRpY2VzTGVuZ3RoID4gMCkgdGhpcy5mbHVzaCgpO1xyXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5sYXN0VGV4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLmlzRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7XHJcbiAgfVxyXG4gIGdldERyYXdDYWxscygpIHtcclxuICAgIHJldHVybiB0aGlzLmRyYXdDYWxscztcclxuICB9XHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMubWVzaC5kaXNwb3NlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==