ngx-spine
Version:
[](https://travis-ci.org/PoiScript/ngx-spine)
174 lines • 16.8 kB
JavaScript
/**
* @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 { BlendMode } from "../core/BlendMode";
export class ManagedWebGLRenderingContext {
/**
* @param {?} canvasOrContext
* @param {?=} contextConfig
*/
constructor(canvasOrContext, contextConfig = { alpha: "true" }) {
this.restorables = new Array();
if (canvasOrContext instanceof HTMLCanvasElement) {
/** @type {?} */
let canvas = canvasOrContext;
this.gl = (/** @type {?} */ (((canvas.getContext("webgl", contextConfig) ||
canvas.getContext("experimental-webgl", contextConfig)))));
this.canvas = canvas;
canvas.addEventListener("webglcontextlost", (/**
* @param {?} e
* @return {?}
*/
(e) => {
/** @type {?} */
let event = (/** @type {?} */ (e));
if (e) {
e.preventDefault();
}
}));
canvas.addEventListener("webglcontextrestored", (/**
* @param {?} e
* @return {?}
*/
(e) => {
for (let i = 0, n = this.restorables.length; i < n; i++) {
this.restorables[i].restore();
}
}));
}
else {
this.gl = canvasOrContext;
this.canvas = (/** @type {?} */ (this.gl.canvas));
}
}
/**
* @param {?} restorable
* @return {?}
*/
addRestorable(restorable) {
this.restorables.push(restorable);
}
/**
* @param {?} restorable
* @return {?}
*/
removeRestorable(restorable) {
/** @type {?} */
let index = this.restorables.indexOf(restorable);
if (index > -1)
this.restorables.splice(index, 1);
}
}
if (false) {
/** @type {?} */
ManagedWebGLRenderingContext.prototype.canvas;
/** @type {?} */
ManagedWebGLRenderingContext.prototype.gl;
/**
* @type {?}
* @private
*/
ManagedWebGLRenderingContext.prototype.restorables;
}
export class WebGLBlendModeConverter {
/**
* @param {?} blendMode
* @return {?}
*/
static getDestGLBlendMode(blendMode) {
switch (blendMode) {
case BlendMode.Normal:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
case BlendMode.Additive:
return WebGLBlendModeConverter.ONE;
case BlendMode.Multiply:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
case BlendMode.Screen:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
default:
throw new Error("Unknown blend mode: " + blendMode);
}
}
/**
* @param {?} blendMode
* @param {?=} premultipliedAlpha
* @return {?}
*/
static getSourceGLBlendMode(blendMode, premultipliedAlpha = false) {
switch (blendMode) {
case BlendMode.Normal:
return premultipliedAlpha
? WebGLBlendModeConverter.ONE
: WebGLBlendModeConverter.SRC_ALPHA;
case BlendMode.Additive:
return premultipliedAlpha
? WebGLBlendModeConverter.ONE
: WebGLBlendModeConverter.SRC_ALPHA;
case BlendMode.Multiply:
return WebGLBlendModeConverter.DST_COLOR;
case BlendMode.Screen:
return WebGLBlendModeConverter.ONE;
default:
throw new Error("Unknown blend mode: " + blendMode);
}
}
}
WebGLBlendModeConverter.ZERO = 0;
WebGLBlendModeConverter.ONE = 1;
WebGLBlendModeConverter.SRC_COLOR = 0x0300;
WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301;
WebGLBlendModeConverter.SRC_ALPHA = 0x0302;
WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303;
WebGLBlendModeConverter.DST_ALPHA = 0x0304;
WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305;
WebGLBlendModeConverter.DST_COLOR = 0x0306;
if (false) {
/** @type {?} */
WebGLBlendModeConverter.ZERO;
/** @type {?} */
WebGLBlendModeConverter.ONE;
/** @type {?} */
WebGLBlendModeConverter.SRC_COLOR;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR;
/** @type {?} */
WebGLBlendModeConverter.SRC_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.DST_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.DST_COLOR;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViR0wuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvd2ViZ2wvV2ViR0wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE1BQU0sT0FBTyw0QkFBNEI7Ozs7O0lBSXZDLFlBQ0UsZUFBMEQsRUFDMUQsZ0JBQXFCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUhoQyxnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7UUFLNUMsSUFBSSxlQUFlLFlBQVksaUJBQWlCLEVBQUU7O2dCQUM1QyxNQUFNLEdBQUcsZUFBZTtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLG1CQUF1QixDQUMvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUMxRCxFQUFBLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCOzs7O1lBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7b0JBQ2pELEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFBO2dCQUNoQyxJQUFJLENBQUMsRUFBRTtvQkFDTCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCOzs7O1lBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVB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Q3BDLGtDQUEwQjs7SUFDMUIsNENBQW9DOztJQUNwQyxrQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XHJcbiAqIExhc3QgdXBkYXRlZCBNYXkgMSwgMjAxOS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXHJcbiAqXHJcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xyXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxyXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxyXG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcclxuICpcclxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXHJcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcclxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxyXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcclxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXHJcbiAqXHJcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1NcclxuICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xyXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTlxyXG4gKiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcclxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcclxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBCVVNJTkVTU1xyXG4gKiBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXHJcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xyXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXHJcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbmltcG9ydCB7IFJlc3RvcmFibGUgfSBmcm9tIFwiLi4vY29yZS9VdGlsc1wiO1xyXG5pbXBvcnQgeyBCbGVuZE1vZGUgfSBmcm9tIFwiLi4vY29yZS9CbGVuZE1vZGVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VkV2ViR0xSZW5kZXJpbmdDb250ZXh0IHtcclxuICBwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICBwdWJsaWMgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcclxuICBwcml2YXRlIHJlc3RvcmFibGVzID0gbmV3IEFycmF5PFJlc3RvcmFibGU+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjYW52YXNPckNvbnRleHQ6IEhUTUxDYW52YXNFbGVtZW50IHwgV2ViR0xSZW5kZXJpbmdDb250ZXh0LFxyXG4gICAgY29udGV4dENvbmZpZzogYW55ID0geyBhbHBoYTogXCJ0cnVlXCIgfVxyXG4gICkge1xyXG4gICAgaWYgKGNhbnZhc09yQ29udGV4dCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7XHJcbiAgICAgIGxldCBjYW52YXMgPSBjYW52YXNPckNvbnRleHQ7XHJcbiAgICAgIHRoaXMuZ2wgPSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihcclxuICAgICAgICAoY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLCBjb250ZXh0Q29uZmlnKSB8fFxyXG4gICAgICAgICAgY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIiwgY29udGV4dENvbmZpZykpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xyXG4gICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBldmVudCA9IDxXZWJHTENvbnRleHRFdmVudD5lO1xyXG4gICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnJlc3RvcmFibGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5yZXN0b3JhYmxlc1tpXS5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2wgPSBjYW52YXNPckNvbnRleHQ7XHJcbiAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5nbC5jYW52YXMgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFJlc3RvcmFibGUocmVzdG9yYWJsZTogUmVzdG9yYWJsZSkge1xyXG4gICAgdGhpcy5yZXN0b3JhYmxlcy5wdXNoKHJlc3RvcmFibGUpO1xyXG4gIH1cclxuICByZW1vdmVSZXN0b3JhYmxlKHJlc3RvcmFibGU6IFJlc3RvcmFibGUpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMucmVzdG9yYWJsZXMuaW5kZXhPZihyZXN0b3JhYmxlKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLnJlc3RvcmFibGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlciB7XHJcbiAgc3RhdGljIFpFUk8gPSAwO1xyXG4gIHN0YXRpYyBPTkUgPSAxO1xyXG4gIHN0YXRpYyBTUkNfQ09MT1IgPSAweDAzMDA7XHJcbiAgc3RhdGljIE9ORV9NSU5VU19TUkNfQ09MT1IgPSAweDAzMDE7XHJcbiAgc3RhdGljIFNSQ19BTFBIQSA9IDB4MDMwMjtcclxuICBzdGF0aWMgT05FX01JTlVTX1NSQ19BTFBIQSA9IDB4MDMwMztcclxuICBzdGF0aWMgRFNUX0FMUEhBID0gMHgwMzA0O1xyXG4gIHN0YXRpYyBPTkVfTUlOVVNfRFNUX0FMUEhBID0gMHgwMzA1O1xyXG4gIHN0YXRpYyBEU1RfQ09MT1IgPSAweDAzMDY7XHJcbiAgc3RhdGljIGdldERlc3RHTEJsZW5kTW9kZShibGVuZE1vZGU6IEJsZW5kTW9kZSkge1xyXG4gICAgc3dpdGNoIChibGVuZE1vZGUpIHtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuTm9ybWFsOlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVfTUlOVVNfU1JDX0FMUEhBO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5BZGRpdGl2ZTpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5NdWx0aXBseTpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FX01JTlVTX1NSQ19BTFBIQTtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuU2NyZWVuOlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVfTUlOVVNfU1JDX0FMUEhBO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYmxlbmQgbW9kZTogXCIgKyBibGVuZE1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZ2V0U291cmNlR0xCbGVuZE1vZGUoXHJcbiAgICBibGVuZE1vZGU6IEJsZW5kTW9kZSxcclxuICAgIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKGJsZW5kTW9kZSkge1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5Ob3JtYWw6XHJcbiAgICAgICAgcmV0dXJuIHByZW11bHRpcGxpZWRBbHBoYVxyXG4gICAgICAgICAgPyBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVcclxuICAgICAgICAgIDogV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuU1JDX0FMUEhBO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5BZGRpdGl2ZTpcclxuICAgICAgICByZXR1cm4gcHJlbXVsdGlwbGllZEFscGhhXHJcbiAgICAgICAgICA/IFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLk9ORVxyXG4gICAgICAgICAgOiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5TUkNfQUxQSEE7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLk11bHRpcGx5OlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5EU1RfQ09MT1I7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLlNjcmVlbjpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYmxlbmQgbW9kZTogXCIgKyBibGVuZE1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=