Subversion Repository Public Repository

Nextrek

Diff Revisions 1085 vs 1086 for /s2s/data/B2F84FFAKF97DA4149SAB47E8B89F3C10D30.json

Diff revisions: vs.
  @@ -6,10 +6,10 @@
6 6 "name": "Component_Sprite",
7 7 "type": "game_script",
8 8 "order": 4,
9 - "content": "# ===================================================================\n#\n# Script: Component\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_Sprite extends gs.Component_Visual\n ###*\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n ###\n onDataBundleRestore: (data, context) ->\n @setupEventHandlers()\n \n ###*\n * A sprite component to display an object on screen. It can be managed or\n * unmanaged. A managed sprite is automatically added to the graphics-system\n * and rendered every frame until it gets disposed. An unmanaged sprite needs\n * to be added and removed manually.\n *\n * @module gs\n * @class Component_Sprite\n * @extends gs.Component_Visual\n * @memberof gs\n * @constructor\n * @param {boolean} managed - Indicates if the sprite is managed by the graphics system.\n ###\n constructor: (managed) ->\n super()\n\n ###*\n * The native sprite object to display the game object on screen.\n *\n * @property sprite\n * @type Sprite\n * @protected\n ###\n @sprite = null\n \n ###*\n * The name of the image to display.\n *\n * @property image\n * @type string\n * @protected\n ###\n @image = null\n \n ###*\n * The name of the video to display.\n *\n * @property video\n * @type string\n * @protected\n ###\n @video = null\n \n ###*\n * The name of the folder from where the image should be loaded.\n *\n * @property image\n * @type string\n * @protected\n ###\n @imageFolder = \"Graphics/Pictures\"\n \n ###*\n * The visibility. If <b>false</b>, the sprite is not rendered.\n *\n * @property visible\n * @type boolean\n * @protected\n ###\n @visible = no\n\n ###*\n * Indicates if the image is loaded.\n *\n * @property imageLoaded\n * @type boolean\n * @protected\n ###\n @imageLoaded = no\n \n ###*\n * Disposes the sprite. If the sprite is managed, it will be automatically\n * removed from the graphics system and viewport.\n * @method dispose\n ###\n dispose: -> \n super\n \n if @sprite\n @sprite.dispose()\n \n if @sprite.video\n @sprite.video.stop()\n \n if not @sprite.managed\n @sprite.viewport?.removeGraphicObject(@sprite)\n Graphics.viewport?.removeGraphicObject(@sprite)\n \n ###*\n * Adds event-handlers for mouse/touch events\n *\n * @method setupEventHandlers\n ### \n setupEventHandlers: ->\n @sprite.onIndexChange = =>\n @object.rIndex = @sprite.index\n @object.needsUpdate = yes\n \n ###*\n * Setup the sprite.\n * @method setupSprite\n ### \n setupSprite: ->\n if !@sprite\n @sprite = new Sprite(Graphics.viewport, managed ? yes)\n \n ###*\n * Setup the sprite component. This method is automatically called by the\n * system.\n * @method setup\n ###\n setup: ->\n @isSetup = yes\n @setupSprite()\n @setupEventHandlers()\n @update()\n \n \n ###*\n * Updates the source- and destination-rectangle of the game object so that\n * the associated bitmap fits in. The imageHandling property controls how\n * the rectangles are resized.\n * @method updateRect\n ###\n updateRect: ->\n if @sprite.bitmap?\n if !@object.imageHandling\n @object.srcRect = new Rect(0, 0, @sprite.bitmap.width, @sprite.bitmap.height)\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n else if @object.imageHandling == 1\n @object.srcRect = new Rect(0, 0, @sprite.bitmap.width, @sprite.bitmap.height / 2)\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n else if @object.imageHandling == 2\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n \n ###*\n * Updates the bitmap object from the associated image name. The imageFolder\n * property controls from which resource-folder the image will be loaded.\n * @method updateBitmap\n ###\n updateBitmap: ->\n @imageLoaded = no\n @image = @object.image\n \n if @object.image.startsWith(\"data:\") || @object.image.startsWith(\"$\")\n @sprite.bitmap = ResourceManager.getBitmap(@object.image)\n else\n @sprite.bitmap = ResourceManager.getBitmap(\"#{@object.imageFolder||@imageFolder}/#{@object.image}\")\n \n if @sprite.bitmap? \n if not @imageLoaded\n @imageLoaded = @sprite.bitmap.loaded\n else\n delete @sprite.bitmap.loaded_\n \n @object.bitmap = @sprite.bitmap\n \n ###*\n * Updates the video object from the associated video name. It also updates\n * the video-rendering process.\n * @method updateVideo\n ###\n updateVideo: ->\n if @object.video != @videoName\n @videoName = @object.video\n @sprite.video = ResourceManager.getVideo(\"Movies/#{@object.video}\")\n if @sprite.video?\n if $PARAMS.preview?.settings.musicDisabled\n @sprite.video.volume = 0\n @sprite.video.loop = @object.loop\n @sprite.video.play()\n \n @object.srcRect = new Rect(0, 0, @sprite.video.width, @sprite.video.height)\n if not @object.fixedSize\n @object.dstRect = new Rect(@object.dstRect.x, @object.dstRect.y, @sprite.video.width, @sprite.video.height)\n \n @sprite.video?.update()\n \n ###*\n * Updates the image if the game object has the image-property set.\n * @method updateImage\n ###\n updateImage: ->\n if @object.image?\n if @object.image != @image or (!@imageLoaded and @sprite.bitmap?.loaded)\n @updateBitmap()\n @updateRect()\n else if @object.bitmap? \n @sprite.bitmap = @object.bitmap\n else if @object.video? or @videoName != @object.video\n @updateVideo()\n else\n @image = null\n @object.bitmap = null\n @sprite.bitmap = null\n \n ###*\n * If the sprite is unmanaged, this method will update the visibility of the\n * sprite. If the sprite leaves the viewport, it will be removed to save \n * performance and automatically added back to the viewport if it enters\n * the viewport.\n * @method updateVisibility\n ###\n updateVisibility: ->\n if !@sprite.managed\n visible = Rect.intersect(@object.dstRect.x+@object.origin.x, @object.dstRect.y+@object.origin.y, @object.dstRect.width, @object.dstRect.height, \n 0, 0, Graphics.width, Graphics.height)\n if visible and !@visible\n (@object.viewport || Graphics.viewport).addGraphicObject(@sprite)\n @visible = yes\n \n if !visible and @visible\n (@object.viewport || Graphics.viewport).removeGraphicObject(@sprite)\n @visible = no\n \n \n ###*\n * Updates the padding.\n * @method updatePadding\n ###\n updatePadding: ->\n if @object.padding?\n @sprite.x += @object.padding.left\n @sprite.y += @object.padding.top\n @sprite.zoomX -= (@object.padding.left+@object.padding.right) / @object.srcRect.width\n @sprite.zoomY -= (@object.padding.bottom+@object.padding.bottom) / @object.srcRect.height\n \n ###*\n * Updates the sprite properties from the game object properties.\n * @method updateProperties\n ###\n updateProperties: ->\n @sprite.width = @object.dstRect.width\n @sprite.height = @object.dstRect.height\n @sprite.x = @object.dstRect.x \n @sprite.y = @object.dstRect.y\n @sprite.mask = @object.mask ? @mask\n @sprite.angle = @object.angle || 0\n @sprite.opacity = @object.opacity ? 255\n @sprite.clipRect = @object.clipRect\n @sprite.srcRect = @object.srcRect\n @sprite.blendingMode = @object.blendMode || 0\n @sprite.mirror = @object.mirror\n @sprite.visible = @object.visible and (!@object.parent or !@object.parent.visible? or @object.parent.visible)\n @sprite.ox = -@object.origin.x\n @sprite.oy = -@object.origin.y\n @sprite.z = (@object.zIndex || 0) + (if !@object.parent then 0 else @object.parent.zIndex || 0)\n \n ###*\n * Updates the optional sprite properties from the game object properties.\n * @method updateOptionalProperties\n ###\n updateOptionalProperties: ->\n if @object.tone?\n @sprite.tone = @object.tone\n if @object.color?\n @sprite.color = @object.color\n if @object.viewport?\n @sprite.viewport = @object.viewport\n if @object.effects?\n @sprite.effects = @object.effects\n if @object.anchor?\n @sprite.anchor.x = @object.anchor.x\n @sprite.anchor.y = @object.anchor.y\n if @object.positionAnchor?\n @sprite.positionAnchor = @object.positionAnchor\n if @object.zoom?\n @sprite.zoomX = @object.zoom.x\n @sprite.zoomY = @object.zoom.y\n if @object.motionBlur?\n @sprite.motionBlur = @object.motionBlur\n \n ###*\n * Updates the sprite component by updating its visibility, image, padding and\n * properties.\n * @method update\n ###\n update: ->\n super\n \n @setup() if not @isSetup\n @updateVisibility()\n @updateImage()\n @updateProperties()\n @updateOptionalProperties()\n @updatePadding()\n \n @object.rIndex = @sprite.index\n @sprite.update()\n \n\n###*\n* Enumeration of appearance animations. \n*\n* @module gs\n* @class AnimationTypes\n* @static\n* @memberof gs\n###\nclass AnimationTypes\n @initialize: -> \n ###*\n * An object appears or disappears by moving into or out of the screen.\n * @property MOVEMENT\n * @type number\n * @static\n * @final\n ###\n @MOVEMENT = 0\n ###*\n * An object appears or disappears using alpha-blending.\n * @property BLENDING\n * @type number\n * @static\n * @final\n ###\n @BLENDING = 1\n ###*\n * An object appears or disappears using a mask-image.\n * @property MASKING\n * @type number\n * @static\n * @final\n ###\n @MASKING = 2\n\nAnimationTypes.initialize() \ngs.AnimationTypes = AnimationTypes\ngs.Component_Sprite = Component_Sprite\n",
9 + "content": "# ===================================================================\n#\n# Script: Component\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_Sprite extends gs.Component_Visual\n ###*\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n ###\n onDataBundleRestore: (data, context) ->\n @setupEventHandlers()\n \n ###*\n * A sprite component to display an object on screen. It can be managed or\n * unmanaged. A managed sprite is automatically added to the graphics-system\n * and rendered every frame until it gets disposed. An unmanaged sprite needs\n * to be added and removed manually.\n *\n * @module gs\n * @class Component_Sprite\n * @extends gs.Component_Visual\n * @memberof gs\n * @constructor\n * @param {boolean} managed - Indicates if the sprite is managed by the graphics system.\n ###\n constructor: (managed) ->\n super()\n\n ###*\n * The native sprite object to display the game object on screen.\n *\n * @property sprite\n * @type Sprite\n * @protected\n ###\n @sprite = null\n \n ###*\n * The name of the image to display.\n *\n * @property image\n * @type string\n * @protected\n ###\n @image = null\n \n ###*\n * The name of the video to display.\n *\n * @property video\n * @type string\n * @protected\n ###\n @video = null\n \n ###*\n * The name of the folder from where the image should be loaded.\n *\n * @property image\n * @type string\n * @protected\n ###\n @imageFolder = \"Graphics/Pictures\"\n \n ###*\n * The visibility. If <b>false</b>, the sprite is not rendered.\n *\n * @property visible\n * @type boolean\n * @protected\n ###\n @visible = no\n\n ###*\n * Indicates if the image is loaded.\n *\n * @property imageLoaded\n * @type boolean\n * @protected\n ###\n @imageLoaded = no\n \n \n \n ###*\n * Disposes the sprite. If the sprite is managed, it will be automatically\n * removed from the graphics system and viewport.\n * @method dispose\n ###\n dispose: -> \n super\n \n if @sprite\n @sprite.dispose()\n \n if @sprite.video\n @sprite.video.stop()\n \n if not @sprite.managed\n @sprite.viewport?.removeGraphicObject(@sprite)\n Graphics.viewport?.removeGraphicObject(@sprite)\n \n ###*\n * Adds event-handlers for mouse/touch events\n *\n * @method setupEventHandlers\n ### \n setupEventHandlers: ->\n @sprite.onIndexChange = =>\n @object.rIndex = @sprite.index\n @object.needsUpdate = yes\n \n ###*\n * Setup the sprite. \n * @method setupSprite\n ### \n setupSprite: ->\n if !@sprite\n @sprite = new gs.Sprite(Graphics.viewport, managed ? yes)\n \n ###*\n * Setup the sprite component. This method is automatically called by the\n * system.\n * @method setup\n ###\n setup: ->\n @isSetup = yes\n @setupSprite()\n @setupEventHandlers()\n @update()\n \n \n ###*\n * Updates the source- and destination-rectangle of the game object so that\n * the associated bitmap fits in. The imageHandling property controls how\n * the rectangles are resized.\n * @method updateRect\n ###\n updateRect: ->\n if @sprite.bitmap?\n if !@object.imageHandling\n @object.srcRect = new Rect(0, 0, @sprite.bitmap.width, @sprite.bitmap.height)\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n else if @object.imageHandling == 1\n @object.srcRect = new Rect(0, 0, @sprite.bitmap.width, @sprite.bitmap.height / 2)\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n else if @object.imageHandling == 2\n if not @object.fixedSize\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n \n ###*\n * Updates the bitmap object from the associated image name. The imageFolder\n * property controls from which resource-folder the image will be loaded.\n * @method updateBitmap\n ###\n updateBitmap: ->\n @imageLoaded = no\n @image = @object.image\n \n if @object.image.startsWith(\"data:\") || @object.image.startsWith(\"$\")\n @sprite.bitmap = ResourceManager.getBitmap(@object.image)\n else\n @sprite.bitmap = ResourceManager.getBitmap(\"#{@object.imageFolder||@imageFolder}/#{@object.image}\")\n \n if @sprite.bitmap? \n if not @imageLoaded\n @imageLoaded = @sprite.bitmap.loaded\n else\n delete @sprite.bitmap.loaded_\n \n @object.bitmap = @sprite.bitmap\n \n ###*\n * Updates the video object from the associated video name. It also updates\n * the video-rendering process.\n * @method updateVideo\n ###\n updateVideo: ->\n if @object.video != @videoName\n @videoName = @object.video\n @sprite.video = ResourceManager.getVideo(\"Movies/#{@object.video}\")\n if @sprite.video?\n if $PARAMS.preview?.settings.musicDisabled\n @sprite.video.volume = 0\n @sprite.video.loop = @object.loop\n @sprite.video.play()\n \n @object.srcRect = new Rect(0, 0, @sprite.video.width, @sprite.video.height)\n if not @object.fixedSize\n @object.dstRect = new Rect(@object.dstRect.x, @object.dstRect.y, @sprite.video.width, @sprite.video.height)\n \n @sprite.video?.update()\n \n ###*\n * Updates the image if the game object has the image-property set.\n * @method updateImage\n ###\n updateImage: ->\n if @object.image?\n if @object.image != @image or (!@imageLoaded and @sprite.bitmap?.loaded)\n @updateBitmap()\n @updateRect()\n else if @object.bitmap? \n @sprite.bitmap = @object.bitmap\n else if @object.video? or @videoName != @object.video\n @updateVideo()\n else\n @image = null\n @object.bitmap = null\n @sprite.bitmap = null\n \n ###*\n * If the sprite is unmanaged, this method will update the visibility of the\n * sprite. If the sprite leaves the viewport, it will be removed to save \n * performance and automatically added back to the viewport if it enters\n * the viewport.\n * @method updateVisibility\n ###\n updateVisibility: ->\n if !@sprite.managed\n visible = Rect.intersect(@object.dstRect.x+@object.origin.x, @object.dstRect.y+@object.origin.y, @object.dstRect.width, @object.dstRect.height, \n 0, 0, Graphics.width, Graphics.height)\n if visible and !@visible\n (@object.viewport || Graphics.viewport).addGraphicObject(@sprite)\n @visible = yes\n \n if !visible and @visible\n (@object.viewport || Graphics.viewport).removeGraphicObject(@sprite)\n @visible = no\n \n \n ###*\n * Updates the padding.\n * @method updatePadding\n ###\n updatePadding: ->\n if @object.padding?\n @sprite.x += @object.padding.left\n @sprite.y += @object.padding.top\n @sprite.zoomX -= (@object.padding.left+@object.padding.right) / @object.srcRect.width\n @sprite.zoomY -= (@object.padding.bottom+@object.padding.bottom) / @object.srcRect.height\n \n ###*\n * Updates the sprite properties from the game object properties.\n * @method updateProperties\n ###\n updateProperties: ->\n @sprite.width = @object.dstRect.width\n @sprite.height = @object.dstRect.height\n @sprite.x = @object.dstRect.x \n @sprite.y = @object.dstRect.y\n @sprite.mask = @object.mask ? @mask\n @sprite.angle = @object.angle || 0\n @sprite.opacity = @object.opacity ? 255\n @sprite.clipRect = @object.clipRect\n @sprite.srcRect = @object.srcRect\n @sprite.blendingMode = @object.blendMode || 0\n @sprite.mirror = @object.mirror\n @sprite.visible = @object.visible and (!@object.parent or !@object.parent.visible? or @object.parent.visible)\n @sprite.ox = -@object.origin.x\n @sprite.oy = -@object.origin.y\n @sprite.z = (@object.zIndex || 0) + (if !@object.parent then 0 else @object.parent.zIndex || 0)\n \n ###*\n * Updates the optional sprite properties from the game object properties.\n * @method updateOptionalProperties\n ###\n updateOptionalProperties: ->\n if @object.tone?\n @sprite.tone = @object.tone\n if @object.color?\n @sprite.color = @object.color\n if @object.viewport?\n @sprite.viewport = @object.viewport\n if @object.effects?\n @sprite.effects = @object.effects\n if @object.anchor?\n @sprite.anchor.x = @object.anchor.x\n @sprite.anchor.y = @object.anchor.y\n if @object.positionAnchor?\n @sprite.positionAnchor = @object.positionAnchor\n if @object.zoom?\n @sprite.zoomX = @object.zoom.x\n @sprite.zoomY = @object.zoom.y\n if @object.motionBlur?\n @sprite.motionBlur = @object.motionBlur\n \n ###*\n * Updates the sprite component by updating its visibility, image, padding and\n * properties.\n * @method update\n ###\n update: ->\n super\n \n @setup() if not @isSetup\n @updateVisibility()\n @updateImage()\n @updateProperties()\n @updateOptionalProperties()\n @updatePadding()\n \n @object.rIndex = @sprite.index\n @sprite.update()\n \n\n###*\n* Enumeration of appearance animations. \n*\n* @module gs\n* @class AnimationTypes\n* @static\n* @memberof gs\n###\nclass AnimationTypes\n @initialize: -> \n ###*\n * An object appears or disappears by moving into or out of the screen.\n * @property MOVEMENT\n * @type number\n * @static\n * @final\n ###\n @MOVEMENT = 0\n ###*\n * An object appears or disappears using alpha-blending.\n * @property BLENDING\n * @type number\n * @static\n * @final\n ###\n @BLENDING = 1\n ###*\n * An object appears or disappears using a mask-image.\n * @property MASKING\n * @type number\n * @static\n * @final\n ###\n @MASKING = 2\n\nAnimationTypes.initialize() \ngs.AnimationTypes = AnimationTypes\ngs.Component_Sprite = Component_Sprite\n",
10 10 "parentId": "D3325122KACDEA4515SB731E37A42B9D779F",
11 11 "folder": false,
12 - "compiledContent": "var AnimationTypes, Component_Sprite,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_Sprite = (function(superClass) {\n extend(Component_Sprite, superClass);\n\n\n /**\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n */\n\n Component_Sprite.prototype.onDataBundleRestore = function(data, context) {\n return this.setupEventHandlers();\n };\n\n\n /**\n * A sprite component to display an object on screen. It can be managed or\n * unmanaged. A managed sprite is automatically added to the graphics-system\n * and rendered every frame until it gets disposed. An unmanaged sprite needs\n * to be added and removed manually.\n *\n * @module gs\n * @class Component_Sprite\n * @extends gs.Component_Visual\n * @memberof gs\n * @constructor\n * @param {boolean} managed - Indicates if the sprite is managed by the graphics system.\n */\n\n function Component_Sprite(managed) {\n Component_Sprite.__super__.constructor.call(this);\n\n /**\n * The native sprite object to display the game object on screen.\n *\n * @property sprite\n * @type Sprite\n * @protected\n */\n this.sprite = null;\n\n /**\n * The name of the image to display.\n *\n * @property image\n * @type string\n * @protected\n */\n this.image = null;\n\n /**\n * The name of the video to display.\n *\n * @property video\n * @type string\n * @protected\n */\n this.video = null;\n\n /**\n * The name of the folder from where the image should be loaded.\n *\n * @property image\n * @type string\n * @protected\n */\n this.imageFolder = \"Graphics/Pictures\";\n\n /**\n * The visibility. If <b>false</b>, the sprite is not rendered.\n *\n * @property visible\n * @type boolean\n * @protected\n */\n this.visible = false;\n\n /**\n * Indicates if the image is loaded.\n *\n * @property imageLoaded\n * @type boolean\n * @protected\n */\n this.imageLoaded = false;\n }\n\n\n /**\n * Disposes the sprite. If the sprite is managed, it will be automatically\n * removed from the graphics system and viewport.\n * @method dispose\n */\n\n Component_Sprite.prototype.dispose = function() {\n var ref, ref1;\n Component_Sprite.__super__.dispose.apply(this, arguments);\n if (this.sprite) {\n this.sprite.dispose();\n if (this.sprite.video) {\n this.sprite.video.stop();\n }\n if (!this.sprite.managed) {\n if ((ref = this.sprite.viewport) != null) {\n ref.removeGraphicObject(this.sprite);\n }\n return (ref1 = Graphics.viewport) != null ? ref1.removeGraphicObject(this.sprite) : void 0;\n }\n }\n };\n\n\n /**\n * Adds event-handlers for mouse/touch events\n *\n * @method setupEventHandlers\n */\n\n Component_Sprite.prototype.setupEventHandlers = function() {\n return this.sprite.onIndexChange = (function(_this) {\n return function() {\n _this.object.rIndex = _this.sprite.index;\n return _this.object.needsUpdate = true;\n };\n })(this);\n };\n\n\n /**\n * Setup the sprite.\n * @method setupSprite\n */\n\n Component_Sprite.prototype.setupSprite = function() {\n if (!this.sprite) {\n return this.sprite = new Sprite(Graphics.viewport, typeof managed !== \"undefined\" && managed !== null ? managed : true);\n }\n };\n\n\n /**\n * Setup the sprite component. This method is automatically called by the\n * system.\n * @method setup\n */\n\n Component_Sprite.prototype.setup = function() {\n this.isSetup = true;\n this.setupSprite();\n this.setupEventHandlers();\n return this.update();\n };\n\n\n /**\n * Updates the source- and destination-rectangle of the game object so that\n * the associated bitmap fits in. The imageHandling property controls how\n * the rectangles are resized.\n * @method updateRect\n */\n\n Component_Sprite.prototype.updateRect = function() {\n if (this.sprite.bitmap != null) {\n if (!this.object.imageHandling) {\n this.object.srcRect = new Rect(0, 0, this.sprite.bitmap.width, this.sprite.bitmap.height);\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n } else if (this.object.imageHandling === 1) {\n this.object.srcRect = new Rect(0, 0, this.sprite.bitmap.width, this.sprite.bitmap.height / 2);\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n } else if (this.object.imageHandling === 2) {\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n }\n }\n };\n\n\n /**\n * Updates the bitmap object from the associated image name. The imageFolder\n * property controls from which resource-folder the image will be loaded.\n * @method updateBitmap\n */\n\n Component_Sprite.prototype.updateBitmap = function() {\n this.imageLoaded = false;\n this.image = this.object.image;\n if (this.object.image.startsWith(\"data:\") || this.object.image.startsWith(\"$\")) {\n this.sprite.bitmap = ResourceManager.getBitmap(this.object.image);\n } else {\n this.sprite.bitmap = ResourceManager.getBitmap((this.object.imageFolder || this.imageFolder) + \"/\" + this.object.image);\n }\n if (this.sprite.bitmap != null) {\n if (!this.imageLoaded) {\n this.imageLoaded = this.sprite.bitmap.loaded;\n } else {\n delete this.sprite.bitmap.loaded_;\n }\n }\n return this.object.bitmap = this.sprite.bitmap;\n };\n\n\n /**\n * Updates the video object from the associated video name. It also updates\n * the video-rendering process.\n * @method updateVideo\n */\n\n Component_Sprite.prototype.updateVideo = function() {\n var ref, ref1;\n if (this.object.video !== this.videoName) {\n this.videoName = this.object.video;\n this.sprite.video = ResourceManager.getVideo(\"Movies/\" + this.object.video);\n if (this.sprite.video != null) {\n if ((ref = $PARAMS.preview) != null ? ref.settings.musicDisabled : void 0) {\n this.sprite.video.volume = 0;\n }\n this.sprite.video.loop = this.object.loop;\n this.sprite.video.play();\n this.object.srcRect = new Rect(0, 0, this.sprite.video.width, this.sprite.video.height);\n if (!this.object.fixedSize) {\n this.object.dstRect = new Rect(this.object.dstRect.x, this.object.dstRect.y, this.sprite.video.width, this.sprite.video.height);\n }\n }\n }\n return (ref1 = this.sprite.video) != null ? ref1.update() : void 0;\n };\n\n\n /**\n * Updates the image if the game object has the image-property set.\n * @method updateImage\n */\n\n Component_Sprite.prototype.updateImage = function() {\n var ref;\n if (this.object.image != null) {\n if (this.object.image !== this.image || (!this.imageLoaded && ((ref = this.sprite.bitmap) != null ? ref.loaded : void 0))) {\n this.updateBitmap();\n return this.updateRect();\n }\n } else if (this.object.bitmap != null) {\n return this.sprite.bitmap = this.object.bitmap;\n } else if ((this.object.video != null) || this.videoName !== this.object.video) {\n return this.updateVideo();\n } else {\n this.image = null;\n this.object.bitmap = null;\n return this.sprite.bitmap = null;\n }\n };\n\n\n /**\n * If the sprite is unmanaged, this method will update the visibility of the\n * sprite. If the sprite leaves the viewport, it will be removed to save \n * performance and automatically added back to the viewport if it enters\n * the viewport.\n * @method updateVisibility\n */\n\n Component_Sprite.prototype.updateVisibility = function() {\n var visible;\n if (!this.sprite.managed) {\n visible = Rect.intersect(this.object.dstRect.x + this.object.origin.x, this.object.dstRect.y + this.object.origin.y, this.object.dstRect.width, this.object.dstRect.height, 0, 0, Graphics.width, Graphics.height);\n if (visible && !this.visible) {\n (this.object.viewport || Graphics.viewport).addGraphicObject(this.sprite);\n this.visible = true;\n }\n if (!visible && this.visible) {\n (this.object.viewport || Graphics.viewport).removeGraphicObject(this.sprite);\n return this.visible = false;\n }\n }\n };\n\n\n /**\n * Updates the padding.\n * @method updatePadding\n */\n\n Component_Sprite.prototype.updatePadding = function() {\n if (this.object.padding != null) {\n this.sprite.x += this.object.padding.left;\n this.sprite.y += this.object.padding.top;\n this.sprite.zoomX -= (this.object.padding.left + this.object.padding.right) / this.object.srcRect.width;\n return this.sprite.zoomY -= (this.object.padding.bottom + this.object.padding.bottom) / this.object.srcRect.height;\n }\n };\n\n\n /**\n * Updates the sprite properties from the game object properties.\n * @method updateProperties\n */\n\n Component_Sprite.prototype.updateProperties = function() {\n var ref, ref1;\n this.sprite.width = this.object.dstRect.width;\n this.sprite.height = this.object.dstRect.height;\n this.sprite.x = this.object.dstRect.x;\n this.sprite.y = this.object.dstRect.y;\n this.sprite.mask = (ref = this.object.mask) != null ? ref : this.mask;\n this.sprite.angle = this.object.angle || 0;\n this.sprite.opacity = (ref1 = this.object.opacity) != null ? ref1 : 255;\n this.sprite.clipRect = this.object.clipRect;\n this.sprite.srcRect = this.object.srcRect;\n this.sprite.blendingMode = this.object.blendMode || 0;\n this.sprite.mirror = this.object.mirror;\n this.sprite.visible = this.object.visible && (!this.object.parent || (this.object.parent.visible == null) || this.object.parent.visible);\n this.sprite.ox = -this.object.origin.x;\n this.sprite.oy = -this.object.origin.y;\n return this.sprite.z = (this.object.zIndex || 0) + (!this.object.parent ? 0 : this.object.parent.zIndex || 0);\n };\n\n\n /**\n * Updates the optional sprite properties from the game object properties.\n * @method updateOptionalProperties\n */\n\n Component_Sprite.prototype.updateOptionalProperties = function() {\n if (this.object.tone != null) {\n this.sprite.tone = this.object.tone;\n }\n if (this.object.color != null) {\n this.sprite.color = this.object.color;\n }\n if (this.object.viewport != null) {\n this.sprite.viewport = this.object.viewport;\n }\n if (this.object.effects != null) {\n this.sprite.effects = this.object.effects;\n }\n if (this.object.anchor != null) {\n this.sprite.anchor.x = this.object.anchor.x;\n this.sprite.anchor.y = this.object.anchor.y;\n }\n if (this.object.positionAnchor != null) {\n this.sprite.positionAnchor = this.object.positionAnchor;\n }\n if (this.object.zoom != null) {\n this.sprite.zoomX = this.object.zoom.x;\n this.sprite.zoomY = this.object.zoom.y;\n }\n if (this.object.motionBlur != null) {\n return this.sprite.motionBlur = this.object.motionBlur;\n }\n };\n\n\n /**\n * Updates the sprite component by updating its visibility, image, padding and\n * properties.\n * @method update\n */\n\n Component_Sprite.prototype.update = function() {\n Component_Sprite.__super__.update.apply(this, arguments);\n if (!this.isSetup) {\n this.setup();\n }\n this.updateVisibility();\n this.updateImage();\n this.updateProperties();\n this.updateOptionalProperties();\n this.updatePadding();\n this.object.rIndex = this.sprite.index;\n return this.sprite.update();\n };\n\n return Component_Sprite;\n\n})(gs.Component_Visual);\n\n\n/**\n* Enumeration of appearance animations. \n*\n* @module gs\n* @class AnimationTypes\n* @static\n* @memberof gs\n */\n\nAnimationTypes = (function() {\n function AnimationTypes() {}\n\n AnimationTypes.initialize = function() {\n\n /**\n * An object appears or disappears by moving into or out of the screen.\n * @property MOVEMENT\n * @type number\n * @static\n * @final\n */\n this.MOVEMENT = 0;\n\n /**\n * An object appears or disappears using alpha-blending.\n * @property BLENDING\n * @type number\n * @static\n * @final\n */\n this.BLENDING = 1;\n\n /**\n * An object appears or disappears using a mask-image.\n * @property MASKING\n * @type number\n * @static\n * @final\n */\n return this.MASKING = 2;\n };\n\n return AnimationTypes;\n\n})();\n\nAnimationTypes.initialize();\n\ngs.AnimationTypes = AnimationTypes;\n\ngs.Component_Sprite = Component_Sprite;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsZ0NBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7OzZCQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7V0FDakIsSUFBQyxDQUFBLGtCQUFELENBQUE7RUFEaUI7OztBQUdyQjs7Ozs7Ozs7Ozs7Ozs7RUFhYSwwQkFBQyxPQUFEO0lBQ1QsZ0RBQUE7O0FBRUE7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsTUFBRCxHQUFVOztBQUVWOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLEtBQUQsR0FBUzs7QUFFVDs7Ozs7OztJQU9BLElBQUMsQ0FBQSxLQUFELEdBQVM7O0FBRVQ7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsV0FBRCxHQUFlOztBQUVmOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLE9BQUQsR0FBVzs7QUFFWDs7Ozs7OztJQU9BLElBQUMsQ0FBQSxXQUFELEdBQWU7RUF2RE47OztBQXlEYjs7Ozs7OzZCQUtBLE9BQUEsR0FBUyxTQUFBO0FBQ0wsUUFBQTtJQUFBLCtDQUFBLFNBQUE7SUFFQSxJQUFHLElBQUMsQ0FBQSxNQUFKO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLENBQUE7TUFFQSxJQUFHLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBWDtRQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQWQsQ0FBQSxFQURKOztNQUdBLElBQUcsQ0FBSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQWY7O2FBQ29CLENBQUUsbUJBQWxCLENBQXNDLElBQUMsQ0FBQSxNQUF2Qzs7d0RBQ2lCLENBQUUsbUJBQW5CLENBQXVDLElBQUMsQ0FBQSxNQUF4QyxXQUZKO09BTko7O0VBSEs7OztBQWFUOzs7Ozs7NkJBS0Esa0JBQUEsR0FBb0IsU0FBQTtXQUNoQixJQUFDLENBQUEsTUFBTSxDQUFDLGFBQVIsR0FBd0IsQ0FBQSxTQUFBLEtBQUE7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QUQsQ0FBQTtJQUNBLElBQUMsQ0FBQSxXQUFELENBQUE7SUFDQSxJQUFDLENBQUEsZ0JBQUQsQ0FBQTtJQUNBLElBQUMsQ0FBQSx3QkFBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLGFBQUQsQ0FBQTtJQUVBLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDO1dBQ3pCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixDQUFBO0VBWEk7Ozs7R0F2U21CLEVBQUUsQ0FBQzs7O0FBcVRsQzs7Ozs7Ozs7O0FBUU07OztFQUNGLGNBQUMsQ0FBQSxVQUFELEdBQWEsU0FBQTs7QUFDVDs7Ozs7OztJQU9BLElBQUMsQ0FBQSxRQUFELEdBQVk7O0FBQ1o7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsUUFBRCxHQUFZOztBQUNaOzs7Ozs7O1dBT0EsSUFBQyxDQUFBLE9BQUQsR0FBVztFQXhCRjs7Ozs7O0FBMEJqQixjQUFjLENBQUMsVUFBZixDQUFBOztBQUNBLEVBQUUsQ0FBQyxjQUFILEdBQW9COztBQUNwQixFQUFFLENBQUMsZ0JBQUgsR0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudFxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgQ29tcG9uZW50X1Nwcml0ZSBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICAjIyMqXG4gICAgKiBDYWxsZWQgaWYgdGhpcyBvYmplY3QgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSBhIGRhdGEtYnVuZGxlLiBJdCBjYW4gYmUgdXNlZFxuICAgICogcmUtYXNzaWduIGV2ZW50LWhhbmRsZXIsIGFub255bW91cyBmdW5jdGlvbnMsIGV0Yy5cbiAgICAqIFxuICAgICogQG1ldGhvZCBvbkRhdGFCdW5kbGVSZXN0b3JlLlxuICAgICogQHBhcmFtIE9iamVjdCBkYXRhIC0gVGhlIGRhdGEtYnVuZGxlXG4gICAgKiBAcGFyYW0gZ3MuT2JqZWN0Q29kZWNDb250ZXh0IGNvbnRleHQgLSBUaGUgY29kZWMtY29udGV4dC5cbiAgICAjIyNcbiAgICBvbkRhdGFCdW5kbGVSZXN0b3JlOiAoZGF0YSwgY29udGV4dCkgLT5cbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIEEgc3ByaXRlIGNvbXBvbmVudCB0byBkaXNwbGF5IGFuIG9iamVjdCBvbiBzY3JlZW4uIEl0IGNhbiBiZSBtYW5hZ2VkIG9yXG4gICAgKiB1bm1hbmFnZWQuIEEgbWFuYWdlZCBzcHJpdGUgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZ3JhcGhpY3Mtc3lzdGVtXG4gICAgKiBhbmQgcmVuZGVyZWQgZXZlcnkgZnJhbWUgdW50aWwgaXQgZ2V0cyBkaXNwb3NlZC4gQW4gdW5tYW5hZ2VkIHNwcml0ZSBuZWVkc1xuICAgICogdG8gYmUgYWRkZWQgYW5kIHJlbW92ZWQgbWFudWFsbHkuXG4gICAgKlxuICAgICogQG1vZHVsZSBnc1xuICAgICogQGNsYXNzIENvbXBvbmVudF9TcHJpdGVcbiAgICAqIEBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICAqIEBtZW1iZXJvZiBnc1xuICAgICogQGNvbnN0cnVjdG9yXG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1hbmFnZWQgLSBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBtYW5hZ2VkIGJ5IHRoZSBncmFwaGljcyBzeXN0ZW0uXG4gICAgIyMjXG4gICAgY29uc3RydWN0b3I6IChtYW5hZ2VkKSAtPlxuICAgICAgICBzdXBlcigpXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBuYXRpdmUgc3ByaXRlIG9iamVjdCB0byBkaXNwbGF5IHRoZSBnYW1lIG9iamVjdCBvbiBzY3JlZW4uXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgc3ByaXRlXG4gICAgICAgICogQHR5cGUgU3ByaXRlXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAjIyNcbiAgICAgICAgQHNwcml0ZSA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gZGlzcGxheS5cbiAgICAgICAgKlxuICAgICAgICAqIEBwcm9wZXJ0eSBpbWFnZVxuICAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBpbWFnZSA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdmlkZW8gdG8gZGlzcGxheS5cbiAgICAgICAgKlxuICAgICAgICAqIEBwcm9wZXJ0eSB2aWRlb1xuICAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEB2aWRlbyA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIGZyb20gd2hlcmUgdGhlIGltYWdlIHNob3VsZCBiZSBsb2FkZWQuXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VcbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAaW1hZ2VGb2xkZXIgPSBcIkdyYXBoaWNzL1BpY3R1cmVzXCJcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgdmlzaWJpbGl0eS4gSWYgPGI+ZmFsc2U8L2I+LCB0aGUgc3ByaXRlIGlzIG5vdCByZW5kZXJlZC5cbiAgICAgICAgKlxuICAgICAgICAqIEBwcm9wZXJ0eSB2aXNpYmxlXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEB2aXNpYmxlID0gbm9cblxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBpbWFnZSBpcyBsb2FkZWQuXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VMb2FkZWRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAjIyNcbiAgICAgICAgQGltYWdlTG9hZGVkID0gbm9cbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogRGlzcG9zZXMgdGhlIHNwcml0ZS4gSWYgdGhlIHNwcml0ZSBpcyBtYW5hZ2VkLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiAgICAqIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGFuZCB2aWV3cG9ydC5cbiAgICAqIEBtZXRob2QgZGlzcG9zZVxuICAgICMjI1xuICAgIGRpc3Bvc2U6IC0+IFxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgaWYgQHNwcml0ZVxuICAgICAgICAgICAgQHNwcml0ZS5kaXNwb3NlKClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgQHNwcml0ZS52aWRlb1xuICAgICAgICAgICAgICAgIEBzcHJpdGUudmlkZW8uc3RvcCgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIG5vdCBAc3ByaXRlLm1hbmFnZWRcbiAgICAgICAgICAgICAgICBAc3ByaXRlLnZpZXdwb3J0Py5yZW1vdmVHcmFwaGljT2JqZWN0KEBzcHJpdGUpXG4gICAgICAgICAgICAgICAgR3JhcGhpY3Mudmlld3BvcnQ/LnJlbW92ZUdyYXBoaWNPYmplY3QoQHNwcml0ZSlcbiBcbiAgICAjIyMqXG4gICAgKiBBZGRzIGV2ZW50LWhhbmRsZXJzIGZvciBtb3VzZS90b3VjaCBldmVudHNcbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwRXZlbnRIYW5kbGVyc1xuICAgICMjIyBcbiAgICBzZXR1cEV2ZW50SGFuZGxlcnM6IC0+XG4gICAgICAgIEBzcHJpdGUub25JbmRleENoYW5nZSA9ID0+XG4gICAgICAgICAgICBAb2JqZWN0LnJJbmRleCA9IEBzcHJpdGUuaW5kZXhcbiAgICAgICAgICAgIEBvYmplY3QubmVlZHNVcGRhdGUgPSB5ZXNcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTZXR1cCB0aGUgc3ByaXRlLlxuICAgICogQG1ldGhvZCBzZXR1cFNwcml0ZVxuICAgICMjIyBcbiAgICBzZXR1cFNwcml0ZTogLT5cbiAgICAgICAgaWYgIUBzcHJpdGVcbiAgICAgICAgICAgIEBzcHJpdGUgPSBuZXcgU3ByaXRlKEdyYXBoaWNzLnZpZXdwb3J0LCBtYW5hZ2VkID8geWVzKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0dXAgdGhlIHNwcml0ZSBjb21wb25lbnQuIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGJ5IHRoZVxuICAgICogc3lzdGVtLlxuICAgICogQG1ldGhvZCBzZXR1cFxuICAgICMjI1xuICAgIHNldHVwOiAtPlxuICAgICAgICBAaXNTZXR1cCA9IHllc1xuICAgICAgICBAc2V0dXBTcHJpdGUoKVxuICAgICAgICBAc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgQHVwZGF0ZSgpXG4gICAgICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHNvdXJjZS0gYW5kIGRlc3RpbmF0aW9uLXJlY3RhbmdsZSBvZiB0aGUgZ2FtZSBvYmplY3Qgc28gdGhhdFxuICAgICogdGhlIGFzc29jaWF0ZWQgYml0bWFwIGZpdHMgaW4uIFRoZSBpbWFnZUhhbmRsaW5nIHByb3BlcnR5IGNvbnRyb2xzIGhvd1xuICAgICogdGhlIHJlY3RhbmdsZXMgYXJlIHJlc2l6ZWQuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVJlY3RcbiAgICAjIyNcbiAgICB1cGRhdGVSZWN0OiAtPlxuICAgICAgICBpZiBAc3ByaXRlLmJpdG1hcD9cbiAgICAgICAgICAgIGlmICFAb2JqZWN0LmltYWdlSGFuZGxpbmdcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnNyY1JlY3QgPSBuZXcgUmVjdCgwLCAwLCBAc3ByaXRlLmJpdG1hcC53aWR0aCwgQHNwcml0ZS5iaXRtYXAuaGVpZ2h0KVxuICAgICAgICAgICAgICAgIGlmIG5vdCBAb2JqZWN0LmZpeGVkU2l6ZVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3Qud2lkdGggPSBAb2JqZWN0LnNyY1JlY3Qud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgICAgICAgIGVsc2UgaWYgQG9iamVjdC5pbWFnZUhhbmRsaW5nID09IDFcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnNyY1JlY3QgPSBuZXcgUmVjdCgwLCAwLCBAc3ByaXRlLmJpdG1hcC53aWR0aCwgQHNwcml0ZS5iaXRtYXAuaGVpZ2h0IC8gMilcbiAgICAgICAgICAgICAgICBpZiBub3QgQG9iamVjdC5maXhlZFNpemVcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoID0gQG9iamVjdC5zcmNSZWN0LndpZHRoXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC5oZWlnaHQgPSBAb2JqZWN0LnNyY1JlY3QuaGVpZ2h0XG4gICAgICAgICAgICBlbHNlIGlmIEBvYmplY3QuaW1hZ2VIYW5kbGluZyA9PSAyXG4gICAgICAgICAgICAgICAgaWYgbm90IEBvYmplY3QuZml4ZWRTaXplXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCA9IEBvYmplY3Quc3JjUmVjdC53aWR0aFxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0ID0gQG9iamVjdC5zcmNSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBiaXRtYXAgb2JqZWN0IGZyb20gdGhlIGFzc29jaWF0ZWQgaW1hZ2UgbmFtZS4gVGhlIGltYWdlRm9sZGVyXG4gICAgKiBwcm9wZXJ0eSBjb250cm9scyBmcm9tIHdoaWNoIHJlc291cmNlLWZvbGRlciB0aGUgaW1hZ2Ugd2lsbCBiZSBsb2FkZWQuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZUJpdG1hcFxuICAgICMjI1xuICAgIHVwZGF0ZUJpdG1hcDogLT5cbiAgICAgICAgQGltYWdlTG9hZGVkID0gbm9cbiAgICAgICAgQGltYWdlID0gQG9iamVjdC5pbWFnZVxuICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC5pbWFnZS5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHwgQG9iamVjdC5pbWFnZS5zdGFydHNXaXRoKFwiJFwiKVxuICAgICAgICAgICAgQHNwcml0ZS5iaXRtYXAgPSBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKEBvYmplY3QuaW1hZ2UpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBzcHJpdGUuYml0bWFwID0gUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIiN7QG9iamVjdC5pbWFnZUZvbGRlcnx8QGltYWdlRm9sZGVyfS8je0BvYmplY3QuaW1hZ2V9XCIpXG4gICAgICAgICAgXG4gICAgICAgIGlmIEBzcHJpdGUuYml0bWFwPyAgXG4gICAgICAgICAgICBpZiBub3QgQGltYWdlTG9hZGVkXG4gICAgICAgICAgICAgICAgQGltYWdlTG9hZGVkID0gQHNwcml0ZS5iaXRtYXAubG9hZGVkXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGVsZXRlIEBzcHJpdGUuYml0bWFwLmxvYWRlZF9cbiAgICAgICAgICAgIFxuICAgICAgICBAb2JqZWN0LmJpdG1hcCA9IEBzcHJpdGUuYml0bWFwXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHZpZGVvIG9iamVjdCBmcm9tIHRoZSBhc3NvY2lhdGVkIHZpZGVvIG5hbWUuIEl0IGFsc28gdXBkYXRlc1xuICAgICogdGhlIHZpZGVvLXJlbmRlcmluZyBwcm9jZXNzLlxuICAgICogQG1ldGhvZCB1cGRhdGVWaWRlb1xuICAgICMjI1xuICAgIHVwZGF0ZVZpZGVvOiAtPlxuICAgICAgICBpZiBAb2JqZWN0LnZpZGVvICE9IEB2aWRlb05hbWVcbiAgICAgICAgICAgIEB2aWRlb05hbWUgPSBAb2JqZWN0LnZpZGVvXG4gICAgICAgICAgICBAc3ByaXRlLnZpZGVvID0gUmVzb3VyY2VNYW5hZ2VyLmdldFZpZGVvKFwiTW92aWVzLyN7QG9iamVjdC52aWRlb31cIilcbiAgICAgICAgICAgIGlmIEBzcHJpdGUudmlkZW8/XG4gICAgICAgICAgICAgICAgaWYgJFBBUkFNUy5wcmV2aWV3Py5zZXR0aW5ncy5tdXNpY0Rpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIEBzcHJpdGUudmlkZW8udm9sdW1lID0gMFxuICAgICAgICAgICAgICAgIEBzcHJpdGUudmlkZW8ubG9vcCA9IEBvYmplY3QubG9vcFxuICAgICAgICAgICAgICAgIEBzcHJpdGUudmlkZW8ucGxheSgpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0ID0gbmV3IFJlY3QoMCwgMCwgQHNwcml0ZS52aWRlby53aWR0aCwgQHNwcml0ZS52aWRlby5oZWlnaHQpXG4gICAgICAgICAgICAgICAgaWYgbm90IEBvYmplY3QuZml4ZWRTaXplXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdCA9IG5ldyBSZWN0KEBvYmplY3QuZHN0UmVjdC54LCBAb2JqZWN0LmRzdFJlY3QueSwgQHNwcml0ZS52aWRlby53aWR0aCwgQHNwcml0ZS52aWRlby5oZWlnaHQpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIEBzcHJpdGUudmlkZW8/LnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIGltYWdlIGlmIHRoZSBnYW1lIG9iamVjdCBoYXMgdGhlIGltYWdlLXByb3BlcnR5IHNldC5cbiAgICAqIEBtZXRob2QgdXBkYXRlSW1hZ2VcbiAgICAjIyNcbiAgICB1cGRhdGVJbWFnZTogLT5cbiAgICAgICAgaWYgQG9iamVjdC5pbWFnZT9cbiAgICAgICAgICAgIGlmIEBvYmplY3QuaW1hZ2UgIT0gQGltYWdlIG9yICghQGltYWdlTG9hZGVkIGFuZCBAc3ByaXRlLmJpdG1hcD8ubG9hZGVkKVxuICAgICAgICAgICAgICAgIEB1cGRhdGVCaXRtYXAoKVxuICAgICAgICAgICAgICAgIEB1cGRhdGVSZWN0KClcbiAgICAgICAgZWxzZSBpZiBAb2JqZWN0LmJpdG1hcD8gICAgXG4gICAgICAgICAgICBAc3ByaXRlLmJpdG1hcCA9IEBvYmplY3QuYml0bWFwXG4gICAgICAgIGVsc2UgaWYgQG9iamVjdC52aWRlbz8gb3IgQHZpZGVvTmFtZSAhPSBAb2JqZWN0LnZpZGVvXG4gICAgICAgICAgICBAdXBkYXRlVmlkZW8oKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAaW1hZ2UgPSBudWxsXG4gICAgICAgICAgICBAb2JqZWN0LmJpdG1hcCA9IG51bGxcbiAgICAgICAgICAgIEBzcHJpdGUuYml0bWFwID0gbnVsbFxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogSWYgdGhlIHNwcml0ZSBpcyB1bm1hbmFnZWQsIHRoaXMgbWV0aG9kIHdpbGwgdXBkYXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZVxuICAgICogc3ByaXRlLiBJZiB0aGUgc3ByaXRlIGxlYXZlcyB0aGUgdmlld3BvcnQsIGl0IHdpbGwgYmUgcmVtb3ZlZCB0byBzYXZlIFxuICAgICogcGVyZm9ybWFuY2UgYW5kIGF1dG9tYXRpY2FsbHkgYWRkZWQgYmFjayB0byB0aGUgdmlld3BvcnQgaWYgaXQgZW50ZXJzXG4gICAgKiB0aGUgdmlld3BvcnQuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVZpc2liaWxpdHlcbiAgICAjIyNcbiAgICB1cGRhdGVWaXNpYmlsaXR5OiAtPlxuICAgICAgICBpZiAhQHNwcml0ZS5tYW5hZ2VkXG4gICAgICAgICAgICB2aXNpYmxlID0gUmVjdC5pbnRlcnNlY3QoQG9iamVjdC5kc3RSZWN0LngrQG9iamVjdC5vcmlnaW4ueCwgQG9iamVjdC5kc3RSZWN0LnkrQG9iamVjdC5vcmlnaW4ueSwgQG9iamVjdC5kc3RSZWN0LndpZHRoLCBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBHcmFwaGljcy53aWR0aCwgR3JhcGhpY3MuaGVpZ2h0KVxuICAgICAgICAgICAgaWYgdmlzaWJsZSBhbmQgIUB2aXNpYmxlXG4gICAgICAgICAgICAgICAgKEBvYmplY3Qudmlld3BvcnQgfHwgR3JhcGhpY3Mudmlld3BvcnQpLmFkZEdyYXBoaWNPYmplY3QoQHNwcml0ZSlcbiAgICAgICAgICAgICAgICBAdmlzaWJsZSA9IHllc1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgIXZpc2libGUgYW5kIEB2aXNpYmxlXG4gICAgICAgICAgICAgICAgKEBvYmplY3Qudmlld3BvcnQgfHwgR3JhcGhpY3Mudmlld3BvcnQpLnJlbW92ZUdyYXBoaWNPYmplY3QoQHNwcml0ZSlcbiAgICAgICAgICAgICAgICBAdmlzaWJsZSA9IG5vXG4gICAgICAgICAgICAgICAgXG4gICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBwYWRkaW5nLlxuICAgICogQG1ldGhvZCB1cGRhdGVQYWRkaW5nXG4gICAgIyMjXG4gICAgdXBkYXRlUGFkZGluZzogLT5cbiAgICAgICAgaWYgQG9iamVjdC5wYWRkaW5nP1xuICAgICAgICAgICAgQHNwcml0ZS54ICs9IEBvYmplY3QucGFkZGluZy5sZWZ0XG4gICAgICAgICAgICBAc3ByaXRlLnkgKz0gQG9iamVjdC5wYWRkaW5nLnRvcFxuICAgICAgICAgICAgQHNwcml0ZS56b29tWCAtPSAoQG9iamVjdC5wYWRkaW5nLmxlZnQrQG9iamVjdC5wYWRkaW5nLnJpZ2h0KSAvIEBvYmplY3Quc3JjUmVjdC53aWR0aFxuICAgICAgICAgICAgQHNwcml0ZS56b29tWSAtPSAoQG9iamVjdC5wYWRkaW5nLmJvdHRvbStAb2JqZWN0LnBhZGRpbmcuYm90dG9tKSAvIEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgc3ByaXRlIHByb3BlcnRpZXMgZnJvbSB0aGUgZ2FtZSBvYmplY3QgcHJvcGVydGllcy5cbiAgICAqIEBtZXRob2QgdXBkYXRlUHJvcGVydGllc1xuICAgICMjI1xuICAgIHVwZGF0ZVByb3BlcnRpZXM6IC0+XG4gICAgICAgIEBzcHJpdGUud2lkdGggPSBAb2JqZWN0LmRzdFJlY3Qud2lkdGhcbiAgICAgICAgQHNwcml0ZS5oZWlnaHQgPSBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0XG4gICAgICAgIEBzcHJpdGUueCA9IEBvYmplY3QuZHN0UmVjdC54IFxuICAgICAgICBAc3ByaXRlLnkgPSBAb2JqZWN0LmRzdFJlY3QueVxuICAgICAgICBAc3ByaXRlLm1hc2sgPSBAb2JqZWN0Lm1hc2sgPyBAbWFza1xuICAgICAgICBAc3ByaXRlLmFuZ2xlID0gQG9iamVjdC5hbmdsZSB8fCAwXG4gICAgICAgIEBzcHJpdGUub3BhY2l0eSA9IEBvYmplY3Qub3BhY2l0eSA/IDI1NVxuICAgICAgICBAc3ByaXRlLmNsaXBSZWN0ID0gQG9iamVjdC5jbGlwUmVjdFxuICAgICAgICBAc3ByaXRlLnNyY1JlY3QgPSBAb2JqZWN0LnNyY1JlY3RcbiAgICAgICAgQHNwcml0ZS5ibGVuZGluZ01vZGUgPSBAb2JqZWN0LmJsZW5kTW9kZSB8fCAwXG4gICAgICAgIEBzcHJpdGUubWlycm9yID0gQG9iamVjdC5taXJyb3JcbiAgICAgICAgQHNwcml0ZS52aXNpYmxlID0gQG9iamVjdC52aXNpYmxlIGFuZCAoIUBvYmplY3QucGFyZW50IG9yICFAb2JqZWN0LnBhcmVudC52aXNpYmxlPyBvciBAb2JqZWN0LnBhcmVudC52aXNpYmxlKVxuICAgICAgICBAc3ByaXRlLm94ID0gLUBvYmplY3Qub3JpZ2luLnhcbiAgICAgICAgQHNwcml0ZS5veSA9IC1Ab2JqZWN0Lm9yaWdpbi55XG4gICAgICAgIEBzcHJpdGUueiA9IChAb2JqZWN0LnpJbmRleCB8fCAwKSArIChpZiAhQG9iamVjdC5wYXJlbnQgdGhlbiAwIGVsc2UgQG9iamVjdC5wYXJlbnQuekluZGV4IHx8IDApXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIG9wdGlvbmFsIHNwcml0ZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGdhbWUgb2JqZWN0IHByb3BlcnRpZXMuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZU9wdGlvbmFsUHJvcGVydGllc1xuICAgICMjI1xuICAgIHVwZGF0ZU9wdGlvbmFsUHJvcGVydGllczogLT5cbiAgICAgICAgaWYgQG9iamVjdC50b25lP1xuICAgICAgICAgICAgQHNwcml0ZS50b25lID0gQG9iamVjdC50b25lXG4gICAgICAgIGlmIEBvYmplY3QuY29sb3I/XG4gICAgICAgICAgICBAc3ByaXRlLmNvbG9yID0gQG9iamVjdC5jb2xvclxuICAgICAgICBpZiBAb2JqZWN0LnZpZXdwb3J0P1xuICAgICAgICAgICAgQHNwcml0ZS52aWV3cG9ydCA9IEBvYmplY3Qudmlld3BvcnRcbiAgICAgICAgaWYgQG9iamVjdC5lZmZlY3RzP1xuICAgICAgICAgICAgQHNwcml0ZS5lZmZlY3RzID0gQG9iamVjdC5lZmZlY3RzXG4gICAgICAgIGlmIEBvYmplY3QuYW5jaG9yP1xuICAgICAgICAgICAgQHNwcml0ZS5hbmNob3IueCA9IEBvYmplY3QuYW5jaG9yLnhcbiAgICAgICAgICAgIEBzcHJpdGUuYW5jaG9yLnkgPSBAb2JqZWN0LmFuY2hvci55XG4gICAgICAgIGlmIEBvYmplY3QucG9zaXRpb25BbmNob3I/XG4gICAgICAgICAgICBAc3ByaXRlLnBvc2l0aW9uQW5jaG9yID0gQG9iamVjdC5wb3NpdGlvbkFuY2hvclxuICAgICAgICBpZiBAb2JqZWN0Lnpvb20/XG4gICAgICAgICAgICBAc3ByaXRlLnpvb21YID0gQG9iamVjdC56b29tLnhcbiAgICAgICAgICAgIEBzcHJpdGUuem9vbVkgPSBAb2JqZWN0Lnpvb20ueVxuICAgICAgICBpZiBAb2JqZWN0Lm1vdGlvbkJsdXI/XG4gICAgICAgICAgICBAc3ByaXRlLm1vdGlvbkJsdXIgPSBAb2JqZWN0Lm1vdGlvbkJsdXJcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgc3ByaXRlIGNvbXBvbmVudCBieSB1cGRhdGluZyBpdHMgdmlzaWJpbGl0eSwgaW1hZ2UsIHBhZGRpbmcgYW5kXG4gICAgKiBwcm9wZXJ0aWVzLlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyNcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIFxuICAgICAgICBAc2V0dXAoKSBpZiBub3QgQGlzU2V0dXBcbiAgICAgICAgQHVwZGF0ZVZpc2liaWxpdHkoKVxuICAgICAgICBAdXBkYXRlSW1hZ2UoKVxuICAgICAgICBAdXBkYXRlUHJvcGVydGllcygpXG4gICAgICAgIEB1cGRhdGVPcHRpb25hbFByb3BlcnRpZXMoKVxuICAgICAgICBAdXBkYXRlUGFkZGluZygpXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LnJJbmRleCA9IEBzcHJpdGUuaW5kZXhcbiAgICAgICAgQHNwcml0ZS51cGRhdGUoKVxuICAgICAgICBcblxuIyMjKlxuKiBFbnVtZXJhdGlvbiBvZiBhcHBlYXJhbmNlIGFuaW1hdGlvbnMuIFxuKlxuKiBAbW9kdWxlIGdzXG4qIEBjbGFzcyBBbmltYXRpb25UeXBlc1xuKiBAc3RhdGljXG4qIEBtZW1iZXJvZiBnc1xuIyMjXG5jbGFzcyBBbmltYXRpb25UeXBlc1xuICAgIEBpbml0aWFsaXplOiAtPiAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEFuIG9iamVjdCBhcHBlYXJzIG9yIGRpc2FwcGVhcnMgYnkgbW92aW5nIGludG8gb3Igb3V0IG9mIHRoZSBzY3JlZW4uXG4gICAgICAgICogQHByb3BlcnR5IE1PVkVNRU5UXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICogQHN0YXRpY1xuICAgICAgICAqIEBmaW5hbFxuICAgICAgICAjIyNcbiAgICAgICAgQE1PVkVNRU5UID0gMFxuICAgICAgICAjIyMqXG4gICAgICAgICogQW4gb2JqZWN0IGFwcGVhcnMgb3IgZGlzYXBwZWFycyB1c2luZyBhbHBoYS1ibGVuZGluZy5cbiAgICAgICAgKiBAcHJvcGVydHkgQkxFTkRJTkdcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICogQGZpbmFsXG4gICAgICAgICMjI1xuICAgICAgICBAQkxFTkRJTkcgPSAxXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBbiBvYmplY3QgYXBwZWFycyBvciBkaXNhcHBlYXJzIHVzaW5nIGEgbWFzay1pbWFnZS5cbiAgICAgICAgKiBAcHJvcGVydHkgTUFTS0lOR1xuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgKiBAZmluYWxcbiAgICAgICAgIyMjXG4gICAgICAgIEBNQVNLSU5HID0gMlxuXG5BbmltYXRpb25UeXBlcy5pbml0aWFsaXplKCkgICAgXG5ncy5BbmltYXRpb25UeXBlcyA9IEFuaW1hdGlvblR5cGVzXG5ncy5Db21wb25lbnRfU3ByaXRlID0gQ29tcG9uZW50X1Nwcml0ZVxuIl19\n//# sourceURL=Component_Sprite_59.js"
12 + "compiledContent": "var AnimationTypes, Component_Sprite,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_Sprite = (function(superClass) {\n extend(Component_Sprite, superClass);\n\n\n /**\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n */\n\n Component_Sprite.prototype.onDataBundleRestore = function(data, context) {\n return this.setupEventHandlers();\n };\n\n\n /**\n * A sprite component to display an object on screen. It can be managed or\n * unmanaged. A managed sprite is automatically added to the graphics-system\n * and rendered every frame until it gets disposed. An unmanaged sprite needs\n * to be added and removed manually.\n *\n * @module gs\n * @class Component_Sprite\n * @extends gs.Component_Visual\n * @memberof gs\n * @constructor\n * @param {boolean} managed - Indicates if the sprite is managed by the graphics system.\n */\n\n function Component_Sprite(managed) {\n Component_Sprite.__super__.constructor.call(this);\n\n /**\n * The native sprite object to display the game object on screen.\n *\n * @property sprite\n * @type Sprite\n * @protected\n */\n this.sprite = null;\n\n /**\n * The name of the image to display.\n *\n * @property image\n * @type string\n * @protected\n */\n this.image = null;\n\n /**\n * The name of the video to display.\n *\n * @property video\n * @type string\n * @protected\n */\n this.video = null;\n\n /**\n * The name of the folder from where the image should be loaded.\n *\n * @property image\n * @type string\n * @protected\n */\n this.imageFolder = \"Graphics/Pictures\";\n\n /**\n * The visibility. If <b>false</b>, the sprite is not rendered.\n *\n * @property visible\n * @type boolean\n * @protected\n */\n this.visible = false;\n\n /**\n * Indicates if the image is loaded.\n *\n * @property imageLoaded\n * @type boolean\n * @protected\n */\n this.imageLoaded = false;\n }\n\n\n /**\n * Disposes the sprite. If the sprite is managed, it will be automatically\n * removed from the graphics system and viewport.\n * @method dispose\n */\n\n Component_Sprite.prototype.dispose = function() {\n var ref, ref1;\n Component_Sprite.__super__.dispose.apply(this, arguments);\n if (this.sprite) {\n this.sprite.dispose();\n if (this.sprite.video) {\n this.sprite.video.stop();\n }\n if (!this.sprite.managed) {\n if ((ref = this.sprite.viewport) != null) {\n ref.removeGraphicObject(this.sprite);\n }\n return (ref1 = Graphics.viewport) != null ? ref1.removeGraphicObject(this.sprite) : void 0;\n }\n }\n };\n\n\n /**\n * Adds event-handlers for mouse/touch events\n *\n * @method setupEventHandlers\n */\n\n Component_Sprite.prototype.setupEventHandlers = function() {\n return this.sprite.onIndexChange = (function(_this) {\n return function() {\n _this.object.rIndex = _this.sprite.index;\n return _this.object.needsUpdate = true;\n };\n })(this);\n };\n\n\n /**\n * Setup the sprite. \n * @method setupSprite\n */\n\n Component_Sprite.prototype.setupSprite = function() {\n if (!this.sprite) {\n return this.sprite = new gs.Sprite(Graphics.viewport, typeof managed !== \"undefined\" && managed !== null ? managed : true);\n }\n };\n\n\n /**\n * Setup the sprite component. This method is automatically called by the\n * system.\n * @method setup\n */\n\n Component_Sprite.prototype.setup = function() {\n this.isSetup = true;\n this.setupSprite();\n this.setupEventHandlers();\n return this.update();\n };\n\n\n /**\n * Updates the source- and destination-rectangle of the game object so that\n * the associated bitmap fits in. The imageHandling property controls how\n * the rectangles are resized.\n * @method updateRect\n */\n\n Component_Sprite.prototype.updateRect = function() {\n if (this.sprite.bitmap != null) {\n if (!this.object.imageHandling) {\n this.object.srcRect = new Rect(0, 0, this.sprite.bitmap.width, this.sprite.bitmap.height);\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n } else if (this.object.imageHandling === 1) {\n this.object.srcRect = new Rect(0, 0, this.sprite.bitmap.width, this.sprite.bitmap.height / 2);\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n } else if (this.object.imageHandling === 2) {\n if (!this.object.fixedSize) {\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n }\n }\n };\n\n\n /**\n * Updates the bitmap object from the associated image name. The imageFolder\n * property controls from which resource-folder the image will be loaded.\n * @method updateBitmap\n */\n\n Component_Sprite.prototype.updateBitmap = function() {\n this.imageLoaded = false;\n this.image = this.object.image;\n if (this.object.image.startsWith(\"data:\") || this.object.image.startsWith(\"$\")) {\n this.sprite.bitmap = ResourceManager.getBitmap(this.object.image);\n } else {\n this.sprite.bitmap = ResourceManager.getBitmap((this.object.imageFolder || this.imageFolder) + \"/\" + this.object.image);\n }\n if (this.sprite.bitmap != null) {\n if (!this.imageLoaded) {\n this.imageLoaded = this.sprite.bitmap.loaded;\n } else {\n delete this.sprite.bitmap.loaded_;\n }\n }\n return this.object.bitmap = this.sprite.bitmap;\n };\n\n\n /**\n * Updates the video object from the associated video name. It also updates\n * the video-rendering process.\n * @method updateVideo\n */\n\n Component_Sprite.prototype.updateVideo = function() {\n var ref, ref1;\n if (this.object.video !== this.videoName) {\n this.videoName = this.object.video;\n this.sprite.video = ResourceManager.getVideo(\"Movies/\" + this.object.video);\n if (this.sprite.video != null) {\n if ((ref = $PARAMS.preview) != null ? ref.settings.musicDisabled : void 0) {\n this.sprite.video.volume = 0;\n }\n this.sprite.video.loop = this.object.loop;\n this.sprite.video.play();\n this.object.srcRect = new Rect(0, 0, this.sprite.video.width, this.sprite.video.height);\n if (!this.object.fixedSize) {\n this.object.dstRect = new Rect(this.object.dstRect.x, this.object.dstRect.y, this.sprite.video.width, this.sprite.video.height);\n }\n }\n }\n return (ref1 = this.sprite.video) != null ? ref1.update() : void 0;\n };\n\n\n /**\n * Updates the image if the game object has the image-property set.\n * @method updateImage\n */\n\n Component_Sprite.prototype.updateImage = function() {\n var ref;\n if (this.object.image != null) {\n if (this.object.image !== this.image || (!this.imageLoaded && ((ref = this.sprite.bitmap) != null ? ref.loaded : void 0))) {\n this.updateBitmap();\n return this.updateRect();\n }\n } else if (this.object.bitmap != null) {\n return this.sprite.bitmap = this.object.bitmap;\n } else if ((this.object.video != null) || this.videoName !== this.object.video) {\n return this.updateVideo();\n } else {\n this.image = null;\n this.object.bitmap = null;\n return this.sprite.bitmap = null;\n }\n };\n\n\n /**\n * If the sprite is unmanaged, this method will update the visibility of the\n * sprite. If the sprite leaves the viewport, it will be removed to save \n * performance and automatically added back to the viewport if it enters\n * the viewport.\n * @method updateVisibility\n */\n\n Component_Sprite.prototype.updateVisibility = function() {\n var visible;\n if (!this.sprite.managed) {\n visible = Rect.intersect(this.object.dstRect.x + this.object.origin.x, this.object.dstRect.y + this.object.origin.y, this.object.dstRect.width, this.object.dstRect.height, 0, 0, Graphics.width, Graphics.height);\n if (visible && !this.visible) {\n (this.object.viewport || Graphics.viewport).addGraphicObject(this.sprite);\n this.visible = true;\n }\n if (!visible && this.visible) {\n (this.object.viewport || Graphics.viewport).removeGraphicObject(this.sprite);\n return this.visible = false;\n }\n }\n };\n\n\n /**\n * Updates the padding.\n * @method updatePadding\n */\n\n Component_Sprite.prototype.updatePadding = function() {\n if (this.object.padding != null) {\n this.sprite.x += this.object.padding.left;\n this.sprite.y += this.object.padding.top;\n this.sprite.zoomX -= (this.object.padding.left + this.object.padding.right) / this.object.srcRect.width;\n return this.sprite.zoomY -= (this.object.padding.bottom + this.object.padding.bottom) / this.object.srcRect.height;\n }\n };\n\n\n /**\n * Updates the sprite properties from the game object properties.\n * @method updateProperties\n */\n\n Component_Sprite.prototype.updateProperties = function() {\n var ref, ref1;\n this.sprite.width = this.object.dstRect.width;\n this.sprite.height = this.object.dstRect.height;\n this.sprite.x = this.object.dstRect.x;\n this.sprite.y = this.object.dstRect.y;\n this.sprite.mask = (ref = this.object.mask) != null ? ref : this.mask;\n this.sprite.angle = this.object.angle || 0;\n this.sprite.opacity = (ref1 = this.object.opacity) != null ? ref1 : 255;\n this.sprite.clipRect = this.object.clipRect;\n this.sprite.srcRect = this.object.srcRect;\n this.sprite.blendingMode = this.object.blendMode || 0;\n this.sprite.mirror = this.object.mirror;\n this.sprite.visible = this.object.visible && (!this.object.parent || (this.object.parent.visible == null) || this.object.parent.visible);\n this.sprite.ox = -this.object.origin.x;\n this.sprite.oy = -this.object.origin.y;\n return this.sprite.z = (this.object.zIndex || 0) + (!this.object.parent ? 0 : this.object.parent.zIndex || 0);\n };\n\n\n /**\n * Updates the optional sprite properties from the game object properties.\n * @method updateOptionalProperties\n */\n\n Component_Sprite.prototype.updateOptionalProperties = function() {\n if (this.object.tone != null) {\n this.sprite.tone = this.object.tone;\n }\n if (this.object.color != null) {\n this.sprite.color = this.object.color;\n }\n if (this.object.viewport != null) {\n this.sprite.viewport = this.object.viewport;\n }\n if (this.object.effects != null) {\n this.sprite.effects = this.object.effects;\n }\n if (this.object.anchor != null) {\n this.sprite.anchor.x = this.object.anchor.x;\n this.sprite.anchor.y = this.object.anchor.y;\n }\n if (this.object.positionAnchor != null) {\n this.sprite.positionAnchor = this.object.positionAnchor;\n }\n if (this.object.zoom != null) {\n this.sprite.zoomX = this.object.zoom.x;\n this.sprite.zoomY = this.object.zoom.y;\n }\n if (this.object.motionBlur != null) {\n return this.sprite.motionBlur = this.object.motionBlur;\n }\n };\n\n\n /**\n * Updates the sprite component by updating its visibility, image, padding and\n * properties.\n * @method update\n */\n\n Component_Sprite.prototype.update = function() {\n Component_Sprite.__super__.update.apply(this, arguments);\n if (!this.isSetup) {\n this.setup();\n }\n this.updateVisibility();\n this.updateImage();\n this.updateProperties();\n this.updateOptionalProperties();\n this.updatePadding();\n this.object.rIndex = this.sprite.index;\n return this.sprite.update();\n };\n\n return Component_Sprite;\n\n})(gs.Component_Visual);\n\n\n/**\n* Enumeration of appearance animations. \n*\n* @module gs\n* @class AnimationTypes\n* @static\n* @memberof gs\n */\n\nAnimationTypes = (function() {\n function AnimationTypes() {}\n\n AnimationTypes.initialize = function() {\n\n /**\n * An object appears or disappears by moving into or out of the screen.\n * @property MOVEMENT\n * @type number\n * @static\n * @final\n */\n this.MOVEMENT = 0;\n\n /**\n * An object appears or disappears using alpha-blending.\n * @property BLENDING\n * @type number\n * @static\n * @final\n */\n this.BLENDING = 1;\n\n /**\n * An object appears or disappears using a mask-image.\n * @property MASKING\n * @type number\n * @static\n * @final\n */\n return this.MASKING = 2;\n };\n\n return AnimationTypes;\n\n})();\n\nAnimationTypes.initialize();\n\ngs.AnimationTypes = AnimationTypes;\n\ngs.Component_Sprite = Component_Sprite;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsZ0NBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7OzZCQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7V0FDakIsSUFBQyxDQUFBLGtCQUFELENBQUE7RUFEaUI7OztBQUdyQjs7Ozs7Ozs7Ozs7Ozs7RUFhYSwwQkFBQyxPQUFEO0lBQ1QsZ0RBQUE7O0FBRUE7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsTUFBRCxHQUFVOztBQUVWOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLEtBQUQsR0FBUzs7QUFFVDs7Ozs7OztJQU9BLElBQUMsQ0FBQSxLQUFELEdBQVM7O0FBRVQ7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsV0FBRCxHQUFlOztBQUVmOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLE9BQUQsR0FBVzs7QUFFWDs7Ozs7OztJQU9BLElBQUMsQ0FBQSxXQUFELEdBQWU7RUF2RE47OztBQTJEYjs7Ozs7OzZCQUtBLE9BQUEsR0FBUyxTQUFBO0FBQ0wsUUFBQTtJQUFBLCtDQUFBLFNBQUE7SUFFQSxJQUFHLElBQUMsQ0FBQSxNQUFKO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLENBQUE7TUFFQSxJQUFHLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBWDtRQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQWQsQ0FBQSxFQURKOztNQUdBLElBQUcsQ0FBSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQWY7O2FBQ29CLENBQUUsbUJBQWxCLENBQXNDLElBQUMsQ0FBQSxNQUF2Qzs7d0RBQ2lCLENBQUUsbUJBQW5CLENBQXVDLElBQUMsQ0FBQSxNQUF4QyxXQUZKO09BTko7O0VBSEs7OztBQWFUOzs7Ozs7NkJBS0Esa0JBQUEsR0FBb0IsU0FBQTtXQUNoQixJQUFDLENBQUEsTUFBTSxDQUFDLGFBQVIsR0FBd0IsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFBO1FBQ3BCLEtBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixLQUFDLENBQUEsTUFBTSxDQUFDO2VBQ3pCLEtBQUMsQ0FBQSxNQUFNLENBQUMsV0FBUixHQUFzQjtNQUZGO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQTtFQURSOzs7QUFLcEI7Ozs7OzZCQUlBLFdBQUEsR0FBYSxTQUFBO0lBQ1QsSUFBRyxDQUFDLElBQUMsQ0FBQSxNQUFMO2FBQ0ksSUFBQyxDQUFBLE1BQUQsR0FBYyxJQUFBLEVBQUUsQ0FBQyxNQUFILENBQVUsUUFBUSxDQUFDLFFBQW5CLHVEQUE2QixVQUFVLElBQXZDLEVBRGxCOztFQURTOzs7QUFJYjs7Ozs7OzZCQUtBLEtBQUEsR0FBTyxTQUFBO0lBQ0gsSUFBQyxDQUFBLE9BQUQsR0FBVztJQUNYLElBQUMsQ0FBQSxXQUFELENBQUE7SUFDQSxJQUFDLENBQUEsa0JBQUQsQ0FBQTtXQUNBLElBQUMsQ0FBQSxNQUFELENBQUE7RUFKRzs7O0FBT1A7Ozs7Ozs7NkJBTUEsVUFBQSxHQUFZLFNBQUE7SUFDUixJQUFHLDBCQUFIO01BQ0ksSUFBRyxDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsYUFBWjtRQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixHQUFzQixJQUFBLElBQUEsQ0FBSyxDQUFMLEVBQVEsQ0FBUixFQUFXLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQTFCLEVBQWlDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWhEO1FBQ3RCLElBQUcsQ0FBSSxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQWY7VUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDeEMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBeUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FGN0M7U0FGSjtPQUFBLE1BS0ssSUFBRyxJQUFDLENBQUEsTUFBTSxDQUFDLGFBQVIsS0FBeUIsQ0FBNUI7UUFDRCxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBc0IsSUFBQSxJQUFBLENBQUssQ0FBTCxFQUFRLENBQVIsRUFBVyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUExQixFQUFpQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFmLEdBQXdCLENBQXpEO1FBQ3RCLElBQUcsQ0FBSSxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQWY7VUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDeEMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBeUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FGN0M7U0FGQztPQUFBLE1BS0EsSUFBRyxJQUFDLENBQUEsTUFBTSxDQUFDLGFBQVIsS0FBeUIsQ0FBNUI7UUFDRCxJQUFHLENBQUksSUFBQyxDQUFBLE1BQU0sQ0FBQyxTQUFmO1VBQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBaEIsR0FBd0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUM7aUJBQ3hDLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWhCLEdBQXlCLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BRjdDO1NBREM7T0FYVDs7RUFEUTs7O0FBaUJaOzs7Ozs7NkJBS0EsWUFBQSxHQUFjLFNBQUE7SUFDVixJQUFDLENBQUEsV0FBRCxHQUFlO0lBQ2YsSUFBQyxDQUFBLEtBQUQsR0FBUyxJQUFDLENBQUEsTUFBTSxDQUFDO0lBRWpCLElBQUcsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBZCxDQUF5QixPQUF6QixDQUFBLElBQXFDLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQWQsQ0FBeUIsR0FBekIsQ0FBeEM7TUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUIsZUFBZSxDQUFDLFNBQWhCLENBQTBCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBbEMsRUFEckI7S0FBQSxNQUFBO01BR0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCLGVBQWUsQ0FBQyxTQUFoQixDQUE0QixDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsV0FBUixJQUFxQixJQUFDLENBQUEsV0FBdkIsQ0FBQSxHQUFtQyxHQUFuQyxHQUFzQyxJQUFDLENBQUEsTUFBTSxDQUFDLEtBQTFFLEVBSHJCOztJQUtBLElBQUcsMEJBQUg7TUFDSSxJQUFHLENBQUksSUFBQyxDQUFBLFdBQVI7UUFDSSxJQUFDLENBQUEsV0FBRCxHQUFlLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BRGxDO09BQUEsTUFBQTtRQUdJLE9BQU8sSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFIMUI7T0FESjs7V0FNQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQztFQWZmOzs7QUFpQmQ7Ozs7Ozs2QkFLQSxXQUFBLEdBQWEsU0FBQTtBQUNULFFBQUE7SUFBQSxJQUFHLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixLQUFpQixJQUFDLENBQUEsU0FBckI7TUFDSSxJQUFDLENBQUEsU0FBRCxHQUFhLElBQUMsQ0FBQSxNQUFNLENBQUM7TUFDckIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLEdBQWdCLGVBQWUsQ0FBQyxRQUFoQixDQUF5QixTQUFBLEdBQVUsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUEzQztNQUNoQixJQUFHLHlCQUFIO1FBQ0kseUNBQWtCLENBQUUsUUFBUSxDQUFDLHNCQUE3QjtVQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQWQsR0FBdUIsRUFEM0I7O1FBRUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZCxHQUFxQixJQUFDLENBQUEsTUFBTSxDQUFDO1FBQzdCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQWQsQ0FBQTtRQUVBLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixHQUFzQixJQUFBLElBQUEsQ0FBSyxDQUFMLEVBQVEsQ0FBUixFQUFXLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQXpCLEVBQWdDLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQTlDO1FBQ3RCLElBQUcsQ0FBSSxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQWY7VUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBc0IsSUFBQSxJQUFBLENBQUssSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBckIsRUFBd0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBeEMsRUFBMkMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBekQsRUFBZ0UsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBOUUsRUFEMUI7U0FQSjtPQUhKOztvREFhYSxDQUFFLE1BQWYsQ0FBQTtFQWRTOzs7QUFnQmI7Ozs7OzZCQUlBLFdBQUEsR0FBYSxTQUFBO0FBQ1QsUUFBQTtJQUFBLElBQUcseUJBQUg7TUFDSSxJQUFHLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixLQUFpQixJQUFDLENBQUEsS0FBbEIsSUFBMkIsQ0FBQyxDQUFDLElBQUMsQ0FBQSxXQUFGLDZDQUFnQyxDQUFFLGdCQUFuQyxDQUE5QjtRQUNJLElBQUMsQ0FBQSxZQUFELENBQUE7ZUFDQSxJQUFDLENBQUEsVUFBRCxDQUFBLEVBRko7T0FESjtLQUFBLE1BSUssSUFBRywwQkFBSDthQUNELElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDLE9BRHhCO0tBQUEsTUFFQSxJQUFHLDJCQUFBLElBQWtCLElBQUMsQ0FBQSxTQUFELEtBQWMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUEzQzthQUNELElBQUMsQ0FBQSxXQUFELENBQUEsRUFEQztLQUFBLE1BQUE7TUFHRCxJQUFDLENBQUEsS0FBRCxHQUFTO01BQ1QsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCO2FBQ2pCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixLQUxoQjs7RUFQSTs7O0FBY2I7Ozs7Ozs7OzZCQU9BLGdCQUFBLEdBQWtCLFNBQUE7QUFDZCxRQUFBO0lBQUEsSUFBRyxDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBWjtNQUNJLE9BQUEsR0FBVSxJQUFJLENBQUMsU0FBTCxDQUFlLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQWhCLEdBQWtCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQWhELEVBQW1ELElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQWhCLEdBQWtCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQXBGLEVBQXVGLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQXZHLEVBQThHLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQTlILEVBQ2UsQ0FEZixFQUNrQixDQURsQixFQUNxQixRQUFRLENBQUMsS0FEOUIsRUFDcUMsUUFBUSxDQUFDLE1BRDlDO01BRVYsSUFBRyxPQUFBLElBQVksQ0FBQyxJQUFDLENBQUEsT0FBakI7UUFDSSxDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsUUFBUixJQUFvQixRQUFRLENBQUMsUUFBOUIsQ0FBdUMsQ0FBQyxnQkFBeEMsQ0FBeUQsSUFBQyxDQUFBLE1BQTFEO1FBQ0EsSUFBQyxDQUFBLE9BQUQsR0FBVyxLQUZmOztNQUlBLElBQUcsQ0FBQyxPQUFELElBQWEsSUFBQyxDQUFBLE9BQWpCO1FBQ0ksQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLFFBQVIsSUFBb0IsUUFBUSxDQUFDLFFBQTlCLENBQXVDLENBQUMsbUJBQXhDLENBQTRELElBQUMsQ0FBQSxNQUE3RDtlQUNBLElBQUMsQ0FBQSxPQUFELEdBQVcsTUFGZjtPQVBKOztFQURjOzs7QUFhbEI7Ozs7OzZCQUlBLGFBQUEsR0FBZSxTQUFBO0lBQ1gsSUFBRywyQkFBSDtNQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsQ0FBUixJQUFhLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDO01BQzdCLElBQUMsQ0FBQSxNQUFNLENBQUMsQ0FBUixJQUFhLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDO01BQzdCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixJQUFpQixDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQWhCLEdBQXFCLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQXRDLENBQUEsR0FBK0MsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDaEYsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLElBQWlCLENBQUMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBdUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBeEMsQ0FBQSxHQUFrRCxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUp2Rjs7RUFEVzs7O0FBT2Y7Ozs7OzZCQUlBLGdCQUFBLEdBQWtCLFNBQUE7QUFDZCxRQUFBO0lBQUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLEdBQWdCLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ2hDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxJQUFDLENBQUEsTUFBTSxDQUFDLENBQVIsR0FBWSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM1QixJQUFDLENBQUEsTUFBTSxDQUFDLENBQVIsR0FBWSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM1QixJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsNENBQThCLElBQUMsQ0FBQTtJQUMvQixJQUFDLENBQUEsTUFBTSxDQUFDLEtBQVIsR0FBZ0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLElBQWlCO0lBQ2pDLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixpREFBb0M7SUFDcEMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxRQUFSLEdBQW1CLElBQUMsQ0FBQSxNQUFNLENBQUM7SUFDM0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLEdBQWtCLElBQUMsQ0FBQSxNQUFNLENBQUM7SUFDMUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxZQUFSLEdBQXVCLElBQUMsQ0FBQSxNQUFNLENBQUMsU0FBUixJQUFxQjtJQUM1QyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUN6QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBa0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLElBQW9CLENBQUMsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVQsSUFBb0Isb0NBQXBCLElBQStDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQS9EO0lBQ3RDLElBQUMsQ0FBQSxNQUFNLENBQUMsRUFBUixHQUFhLENBQUMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDN0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxFQUFSLEdBQWEsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQztXQUM3QixJQUFDLENBQUEsTUFBTSxDQUFDLENBQVIsR0FBWSxDQUFDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixJQUFrQixDQUFuQixDQUFBLEdBQXdCLENBQUksQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVosR0FBd0IsQ0FBeEIsR0FBK0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBZixJQUF5QixDQUF6RDtFQWZ0Qjs7O0FBaUJsQjs7Ozs7NkJBSUEsd0JBQUEsR0FBMEIsU0FBQTtJQUN0QixJQUFHLHdCQUFIO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFSLEdBQWUsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUQzQjs7SUFFQSxJQUFHLHlCQUFIO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLEdBQWdCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFENUI7O0lBRUEsSUFBRyw0QkFBSDtNQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsUUFBUixHQUFtQixJQUFDLENBQUEsTUFBTSxDQUFDLFNBRC9COztJQUVBLElBQUcsMkJBQUg7TUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBa0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxRQUQ5Qjs7SUFFQSxJQUFHLDBCQUFIO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBZixHQUFtQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQztNQUNsQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFmLEdBQW1CLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBRnRDOztJQUdBLElBQUcsa0NBQUg7TUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLGNBQVIsR0FBeUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxlQURyQzs7SUFFQSxJQUFHLHdCQUFIO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLEdBQWdCLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDO01BQzdCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixHQUFnQixJQUFDLENBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUZqQzs7SUFHQSxJQUFHLDhCQUFIO2FBQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxVQUFSLEdBQXFCLElBQUMsQ0FBQSxNQUFNLENBQUMsV0FEakM7O0VBakJzQjs7O0FBb0IxQjs7Ozs7OzZCQUtBLE1BQUEsR0FBUSxTQUFBO0lBQ0osOENBQUEsU0FBQTtJQUVBLElBQVksQ0FBSSxJQUFDLENBQUEsT0FBakI7TUFBQSxJQUFDLENBQUEsS0FBRCxDQUFBLEVBQUE7O0lBQ0EsSUFBQyxDQUFBLGdCQUFELENBQUE7SUFDQSxJQUFDLENBQUEsV0FBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLGdCQUFELENBQUE7SUFDQSxJQUFDLENBQUEsd0JBQUQsQ0FBQTtJQUNBLElBQUMsQ0FBQSxhQUFELENBQUE7SUFFQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQztXQUN6QixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsQ0FBQTtFQVhJOzs7O0dBelNtQixFQUFFLENBQUM7OztBQXVUbEM7Ozs7Ozs7OztBQVFNOzs7RUFDRixjQUFDLENBQUEsVUFBRCxHQUFhLFNBQUE7O0FBQ1Q7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsUUFBRCxHQUFZOztBQUNaOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFDWjs7Ozs7OztXQU9BLElBQUMsQ0FBQSxPQUFELEdBQVc7RUF4QkY7Ozs7OztBQTBCakIsY0FBYyxDQUFDLFVBQWYsQ0FBQTs7QUFDQSxFQUFFLENBQUMsY0FBSCxHQUFvQjs7QUFDcEIsRUFBRSxDQUFDLGdCQUFILEdBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4jXG4jICAgU2NyaXB0OiBDb21wb25lbnRcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIENvbXBvbmVudF9TcHJpdGUgZXh0ZW5kcyBncy5Db21wb25lbnRfVmlzdWFsXG4gICAgIyMjKlxuICAgICogQ2FsbGVkIGlmIHRoaXMgb2JqZWN0IGluc3RhbmNlIGlzIHJlc3RvcmVkIGZyb20gYSBkYXRhLWJ1bmRsZS4gSXQgY2FuIGJlIHVzZWRcbiAgICAqIHJlLWFzc2lnbiBldmVudC1oYW5kbGVyLCBhbm9ueW1vdXMgZnVuY3Rpb25zLCBldGMuXG4gICAgKiBcbiAgICAqIEBtZXRob2Qgb25EYXRhQnVuZGxlUmVzdG9yZS5cbiAgICAqIEBwYXJhbSBPYmplY3QgZGF0YSAtIFRoZSBkYXRhLWJ1bmRsZVxuICAgICogQHBhcmFtIGdzLk9iamVjdENvZGVjQ29udGV4dCBjb250ZXh0IC0gVGhlIGNvZGVjLWNvbnRleHQuXG4gICAgIyMjXG4gICAgb25EYXRhQnVuZGxlUmVzdG9yZTogKGRhdGEsIGNvbnRleHQpIC0+XG4gICAgICAgIEBzZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBBIHNwcml0ZSBjb21wb25lbnQgdG8gZGlzcGxheSBhbiBvYmplY3Qgb24gc2NyZWVuLiBJdCBjYW4gYmUgbWFuYWdlZCBvclxuICAgICogdW5tYW5hZ2VkLiBBIG1hbmFnZWQgc3ByaXRlIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGdyYXBoaWNzLXN5c3RlbVxuICAgICogYW5kIHJlbmRlcmVkIGV2ZXJ5IGZyYW1lIHVudGlsIGl0IGdldHMgZGlzcG9zZWQuIEFuIHVubWFuYWdlZCBzcHJpdGUgbmVlZHNcbiAgICAqIHRvIGJlIGFkZGVkIGFuZCByZW1vdmVkIG1hbnVhbGx5LlxuICAgICpcbiAgICAqIEBtb2R1bGUgZ3NcbiAgICAqIEBjbGFzcyBDb21wb25lbnRfU3ByaXRlXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfVmlzdWFsXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHBhcmFtIHtib29sZWFufSBtYW5hZ2VkIC0gSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgbWFuYWdlZCBieSB0aGUgZ3JhcGhpY3Mgc3lzdGVtLlxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAobWFuYWdlZCkgLT5cbiAgICAgICAgc3VwZXIoKVxuXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmF0aXZlIHNwcml0ZSBvYmplY3QgdG8gZGlzcGxheSB0aGUgZ2FtZSBvYmplY3Qgb24gc2NyZWVuLlxuICAgICAgICAqXG4gICAgICAgICogQHByb3BlcnR5IHNwcml0ZVxuICAgICAgICAqIEB0eXBlIFNwcml0ZVxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBzcHJpdGUgPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHRvIGRpc3BsYXkuXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VcbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAaW1hZ2UgPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHZpZGVvIHRvIGRpc3BsYXkuXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgdmlkZW9cbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAdmlkZW8gPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciBmcm9tIHdoZXJlIHRoZSBpbWFnZSBzaG91bGQgYmUgbG9hZGVkLlxuICAgICAgICAqXG4gICAgICAgICogQHByb3BlcnR5IGltYWdlXG4gICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAjIyNcbiAgICAgICAgQGltYWdlRm9sZGVyID0gXCJHcmFwaGljcy9QaWN0dXJlc1wiXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIHZpc2liaWxpdHkuIElmIDxiPmZhbHNlPC9iPiwgdGhlIHNwcml0ZSBpcyBub3QgcmVuZGVyZWQuXG4gICAgICAgICpcbiAgICAgICAgKiBAcHJvcGVydHkgdmlzaWJsZVxuICAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAdmlzaWJsZSA9IG5vXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIEluZGljYXRlcyBpZiB0aGUgaW1hZ2UgaXMgbG9hZGVkLlxuICAgICAgICAqXG4gICAgICAgICogQHByb3BlcnR5IGltYWdlTG9hZGVkXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBpbWFnZUxvYWRlZCA9IG5vXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogRGlzcG9zZXMgdGhlIHNwcml0ZS4gSWYgdGhlIHNwcml0ZSBpcyBtYW5hZ2VkLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiAgICAqIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGFuZCB2aWV3cG9ydC5cbiAgICAqIEBtZXRob2QgZGlzcG9zZVxuICAgICMjI1xuICAgIGRpc3Bvc2U6IC0+IFxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgaWYgQHNwcml0ZVxuICAgICAgICAgICAgQHNwcml0ZS5kaXNwb3NlKClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgQHNwcml0ZS52aWRlb1xuICAgICAgICAgICAgICAgIEBzcHJpdGUudmlkZW8uc3RvcCgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIG5vdCBAc3ByaXRlLm1hbmFnZWRcbiAgICAgICAgICAgICAgICBAc3ByaXRlLnZpZXdwb3J0Py5yZW1vdmVHcmFwaGljT2JqZWN0KEBzcHJpdGUpXG4gICAgICAgICAgICAgICAgR3JhcGhpY3Mudmlld3BvcnQ/LnJlbW92ZUdyYXBoaWNPYmplY3QoQHNwcml0ZSlcbiBcbiAgICAjIyMqXG4gICAgKiBBZGRzIGV2ZW50LWhhbmRsZXJzIGZvciBtb3VzZS90b3VjaCBldmVudHNcbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwRXZlbnRIYW5kbGVyc1xuICAgICMjIyBcbiAgICBzZXR1cEV2ZW50SGFuZGxlcnM6IC0+XG4gICAgICAgIEBzcHJpdGUub25JbmRleENoYW5nZSA9ID0+XG4gICAgICAgICAgICBAb2JqZWN0LnJJbmRleCA9IEBzcHJpdGUuaW5kZXhcbiAgICAgICAgICAgIEBvYmplY3QubmVlZHNVcGRhdGUgPSB5ZXNcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTZXR1cCB0aGUgc3ByaXRlLiBcbiAgICAqIEBtZXRob2Qgc2V0dXBTcHJpdGVcbiAgICAjIyMgXG4gICAgc2V0dXBTcHJpdGU6IC0+XG4gICAgICAgIGlmICFAc3ByaXRlXG4gICAgICAgICAgICBAc3ByaXRlID0gbmV3IGdzLlNwcml0ZShHcmFwaGljcy52aWV3cG9ydCwgbWFuYWdlZCA/IHllcylcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFNldHVwIHRoZSBzcHJpdGUgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBieSB0aGVcbiAgICAqIHN5c3RlbS5cbiAgICAqIEBtZXRob2Qgc2V0dXBcbiAgICAjIyNcbiAgICBzZXR1cDogLT5cbiAgICAgICAgQGlzU2V0dXAgPSB5ZXNcbiAgICAgICAgQHNldHVwU3ByaXRlKClcbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIEB1cGRhdGUoKVxuICAgICAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBzb3VyY2UtIGFuZCBkZXN0aW5hdGlvbi1yZWN0YW5nbGUgb2YgdGhlIGdhbWUgb2JqZWN0IHNvIHRoYXRcbiAgICAqIHRoZSBhc3NvY2lhdGVkIGJpdG1hcCBmaXRzIGluLiBUaGUgaW1hZ2VIYW5kbGluZyBwcm9wZXJ0eSBjb250cm9scyBob3dcbiAgICAqIHRoZSByZWN0YW5nbGVzIGFyZSByZXNpemVkLlxuICAgICogQG1ldGhvZCB1cGRhdGVSZWN0XG4gICAgIyMjXG4gICAgdXBkYXRlUmVjdDogLT5cbiAgICAgICAgaWYgQHNwcml0ZS5iaXRtYXA/XG4gICAgICAgICAgICBpZiAhQG9iamVjdC5pbWFnZUhhbmRsaW5nXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0ID0gbmV3IFJlY3QoMCwgMCwgQHNwcml0ZS5iaXRtYXAud2lkdGgsIEBzcHJpdGUuYml0bWFwLmhlaWdodClcbiAgICAgICAgICAgICAgICBpZiBub3QgQG9iamVjdC5maXhlZFNpemVcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoID0gQG9iamVjdC5zcmNSZWN0LndpZHRoXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC5oZWlnaHQgPSBAb2JqZWN0LnNyY1JlY3QuaGVpZ2h0XG4gICAgICAgICAgICBlbHNlIGlmIEBvYmplY3QuaW1hZ2VIYW5kbGluZyA9PSAxXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0ID0gbmV3IFJlY3QoMCwgMCwgQHNwcml0ZS5iaXRtYXAud2lkdGgsIEBzcHJpdGUuYml0bWFwLmhlaWdodCAvIDIpXG4gICAgICAgICAgICAgICAgaWYgbm90IEBvYmplY3QuZml4ZWRTaXplXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCA9IEBvYmplY3Quc3JjUmVjdC53aWR0aFxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0ID0gQG9iamVjdC5zcmNSZWN0LmhlaWdodFxuICAgICAgICAgICAgZWxzZSBpZiBAb2JqZWN0LmltYWdlSGFuZGxpbmcgPT0gMlxuICAgICAgICAgICAgICAgIGlmIG5vdCBAb2JqZWN0LmZpeGVkU2l6ZVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3Qud2lkdGggPSBAb2JqZWN0LnNyY1JlY3Qud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgYml0bWFwIG9iamVjdCBmcm9tIHRoZSBhc3NvY2lhdGVkIGltYWdlIG5hbWUuIFRoZSBpbWFnZUZvbGRlclxuICAgICogcHJvcGVydHkgY29udHJvbHMgZnJvbSB3aGljaCByZXNvdXJjZS1mb2xkZXIgdGhlIGltYWdlIHdpbGwgYmUgbG9hZGVkLlxuICAgICogQG1ldGhvZCB1cGRhdGVCaXRtYXBcbiAgICAjIyNcbiAgICB1cGRhdGVCaXRtYXA6IC0+XG4gICAgICAgIEBpbWFnZUxvYWRlZCA9IG5vXG4gICAgICAgIEBpbWFnZSA9IEBvYmplY3QuaW1hZ2VcbiAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3QuaW1hZ2Uuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8IEBvYmplY3QuaW1hZ2Uuc3RhcnRzV2l0aChcIiRcIilcbiAgICAgICAgICAgIEBzcHJpdGUuYml0bWFwID0gUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChAb2JqZWN0LmltYWdlKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAc3ByaXRlLmJpdG1hcCA9IFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCIje0BvYmplY3QuaW1hZ2VGb2xkZXJ8fEBpbWFnZUZvbGRlcn0vI3tAb2JqZWN0LmltYWdlfVwiKVxuICAgICAgICAgIFxuICAgICAgICBpZiBAc3ByaXRlLmJpdG1hcD8gIFxuICAgICAgICAgICAgaWYgbm90IEBpbWFnZUxvYWRlZFxuICAgICAgICAgICAgICAgIEBpbWFnZUxvYWRlZCA9IEBzcHJpdGUuYml0bWFwLmxvYWRlZFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBAc3ByaXRlLmJpdG1hcC5sb2FkZWRfXG4gICAgICAgICAgICBcbiAgICAgICAgQG9iamVjdC5iaXRtYXAgPSBAc3ByaXRlLmJpdG1hcFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSB2aWRlbyBvYmplY3QgZnJvbSB0aGUgYXNzb2NpYXRlZCB2aWRlbyBuYW1lLiBJdCBhbHNvIHVwZGF0ZXNcbiAgICAqIHRoZSB2aWRlby1yZW5kZXJpbmcgcHJvY2Vzcy5cbiAgICAqIEBtZXRob2QgdXBkYXRlVmlkZW9cbiAgICAjIyNcbiAgICB1cGRhdGVWaWRlbzogLT5cbiAgICAgICAgaWYgQG9iamVjdC52aWRlbyAhPSBAdmlkZW9OYW1lXG4gICAgICAgICAgICBAdmlkZW9OYW1lID0gQG9iamVjdC52aWRlb1xuICAgICAgICAgICAgQHNwcml0ZS52aWRlbyA9IFJlc291cmNlTWFuYWdlci5nZXRWaWRlbyhcIk1vdmllcy8je0BvYmplY3QudmlkZW99XCIpXG4gICAgICAgICAgICBpZiBAc3ByaXRlLnZpZGVvP1xuICAgICAgICAgICAgICAgIGlmICRQQVJBTVMucHJldmlldz8uc2V0dGluZ3MubXVzaWNEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICBAc3ByaXRlLnZpZGVvLnZvbHVtZSA9IDBcbiAgICAgICAgICAgICAgICBAc3ByaXRlLnZpZGVvLmxvb3AgPSBAb2JqZWN0Lmxvb3BcbiAgICAgICAgICAgICAgICBAc3ByaXRlLnZpZGVvLnBsYXkoKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIEBvYmplY3Quc3JjUmVjdCA9IG5ldyBSZWN0KDAsIDAsIEBzcHJpdGUudmlkZW8ud2lkdGgsIEBzcHJpdGUudmlkZW8uaGVpZ2h0KVxuICAgICAgICAgICAgICAgIGlmIG5vdCBAb2JqZWN0LmZpeGVkU2l6ZVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3QgPSBuZXcgUmVjdChAb2JqZWN0LmRzdFJlY3QueCwgQG9iamVjdC5kc3RSZWN0LnksIEBzcHJpdGUudmlkZW8ud2lkdGgsIEBzcHJpdGUudmlkZW8uaGVpZ2h0KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICBAc3ByaXRlLnZpZGVvPy51cGRhdGUoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBpbWFnZSBpZiB0aGUgZ2FtZSBvYmplY3QgaGFzIHRoZSBpbWFnZS1wcm9wZXJ0eSBzZXQuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZUltYWdlXG4gICAgIyMjXG4gICAgdXBkYXRlSW1hZ2U6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuaW1hZ2U/XG4gICAgICAgICAgICBpZiBAb2JqZWN0LmltYWdlICE9IEBpbWFnZSBvciAoIUBpbWFnZUxvYWRlZCBhbmQgQHNwcml0ZS5iaXRtYXA/LmxvYWRlZClcbiAgICAgICAgICAgICAgICBAdXBkYXRlQml0bWFwKClcbiAgICAgICAgICAgICAgICBAdXBkYXRlUmVjdCgpXG4gICAgICAgIGVsc2UgaWYgQG9iamVjdC5iaXRtYXA/ICAgIFxuICAgICAgICAgICAgQHNwcml0ZS5iaXRtYXAgPSBAb2JqZWN0LmJpdG1hcFxuICAgICAgICBlbHNlIGlmIEBvYmplY3QudmlkZW8/IG9yIEB2aWRlb05hbWUgIT0gQG9iamVjdC52aWRlb1xuICAgICAgICAgICAgQHVwZGF0ZVZpZGVvKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgQGltYWdlID0gbnVsbFxuICAgICAgICAgICAgQG9iamVjdC5iaXRtYXAgPSBudWxsXG4gICAgICAgICAgICBAc3ByaXRlLmJpdG1hcCA9IG51bGxcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIElmIHRoZSBzcHJpdGUgaXMgdW5tYW5hZ2VkLCB0aGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGVcbiAgICAqIHNwcml0ZS4gSWYgdGhlIHNwcml0ZSBsZWF2ZXMgdGhlIHZpZXdwb3J0LCBpdCB3aWxsIGJlIHJlbW92ZWQgdG8gc2F2ZSBcbiAgICAqIHBlcmZvcm1hbmNlIGFuZCBhdXRvbWF0aWNhbGx5IGFkZGVkIGJhY2sgdG8gdGhlIHZpZXdwb3J0IGlmIGl0IGVudGVyc1xuICAgICogdGhlIHZpZXdwb3J0LlxuICAgICogQG1ldGhvZCB1cGRhdGVWaXNpYmlsaXR5XG4gICAgIyMjXG4gICAgdXBkYXRlVmlzaWJpbGl0eTogLT5cbiAgICAgICAgaWYgIUBzcHJpdGUubWFuYWdlZFxuICAgICAgICAgICAgdmlzaWJsZSA9IFJlY3QuaW50ZXJzZWN0KEBvYmplY3QuZHN0UmVjdC54K0BvYmplY3Qub3JpZ2luLngsIEBvYmplY3QuZHN0UmVjdC55K0BvYmplY3Qub3JpZ2luLnksIEBvYmplY3QuZHN0UmVjdC53aWR0aCwgQG9iamVjdC5kc3RSZWN0LmhlaWdodCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgR3JhcGhpY3Mud2lkdGgsIEdyYXBoaWNzLmhlaWdodClcbiAgICAgICAgICAgIGlmIHZpc2libGUgYW5kICFAdmlzaWJsZVxuICAgICAgICAgICAgICAgIChAb2JqZWN0LnZpZXdwb3J0IHx8IEdyYXBoaWNzLnZpZXdwb3J0KS5hZGRHcmFwaGljT2JqZWN0KEBzcHJpdGUpXG4gICAgICAgICAgICAgICAgQHZpc2libGUgPSB5ZXNcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICF2aXNpYmxlIGFuZCBAdmlzaWJsZVxuICAgICAgICAgICAgICAgIChAb2JqZWN0LnZpZXdwb3J0IHx8IEdyYXBoaWNzLnZpZXdwb3J0KS5yZW1vdmVHcmFwaGljT2JqZWN0KEBzcHJpdGUpXG4gICAgICAgICAgICAgICAgQHZpc2libGUgPSBub1xuICAgICAgICAgICAgICAgIFxuICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgcGFkZGluZy5cbiAgICAqIEBtZXRob2QgdXBkYXRlUGFkZGluZ1xuICAgICMjI1xuICAgIHVwZGF0ZVBhZGRpbmc6IC0+XG4gICAgICAgIGlmIEBvYmplY3QucGFkZGluZz9cbiAgICAgICAgICAgIEBzcHJpdGUueCArPSBAb2JqZWN0LnBhZGRpbmcubGVmdFxuICAgICAgICAgICAgQHNwcml0ZS55ICs9IEBvYmplY3QucGFkZGluZy50b3BcbiAgICAgICAgICAgIEBzcHJpdGUuem9vbVggLT0gKEBvYmplY3QucGFkZGluZy5sZWZ0K0BvYmplY3QucGFkZGluZy5yaWdodCkgLyBAb2JqZWN0LnNyY1JlY3Qud2lkdGhcbiAgICAgICAgICAgIEBzcHJpdGUuem9vbVkgLT0gKEBvYmplY3QucGFkZGluZy5ib3R0b20rQG9iamVjdC5wYWRkaW5nLmJvdHRvbSkgLyBAb2JqZWN0LnNyY1JlY3QuaGVpZ2h0XG4gICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHNwcml0ZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGdhbWUgb2JqZWN0IHByb3BlcnRpZXMuXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVByb3BlcnRpZXNcbiAgICAjIyNcbiAgICB1cGRhdGVQcm9wZXJ0aWVzOiAtPlxuICAgICAgICBAc3ByaXRlLndpZHRoID0gQG9iamVjdC5kc3RSZWN0LndpZHRoXG4gICAgICAgIEBzcHJpdGUuaGVpZ2h0ID0gQG9iamVjdC5kc3RSZWN0LmhlaWdodFxuICAgICAgICBAc3ByaXRlLnggPSBAb2JqZWN0LmRzdFJlY3QueCBcbiAgICAgICAgQHNwcml0ZS55ID0gQG9iamVjdC5kc3RSZWN0LnlcbiAgICAgICAgQHNwcml0ZS5tYXNrID0gQG9iamVjdC5tYXNrID8gQG1hc2tcbiAgICAgICAgQHNwcml0ZS5hbmdsZSA9IEBvYmplY3QuYW5nbGUgfHwgMFxuICAgICAgICBAc3ByaXRlLm9wYWNpdHkgPSBAb2JqZWN0Lm9wYWNpdHkgPyAyNTVcbiAgICAgICAgQHNwcml0ZS5jbGlwUmVjdCA9IEBvYmplY3QuY2xpcFJlY3RcbiAgICAgICAgQHNwcml0ZS5zcmNSZWN0ID0gQG9iamVjdC5zcmNSZWN0XG4gICAgICAgIEBzcHJpdGUuYmxlbmRpbmdNb2RlID0gQG9iamVjdC5ibGVuZE1vZGUgfHwgMFxuICAgICAgICBAc3ByaXRlLm1pcnJvciA9IEBvYmplY3QubWlycm9yXG4gICAgICAgIEBzcHJpdGUudmlzaWJsZSA9IEBvYmplY3QudmlzaWJsZSBhbmQgKCFAb2JqZWN0LnBhcmVudCBvciAhQG9iamVjdC5wYXJlbnQudmlzaWJsZT8gb3IgQG9iamVjdC5wYXJlbnQudmlzaWJsZSlcbiAgICAgICAgQHNwcml0ZS5veCA9IC1Ab2JqZWN0Lm9yaWdpbi54XG4gICAgICAgIEBzcHJpdGUub3kgPSAtQG9iamVjdC5vcmlnaW4ueVxuICAgICAgICBAc3ByaXRlLnogPSAoQG9iamVjdC56SW5kZXggfHwgMCkgKyAoaWYgIUBvYmplY3QucGFyZW50IHRoZW4gMCBlbHNlIEBvYmplY3QucGFyZW50LnpJbmRleCB8fCAwKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBvcHRpb25hbCBzcHJpdGUgcHJvcGVydGllcyBmcm9tIHRoZSBnYW1lIG9iamVjdCBwcm9wZXJ0aWVzLlxuICAgICogQG1ldGhvZCB1cGRhdGVPcHRpb25hbFByb3BlcnRpZXNcbiAgICAjIyNcbiAgICB1cGRhdGVPcHRpb25hbFByb3BlcnRpZXM6IC0+XG4gICAgICAgIGlmIEBvYmplY3QudG9uZT9cbiAgICAgICAgICAgIEBzcHJpdGUudG9uZSA9IEBvYmplY3QudG9uZVxuICAgICAgICBpZiBAb2JqZWN0LmNvbG9yP1xuICAgICAgICAgICAgQHNwcml0ZS5jb2xvciA9IEBvYmplY3QuY29sb3JcbiAgICAgICAgaWYgQG9iamVjdC52aWV3cG9ydD9cbiAgICAgICAgICAgIEBzcHJpdGUudmlld3BvcnQgPSBAb2JqZWN0LnZpZXdwb3J0XG4gICAgICAgIGlmIEBvYmplY3QuZWZmZWN0cz9cbiAgICAgICAgICAgIEBzcHJpdGUuZWZmZWN0cyA9IEBvYmplY3QuZWZmZWN0c1xuICAgICAgICBpZiBAb2JqZWN0LmFuY2hvcj9cbiAgICAgICAgICAgIEBzcHJpdGUuYW5jaG9yLnggPSBAb2JqZWN0LmFuY2hvci54XG4gICAgICAgICAgICBAc3ByaXRlLmFuY2hvci55ID0gQG9iamVjdC5hbmNob3IueVxuICAgICAgICBpZiBAb2JqZWN0LnBvc2l0aW9uQW5jaG9yP1xuICAgICAgICAgICAgQHNwcml0ZS5wb3NpdGlvbkFuY2hvciA9IEBvYmplY3QucG9zaXRpb25BbmNob3JcbiAgICAgICAgaWYgQG9iamVjdC56b29tP1xuICAgICAgICAgICAgQHNwcml0ZS56b29tWCA9IEBvYmplY3Quem9vbS54XG4gICAgICAgICAgICBAc3ByaXRlLnpvb21ZID0gQG9iamVjdC56b29tLnlcbiAgICAgICAgaWYgQG9iamVjdC5tb3Rpb25CbHVyP1xuICAgICAgICAgICAgQHNwcml0ZS5tb3Rpb25CbHVyID0gQG9iamVjdC5tb3Rpb25CbHVyXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHNwcml0ZSBjb21wb25lbnQgYnkgdXBkYXRpbmcgaXRzIHZpc2liaWxpdHksIGltYWdlLCBwYWRkaW5nIGFuZFxuICAgICogcHJvcGVydGllcy5cbiAgICAqIEBtZXRob2QgdXBkYXRlXG4gICAgIyMjXG4gICAgdXBkYXRlOiAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgQHNldHVwKCkgaWYgbm90IEBpc1NldHVwXG4gICAgICAgIEB1cGRhdGVWaXNpYmlsaXR5KClcbiAgICAgICAgQHVwZGF0ZUltYWdlKClcbiAgICAgICAgQHVwZGF0ZVByb3BlcnRpZXMoKVxuICAgICAgICBAdXBkYXRlT3B0aW9uYWxQcm9wZXJ0aWVzKClcbiAgICAgICAgQHVwZGF0ZVBhZGRpbmcoKVxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5ySW5kZXggPSBAc3ByaXRlLmluZGV4XG4gICAgICAgIEBzcHJpdGUudXBkYXRlKClcbiAgICAgICAgXG5cbiMjIypcbiogRW51bWVyYXRpb24gb2YgYXBwZWFyYW5jZSBhbmltYXRpb25zLiBcbipcbiogQG1vZHVsZSBnc1xuKiBAY2xhc3MgQW5pbWF0aW9uVHlwZXNcbiogQHN0YXRpY1xuKiBAbWVtYmVyb2YgZ3NcbiMjI1xuY2xhc3MgQW5pbWF0aW9uVHlwZXNcbiAgICBAaW5pdGlhbGl6ZTogLT4gICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBbiBvYmplY3QgYXBwZWFycyBvciBkaXNhcHBlYXJzIGJ5IG1vdmluZyBpbnRvIG9yIG91dCBvZiB0aGUgc2NyZWVuLlxuICAgICAgICAqIEBwcm9wZXJ0eSBNT1ZFTUVOVFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgKiBAZmluYWxcbiAgICAgICAgIyMjXG4gICAgICAgIEBNT1ZFTUVOVCA9IDBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEFuIG9iamVjdCBhcHBlYXJzIG9yIGRpc2FwcGVhcnMgdXNpbmcgYWxwaGEtYmxlbmRpbmcuXG4gICAgICAgICogQHByb3BlcnR5IEJMRU5ESU5HXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICogQHN0YXRpY1xuICAgICAgICAqIEBmaW5hbFxuICAgICAgICAjIyNcbiAgICAgICAgQEJMRU5ESU5HID0gMVxuICAgICAgICAjIyMqXG4gICAgICAgICogQW4gb2JqZWN0IGFwcGVhcnMgb3IgZGlzYXBwZWFycyB1c2luZyBhIG1hc2staW1hZ2UuXG4gICAgICAgICogQHByb3BlcnR5IE1BU0tJTkdcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICogQGZpbmFsXG4gICAgICAgICMjI1xuICAgICAgICBATUFTS0lORyA9IDJcblxuQW5pbWF0aW9uVHlwZXMuaW5pdGlhbGl6ZSgpICAgIFxuZ3MuQW5pbWF0aW9uVHlwZXMgPSBBbmltYXRpb25UeXBlc1xuZ3MuQ29tcG9uZW50X1Nwcml0ZSA9IENvbXBvbmVudF9TcHJpdGVcbiJdfQ==\n//# sourceURL=Component_Sprite_59.js"
13 13 },
14 14 "summary": [
15 15 "name",