ngx-spine
Version:
[](https://travis-ci.org/PoiScript/ngx-spine)
246 lines • 24 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/******************************************************************************
* 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 { Utils } from "../Utils";
/**
* @abstract
*/
var /**
* @abstract
*/
Attachment = /** @class */ (function () {
function Attachment(name) {
if (name == null)
throw new Error("name cannot be null.");
this.name = name;
}
return Attachment;
}());
/**
* @abstract
*/
export { Attachment };
if (false) {
/** @type {?} */
Attachment.prototype.name;
/**
* @abstract
* @return {?}
*/
Attachment.prototype.copy = function () { };
}
/**
* @abstract
*/
var VertexAttachment = /** @class */ (function (_super) {
tslib_1.__extends(VertexAttachment, _super);
function VertexAttachment(name) {
var _this = _super.call(this, name) || this;
_this.id = (VertexAttachment.nextID++ & 65535) << 11;
_this.worldVerticesLength = 0;
_this.deformAttachment = _this;
return _this;
}
/** Transforms local vertices to world coordinates.
* @param start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.
* @param count The number of world vertex values to output. Must be <= {@link #getWorldVerticesLength()} - start.
* @param worldVertices The output world vertices. Must have a length >= offset + count.
* @param offset The worldVertices index to begin writing values. */
/**
* Transforms local vertices to world coordinates.
* @param {?} slot
* @param {?} start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.
* @param {?} count The number of world vertex values to output. Must be <= {\@link #getWorldVerticesLength()} - start.
* @param {?} worldVertices The output world vertices. Must have a length >= offset + count.
* @param {?} offset The worldVertices index to begin writing values.
* @param {?} stride
* @return {?}
*/
VertexAttachment.prototype.computeWorldVertices = /**
* Transforms local vertices to world coordinates.
* @param {?} slot
* @param {?} start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.
* @param {?} count The number of world vertex values to output. Must be <= {\@link #getWorldVerticesLength()} - start.
* @param {?} worldVertices The output world vertices. Must have a length >= offset + count.
* @param {?} offset The worldVertices index to begin writing values.
* @param {?} stride
* @return {?}
*/
function (slot, start, count, worldVertices, offset, stride) {
count = offset + (count >> 1) * stride;
/** @type {?} */
var skeleton = slot.bone.skeleton;
/** @type {?} */
var deformArray = slot.deform;
/** @type {?} */
var vertices = this.vertices;
/** @type {?} */
var bones = this.bones;
if (bones == null) {
if (deformArray.length > 0)
vertices = deformArray;
/** @type {?} */
var bone = slot.bone;
/** @type {?} */
var x = bone.worldX;
/** @type {?} */
var y = bone.worldY;
/** @type {?} */
var a = bone.a;
/** @type {?} */
var b = bone.b;
/** @type {?} */
var c = bone.c;
/** @type {?} */
var d = bone.d;
for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {
/** @type {?} */
var vx = vertices[v_1];
/** @type {?} */
var vy = vertices[v_1 + 1];
worldVertices[w] = vx * a + vy * b + x;
worldVertices[w + 1] = vx * c + vy * d + y;
}
return;
}
/** @type {?} */
var v = 0;
/** @type {?} */
var skip = 0;
for (var i = 0; i < start; i += 2) {
/** @type {?} */
var n = bones[v];
v += n + 1;
skip += n;
}
/** @type {?} */
var skeletonBones = skeleton.bones;
if (deformArray.length == 0) {
for (var w = offset, b = skip * 3; w < count; w += stride) {
/** @type {?} */
var wx = 0;
/** @type {?} */
var wy = 0;
/** @type {?} */
var n = bones[v++];
n += v;
for (; v < n; v++, b += 3) {
/** @type {?} */
var bone = skeletonBones[bones[v]];
/** @type {?} */
var vx = vertices[b];
/** @type {?} */
var vy = vertices[b + 1];
/** @type {?} */
var weight = vertices[b + 2];
wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
}
worldVertices[w] = wx;
worldVertices[w + 1] = wy;
}
}
else {
/** @type {?} */
var deform = deformArray;
for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {
/** @type {?} */
var wx = 0;
/** @type {?} */
var wy = 0;
/** @type {?} */
var n = bones[v++];
n += v;
for (; v < n; v++, b += 3, f += 2) {
/** @type {?} */
var bone = skeletonBones[bones[v]];
/** @type {?} */
var vx = vertices[b] + deform[f];
/** @type {?} */
var vy = vertices[b + 1] + deform[f + 1];
/** @type {?} */
var weight = vertices[b + 2];
wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
}
worldVertices[w] = wx;
worldVertices[w + 1] = wy;
}
}
};
/**
* @param {?} attachment
* @return {?}
*/
VertexAttachment.prototype.copyTo = /**
* @param {?} attachment
* @return {?}
*/
function (attachment) {
if (this.bones != null) {
attachment.bones = new Array(this.bones.length);
Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);
}
else
attachment.bones = null;
if (this.vertices != null) {
attachment.vertices = Utils.newFloatArray(this.vertices.length);
Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);
}
else
attachment.vertices = null;
attachment.worldVerticesLength = this.worldVerticesLength;
attachment.deformAttachment = this.deformAttachment;
};
VertexAttachment.nextID = 0;
return VertexAttachment;
}(Attachment));
export { VertexAttachment };
if (false) {
/**
* @type {?}
* @private
*/
VertexAttachment.nextID;
/** @type {?} */
VertexAttachment.prototype.id;
/** @type {?} */
VertexAttachment.prototype.bones;
/** @type {?} */
VertexAttachment.prototype.vertices;
/** @type {?} */
VertexAttachment.prototype.worldVerticesLength;
/** @type {?} */
VertexAttachment.prototype.deformAttachment;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zcGluZS8iLCJzb3VyY2VzIjpbImxpYi9zcGluZS10cy9jb3JlL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLE9BQU8sRUFBYSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFHNUM7Ozs7SUFHRSxvQkFBWSxJQUFZO1FBQ3RCLElBQUksSUFBSSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUdILGlCQUFDO0FBQUQsQ0FBQyxBQVRELElBU0M7Ozs7Ozs7SUFSQywwQkFBYTs7Ozs7SUFPYiw0Q0FBNEI7Ozs7O0FBRzlCO0lBQStDLDRDQUFVO0lBU3ZELDBCQUFZLElBQVk7UUFBeEIsWUFDRSxrQkFBTSxJQUFJLENBQUMsU0FDWjtRQVJELFFBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUcvQyx5QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsc0JBQWdCLEdBQXFCLEtBQUksQ0FBQzs7SUFJMUMsQ0FBQztJQUVEOzs7O3dFQUlvRTs7Ozs7Ozs7Ozs7SUFDcEUsK0NBQW9COzs7Ozs7Ozs7O0lBQXBCLFVBQ0UsSUFBVSxFQUNWLEtBQWEsRUFDYixLQUFhLEVBQ2IsYUFBZ0MsRUFDaEMsTUFBYyxFQUNkLE1BQWM7UUFFZCxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQzs7WUFDbkMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTs7WUFDN0IsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNOztZQUN6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O0NBQUEsQUF0SEQsQ0FBK0MsVUFBVSxHQXNIeEQ7U0F0SHFCLGdCQUFnQjs7Ozs7O0lBQ3BDLHdCQUEwQjs7SUFFMUIsOEJBQStDOztJQUMvQyxpQ0FBcUI7O0lBQ3JCLG9DQUE0Qjs7SUFDNUIsK0NBQXdCOztJQUN4Qiw0Q0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XHJcbiAqIExhc3QgdXBkYXRlZCBNYXkgMSwgMjAxOS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXHJcbiAqXHJcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xyXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxyXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxyXG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcclxuICpcclxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXHJcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcclxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxyXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcclxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXHJcbiAqXHJcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1NcclxuICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xyXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTlxyXG4gKiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcclxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcclxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBCVVNJTkVTU1xyXG4gKiBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXHJcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xyXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXHJcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbmltcG9ydCB7IEFycmF5TGlrZSwgVXRpbHMgfSBmcm9tIFwiLi4vVXRpbHNcIjtcclxuaW1wb3J0IHsgU2xvdCB9IGZyb20gXCIuLi9TbG90XCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXR0YWNobWVudCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChuYW1lID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIm5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICB9XHJcblxyXG4gIGFic3RyYWN0IGNvcHkoKTogQXR0YWNobWVudDtcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZlcnRleEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SUQgPSAwO1xyXG5cclxuICBpZCA9IChWZXJ0ZXhBdHRhY2htZW50Lm5leHRJRCsrICYgNjU1MzUpIDw8IDExO1xyXG4gIGJvbmVzOiBBcnJheTxudW1iZXI+O1xyXG4gIHZlcnRpY2VzOiBBcnJheUxpa2U8bnVtYmVyPjtcclxuICB3b3JsZFZlcnRpY2VzTGVuZ3RoID0gMDtcclxuICBkZWZvcm1BdHRhY2htZW50OiBWZXJ0ZXhBdHRhY2htZW50ID0gdGhpcztcclxuXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihuYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKiBUcmFuc2Zvcm1zIGxvY2FsIHZlcnRpY2VzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLlxyXG4gICAqIEBwYXJhbSBzdGFydCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGxvY2FsIHZlcnRleCB2YWx1ZSB0byB0cmFuc2Zvcm0uIEVhY2ggdmVydGV4IGhhcyAyIHZhbHVlcywgeCBhbmQgeS5cclxuICAgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiB3b3JsZCB2ZXJ0ZXggdmFsdWVzIHRvIG91dHB1dC4gTXVzdCBiZSA8PSB7QGxpbmsgI2dldFdvcmxkVmVydGljZXNMZW5ndGgoKX0gLSBzdGFydC5cclxuICAgKiBAcGFyYW0gd29ybGRWZXJ0aWNlcyBUaGUgb3V0cHV0IHdvcmxkIHZlcnRpY2VzLiBNdXN0IGhhdmUgYSBsZW5ndGggPj0gb2Zmc2V0ICsgY291bnQuXHJcbiAgICogQHBhcmFtIG9mZnNldCBUaGUgd29ybGRWZXJ0aWNlcyBpbmRleCB0byBiZWdpbiB3cml0aW5nIHZhbHVlcy4gKi9cclxuICBjb21wdXRlV29ybGRWZXJ0aWNlcyhcclxuICAgIHNsb3Q6IFNsb3QsXHJcbiAgICBzdGFydDogbnVtYmVyLFxyXG4gICAgY291bnQ6IG51bWJlcixcclxuICAgIHdvcmxkVmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+LFxyXG4gICAgb2Zmc2V0OiBudW1iZXIsXHJcbiAgICBzdHJpZGU6IG51bWJlclxyXG4gICkge1xyXG4gICAgY291bnQgPSBvZmZzZXQgKyAoY291bnQgPj4gMSkgKiBzdHJpZGU7XHJcbiAgICBsZXQgc2tlbGV0b24gPSBzbG90LmJvbmUuc2tlbGV0b247XHJcbiAgICBsZXQgZGVmb3JtQXJyYXkgPSBzbG90LmRlZm9ybTtcclxuICAgIGxldCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICBsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xyXG4gICAgaWYgKGJvbmVzID09IG51bGwpIHtcclxuICAgICAgaWYgKGRlZm9ybUFycmF5Lmxlbmd0aCA+IDApIHZlcnRpY2VzID0gZGVmb3JtQXJyYXk7XHJcbiAgICAgIGxldCBib25lID0gc2xvdC5ib25lO1xyXG4gICAgICBsZXQgeCA9IGJvbmUud29ybGRYO1xyXG4gICAgICBsZXQgeSA9IGJvbmUud29ybGRZO1xyXG4gICAgICBsZXQgYSA9IGJvbmUuYSxcclxuICAgICAgICBiID0gYm9uZS5iLFxyXG4gICAgICAgIGMgPSBib25lLmMsXHJcbiAgICAgICAgZCA9IGJvbmUuZDtcclxuICAgICAgZm9yIChsZXQgdiA9IHN0YXJ0LCB3ID0gb2Zmc2V0OyB3IDwgY291bnQ7IHYgKz0gMiwgdyArPSBzdHJpZGUpIHtcclxuICAgICAgICBsZXQgdnggPSB2ZXJ0aWNlc1t2XSxcclxuICAgICAgICAgIHZ5ID0gdmVydGljZXNbdiArIDFdO1xyXG4gICAgICAgIHdvcmxkVmVydGljZXNbd10gPSB2eCAqIGEgKyB2eSAqIGIgKyB4O1xyXG4gICAgICAgIHdvcmxkVmVydGljZXNbdyArIDFdID0gdnggKiBjICsgdnkgKiBkICsgeTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdiA9IDAsXHJcbiAgICAgIHNraXAgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydDsgaSArPSAyKSB7XHJcbiAgICAgIGxldCBuID0gYm9uZXNbdl07XHJcbiAgICAgIHYgKz0gbiArIDE7XHJcbiAgICAgIHNraXAgKz0gbjtcclxuICAgIH1cclxuICAgIGxldCBza2VsZXRvbkJvbmVzID0gc2tlbGV0b24uYm9uZXM7XHJcbiAgICBpZiAoZGVmb3JtQXJyYXkubGVuZ3RoID09IDApIHtcclxuICAgICAgZm9yIChsZXQgdyA9IG9mZnNldCwgYiA9IHNraXAgKiAzOyB3IDwgY291bnQ7IHcgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgbGV0IHd4ID0gMCxcclxuICAgICAgICAgIHd5ID0gMDtcclxuICAgICAgICBsZXQgbiA9IGJvbmVzW3YrK107XHJcbiAgICAgICAgbiArPSB2O1xyXG4gICAgICAgIGZvciAoOyB2IDwgbjsgdisrLCBiICs9IDMpIHtcclxuICAgICAgICAgIGxldCBib25lID0gc2tlbGV0b25Cb25lc1tib25lc1t2XV07XHJcbiAgICAgICAgICBsZXQgdnggPSB2ZXJ0aWNlc1tiXSxcclxuICAgICAgICAgICAgdnkgPSB2ZXJ0aWNlc1tiICsgMV0sXHJcbiAgICAgICAgICAgIHdlaWdodCA9IHZlcnRpY2VzW2IgKyAyXTtcclxuICAgICAgICAgIHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xyXG4gICAgICAgICAgd3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdvcmxkVmVydGljZXNbd10gPSB3eDtcclxuICAgICAgICB3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGVmb3JtID0gZGVmb3JtQXJyYXk7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IHcgPSBvZmZzZXQsIGIgPSBza2lwICogMywgZiA9IHNraXAgPDwgMTtcclxuICAgICAgICB3IDwgY291bnQ7XHJcbiAgICAgICAgdyArPSBzdHJpZGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHd4ID0gMCxcclxuICAgICAgICAgIHd5ID0gMDtcclxuICAgICAgICBsZXQgbiA9IGJvbmVzW3YrK107XHJcbiAgICAgICAgbiArPSB2O1xyXG4gICAgICAgIGZvciAoOyB2IDwgbjsgdisrLCBiICs9IDMsIGYgKz0gMikge1xyXG4gICAgICAgICAgbGV0IGJvbmUgPSBza2VsZXRvbkJvbmVzW2JvbmVzW3ZdXTtcclxuICAgICAgICAgIGxldCB2eCA9IHZlcnRpY2VzW2JdICsgZGVmb3JtW2ZdLFxyXG4gICAgICAgICAgICB2eSA9IHZlcnRpY2VzW2IgKyAxXSArIGRlZm9ybVtmICsgMV0sXHJcbiAgICAgICAgICAgIHdlaWdodCA9IHZlcnRpY2VzW2IgKyAyXTtcclxuICAgICAgICAgIHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xyXG4gICAgICAgICAgd3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdvcmxkVmVydGljZXNbd10gPSB3eDtcclxuICAgICAgICB3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5VG8oYXR0YWNobWVudDogVmVydGV4QXR0YWNobWVudCkge1xyXG4gICAgaWYgKHRoaXMuYm9uZXMgIT0gbnVsbCkge1xyXG4gICAgICBhdHRhY2htZW50LmJvbmVzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5ib25lcy5sZW5ndGgpO1xyXG4gICAgICBVdGlscy5hcnJheUNvcHkodGhpcy5ib25lcywgMCwgYXR0YWNobWVudC5ib25lcywgMCwgdGhpcy5ib25lcy5sZW5ndGgpO1xyXG4gICAgfSBlbHNlIGF0dGFjaG1lbnQuYm9uZXMgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLnZlcnRpY2VzICE9IG51bGwpIHtcclxuICAgICAgYXR0YWNobWVudC52ZXJ0aWNlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkodGhpcy52ZXJ0aWNlcy5sZW5ndGgpO1xyXG4gICAgICBVdGlscy5hcnJheUNvcHkoXHJcbiAgICAgICAgdGhpcy52ZXJ0aWNlcyxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGF0dGFjaG1lbnQudmVydGljZXMsXHJcbiAgICAgICAgMCxcclxuICAgICAgICB0aGlzLnZlcnRpY2VzLmxlbmd0aFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGF0dGFjaG1lbnQudmVydGljZXMgPSBudWxsO1xyXG5cclxuICAgIGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCA9IHRoaXMud29ybGRWZXJ0aWNlc0xlbmd0aDtcclxuICAgIGF0dGFjaG1lbnQuZGVmb3JtQXR0YWNobWVudCA9IHRoaXMuZGVmb3JtQXR0YWNobWVudDtcclxuICB9XHJcbn1cclxuIl19