{
	"camera" : 
	{
		"center" : "0.00000 0.00000 -1.00000",
		"eye" : "0.00000 0.00000 0.00000",
		"up" : "0.00000 1.00000 0.00000"
	},
	"general" : 
	{
		"ambientcolor" : "0.30000 0.30000 0.30000",
		"bloom" : false,
		"bloomhdrfeather" : 0.1,
		"bloomhdriterations" : 8,
		"bloomhdrscatter" : 1.619,
		"bloomhdrstrength" : 2.0,
		"bloomhdrthreshold" : 1.0,
		"bloomstrength" : 2.0,
		"bloomthreshold" : 0.64999998,
		"bloomtint" : "1.00000 1.00000 1.00000",
		"camerafade" : true,
		"cameraparallax" : true,
		"cameraparallaxamount" : 0.1,
		"cameraparallaxdelay" : 0.60000002,
		"cameraparallaxmouseinfluence" : 0.2,
		"camerapreview" : true,
		"camerashake" : 
		{
			"user" : "camerashake",
			"value" : true
		},
		"camerashakeamplitude" : 0.69999999,
		"camerashakeroughness" : 1.0,
		"camerashakespeed" : 1.0,
		"clearcolor" : "0.70000 0.70000 0.70000",
		"clearenabled" : true,
		"farz" : 10000.0,
		"fov" : 50.0,
		"gravitydirection" : "0.00000 -1.00000 0.00000",
		"gravitystrength" : 1.0,
		"hdr" : false,
		"nearz" : 0.0099999998,
		"orthogonalprojection" : 
		{
			"height" : 2160,
			"width" : 3840
		},
		"perspectiveoverridefov" : 30.0,
		"skylightcolor" : "0.30000 0.30000 0.30000",
		"winddirection" : "0.70700 0.70700 0.00000",
		"windenabled" : false,
		"windstrength" : 1.0,
		"zoom" : 1.04
	},
	"objects" : 
	[
		{
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/depthparallax/effect.json",
					"id" : 46,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"center" : 0,
								"scale" : "2 2",
								"sens" : -2
							},
							"id" : 47,
							"textures" : [ null, "GZH69sYXkAAkIymbg_bg_depth" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/foliagesway/effect.json",
					"id" : 530,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"phase" : 0.5,
								"power" : 1.0,
								"ratio" : 0.67000002,
								"scale" : 0.050000001,
								"scrolldirection" : 0.93382698,
								"speeduv" : 5.0,
								"strength" : 0.51999998
							},
							"id" : 531,
							"textures" : [ null, "masks/foliagesway_mask_0b382a0b", null ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterflow/effect.json",
					"id" : 110586,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"phasescale" : 2.0,
								"speed" : 0.13,
								"strength" : 1.0
							},
							"id" : 110587,
							"textures" : [ null, "masks/waterflow_mask_e7a00a6f", "effects/waterflowphase" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 16,
			"image" : "models/GZH69sYXkAAkIym.json",
			"locktransforms" : true,
			"name" : "GZH69sYXkAAkIym",
			"origin" : "1920.00000 1080.00000 0.00000",
			"parallaxDepth" : "0.98000 0.98000",
			"size" : "3840.00000 2160.00000"
		},
		{
			"disablepropagation" : false,
			"id" : 22566,
			"instanceoverride" : 
			{
				"alpha" : 5.0,
				"colorn" : "0.25882 0.57647 0.84314",
				"count" : 0.46000001,
				"id" : 22568,
				"rate" : 1.53,
				"size" : 1.0700001
			},
			"name" : "Moving Glowing Stars_01",
			"origin" : "-434.00955 1235.68835 0.00000",
			"parallaxDepth" : "-0.98000 -0.98000",
			"particle" : "particles/workshop/2562725207/Star_06.json",
			"scale" : "0.22470 0.22470 0.22470",
			"solid" : true,
			"visible" : 
			{
				"user" : "firefly",
				"value" : true
			}
		},
		{
			"disablepropagation" : false,
			"id" : 1436,
			"instanceoverride" : 
			{
				"alpha" : 5.0,
				"colorn" : "0.25882 0.57647 0.84314",
				"count" : 1.1900001,
				"id" : 1438,
				"rate" : 1.53,
				"size" : 1.48
			},
			"name" : "Moving Glowing Stars_01",
			"origin" : "309.58862 181.85211 0.00000",
			"particle" : "particles/workshop/2562725207/Star_06.json",
			"scale" : "0.75520 0.75520 0.75520",
			"solid" : true,
			"visible" : 
			{
				"user" : "firefly",
				"value" : true
			}
		},
		{
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/waterripple/effect.json",
					"id" : 250,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"animationspeed" : 0.16,
								"ratio" : 2.49,
								"ripplestrength" : 0.090000004,
								"scale" : 1.62,
								"scrolldirection" : 1.2459686,
								"scrollspeed" : 0.0
							},
							"id" : 251,
							"textures" : [ null, "masks/waterripple_mask_5a4bf123", "effects/waterripplenormal" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 248,
			"image" : "models/util/composelayer.json",
			"name" : "Calque de composition ajustable",
			"origin" : "1920.00000 1080.00000 0.00000",
			"parallaxDepth" : "-3.50000 -4.00000",
			"size" : "3840.00000 2160.00000"
		},
		{
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/waterripple/effect.json",
					"id" : 95753,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"animationspeed" : 0.16,
								"ratio" : 2.49,
								"ripplestrength" : 0.090000004,
								"scale" : 1.62,
								"scrolldirection" : 1.2459686,
								"scrollspeed" : 0.0
							},
							"id" : 95754,
							"textures" : [ null, "masks/waterripple_mask_816dc62f", "effects/waterripplenormal" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 95752,
			"image" : "models/util/composelayer.json",
			"name" : "Calque de composition ajustable",
			"origin" : "1920.00000 1080.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"size" : "3840.00000 2160.00000"
		},
		{
			"disablepropagation" : false,
			"id" : 27404,
			"instanceoverride" : 
			{
				"alpha" : 10.0,
				"colorn" : "0.25882 0.57647 0.84314",
				"count" : 1.4,
				"id" : 27406,
				"rate" : 1.33,
				"speed" : 1.04
			},
			"name" : "Wind particles",
			"origin" : "2403.40625 1109.03857 0.00000",
			"parallaxDepth" : "-1.50000 -1.50000",
			"particle" : "particles/workshop/2991402338/Gusts_of_wind.json",
			"solid" : true,
			"visible" : 
			{
				"user" : "shorekeepereffect",
				"value" : true
			}
		},
		{
			"angles" : "0.00000 -0.00000 -1.63271",
			"disablepropagation" : false,
			"id" : 1036,
			"instanceoverride" : 
			{
				"alpha" : 0.1,
				"colorn" : "0.27843 0.55294 0.86667",
				"id" : 1038,
				"rate" : 1.1
			},
			"name" : "DbEffect",
			"origin" : "2012.71619 1210.48706 0.00000",
			"parallaxDepth" : "-1.50000 -1.50000",
			"particle" : "particles/workshop/3291675677/DBEffect.json",
			"scale" : "1.11327 1.10000 1.00000",
			"solid" : true,
			"visible" : 
			{
				"user" : "shorekeepereffect",
				"value" : true
			}
		},
		{
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/depthparallax/effect.json",
					"id" : 122,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"center" : 0,
								"scale" : "0.17 0.17",
								"sens" : -0.07
							},
							"id" : 0,
							"textures" : [ null, "GZH69sYXkAAkIym_bg_fg_depth" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterwaves/effect.json",
					"id" : 454,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"direction" : 1.4891615,
								"exponent" : 1.0,
								"scale" : 0.0099999998,
								"speed" : 1.79,
								"strength" : 0.1
							},
							"id" : 455,
							"textures" : [ null, "masks/waterwaves_mask_45495792" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 44,
			"image" : "models/GZH69sYXkAAkIym_bg_fg.json",
			"locktransforms" : true,
			"name" : "GZH69sYXkAAkIym_bg_fg",
			"origin" : "2449.65015 762.07764 0.00000",
			"parallaxDepth" : "-1.50000 -1.50000",
			"size" : "334.00000 617.00000",
			"visible" : 
			{
				"user" : "shorekeeper",
				"value" : true
			}
		},
		{
			"animationlayers" : 
			[
				{
					"additive" : false,
					"animation" : 10176,
					"blend" : 1.0,
					"blendin" : false,
					"blendout" : false,
					"blendtime" : 0.5,
					"id" : 20517,
					"name" : "Animation 1",
					"rate" : 1.0,
					"visible" : true
				}
			],
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/depthparallax/effect.json",
					"id" : 64,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"center" : 0,
								"scale" : "0.17 0.17",
								"sens" : -1.09
							},
							"id" : 65,
							"textures" : [ null, "GZH69sYXkAAkIym_fg_depth" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterwaves/effect.json",
					"id" : 72,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"direction" : 1.8455971,
								"exponent" : 1.0,
								"scale" : 25.389999,
								"speed" : 4.3200002,
								"strength" : 0.11
							},
							"id" : 73,
							"textures" : [ null, "masks/waterwaves_mask_b80f8507" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterwaves/effect.json",
					"id" : 314,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"direction" : 1.8455971,
								"exponent" : 1,
								"scale" : 15.24,
								"speed" : 4.3200002,
								"strength" : 0.19
							},
							"id" : 315,
							"textures" : [ null, "masks/waterwaves_mask_92fe08b9" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterwaves/effect.json",
					"id" : 365,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"direction" : -2.4032772,
								"exponent" : 1,
								"scale" : 55.849998,
								"speed" : 4.3200002,
								"strength" : 0.050000001
							},
							"id" : 366,
							"textures" : [ null, "masks/waterwaves_mask_d1a0f08c" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/waterwaves/effect.json",
					"id" : 488,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"direction" : 1.4891615,
								"exponent" : 1,
								"scale" : 0.0099999998,
								"speed" : 1.79,
								"strength" : 0.07
							},
							"id" : 489,
							"textures" : [ null, "masks/waterwaves_mask_e529aeb2" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 33,
			"image" : "models/GZH69sYXkAAkIym_fg.json",
			"locktransforms" : true,
			"name" : "GZH69sYXkAAkIym_fg",
			"origin" : "2885.74756 1247.62415 0.00000",
			"parallaxDepth" : "-1.50000 -1.50000",
			"size" : "1432.00000 1169.00000",
			"visible" : 
			{
				"user" : "shorekeeper",
				"value" : true
			}
		},
		{
			"disablepropagation" : false,
			"id" : 2862,
			"instanceoverride" : 
			{
				"alpha" : 0.28,
				"colorn" : "0.25882 0.55686 0.81176",
				"count" : 0.5,
				"id" : 2864,
				"rate" : 1.25
			},
			"name" : "bokeh",
			"origin" : "1873.97827 1109.96753 0.00000",
			"parallaxDepth" : "2.00000 2.00000",
			"particle" : "particles/workshop/2491377235/presets/dust_motes_0.json",
			"scale" : "2.06369 2.06369 2.06369",
			"solid" : true,
			"visible" : 
			{
				"user" : "bokeh",
				"value" : true
			}
		},
		{
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/2795521260/color_grading/effect.json",
					"id" : 540,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"Brightness" : 0.0,
								"Channel influence" : "1 1 1",
								"Contrast" : 0.18000001,
								"Opacity" : 1.0
							},
							"id" : 541
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/blur/effect.json",
					"id" : 7031,
					"name" : "",
					"passes" : 
					[
						{
							"id" : 7032
						},
						{
							"constantshadervalues" : 
							{
								"scale" : "0.87 0.87"
							},
							"id" : 7033
						},
						{
							"combos" : 
							{
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "0.87 0.87"
							},
							"id" : 7034
						},
						{
							"constantshadervalues" : 
							{
								"compositecolor" : "1 1 1"
							},
							"id" : 7035,
							"textures" : [ null, "gradient/blend_gradient", null ]
						}
					],
					"visible" : 
					{
						"user" : "blur",
						"value" : true
					}
				}
			],
			"id" : 538,
			"image" : "models/util/fullscreenlayer.json",
			"name" : "Couche de post-traitement",
			"parallaxDepth" : "0.00000 0.00000"
		},
		{
			"anchor" : "none",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.00000 0.00000 0.00000",
			"blockalign" : false,
			"brightness" : 1.4,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : "0.62353 0.82745 1.00000",
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/2981960200/blurprecise/effect.json",
					"id" : 43808,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"scale" : "0.43 0.43"
							},
							"id" : 43809
						},
						{
							"combos" : 
							{
								"ENABLEMASK" : 1,
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "0.43 0.43"
							},
							"id" : 43810
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/shine/effect.json",
					"id" : 30404,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"noiseamount" : 0.40000001,
								"noisescale" : 3.0,
								"noisespeed" : 0.15000001,
								"raythreshold" : 0
							},
							"id" : 30405
						},
						{
							"constantshadervalues" : 
							{
								"color" : "1 1 1",
								"direction" : 0.0,
								"rayintensity" : 0.5,
								"raylength" : 0.07,
								"speed" : 1
							},
							"id" : 30406
						},
						{
							"constantshadervalues" : 
							{
								"scale" : "2 2"
							},
							"id" : 30407
						},
						{
							"combos" : 
							{
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "2 2"
							},
							"id" : 30408
						},
						{
							"id" : 30409
						}
					],
					"visible" : true
				}
			],
			"font" : "fonts/Garet-Book.otf",
			"horizontalalign" : "center",
			"id" : 43807,
			"limitrows" : false,
			"limituseellipsis" : false,
			"limitwidth" : false,
			"maxrows" : 1,
			"maxwidth" : 500.0,
			"name" : "D a y",
			"opaquebackground" : false,
			"origin" : "947.14526 1235.97534 0.00000",
			"padding" : 32,
			"parallaxDepth" : "-1.50000 -1.50000",
			"pointsize" : 28.0,
			"scale" : "1.14488 1.13179 0.95818",
			"size" : "1049.00000 233.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '2981960200';\n// Please note: Do not remove this line or asset references may break.\n// Please note: Do not remove this line or asset references may break.\n\n\nexport var scriptProperties = createScriptProperties()\n\t.addCombo({\n\t\tname: 'monthFormat',\n\t\tlabel: 'Month Format',\n\t\toptions: [{\n\t\t\tlabel: 'Numeric',\n\t\t\tvalue: '1'\n\t\t}, {\n\t\t\tlabel: 'Abbreviated',\n\t\t\tvalue: '2'\n\t\t},{\n\t\t\tlabel: 'Full',\n\t\t\tvalue: '3'\n\t\t}]\n\t})\n\t.addCombo({\n\t\tname: 'dayFormat',\n\t\tlabel: 'Day Format',\n\t\toptions: [{\n\t\t\tlabel: 'Abbreviated',\n\t\t\tvalue: '1'\n\t\t}, {\n\t\t\tlabel: 'Full',\n\t\t\tvalue: '2'\n\t\t}]\n\t})\n\t.addCheckbox({\n\t\tname: 'showDay',\n\t\tlabel: 'Show Day',\n\t\tvalue: true\n\t})\n   .addCheckbox({\n\t\tname: 'alignVertical',\n\t\tlabel: 'Align Day Vertically',\n\t\tvalue: false\n\t})\n  .addCheckbox({\n\t\tname: 'useDelimiter',\n\t\tlabel: 'Use Delimiter',\n\t\tvalue: false\n\t})\n\t.addText({\n\t\tname: 'addDelimiter',\n\t\tlabel: 'Delimiter',\n\t\tvalue: '/'\n\t})\n\t.finish();\n\n\nlet months;\nlet day;\nvar delimiterValue;\nvar newLine;\n/**\n * @param {String} value (for property 'text')\n */\nexport function update(value){\n  if (scriptProperties.useDelimiter == true){\n  delimiterValue = scriptProperties.addDelimiter\n}\n  if (scriptProperties.useDelimiter == false){\n   delimiterValue = [\n  ' '\n]\n}\nif (scriptProperties.alignVertical == true){\n   newLine = [\n  '\\n'\n]\n}\nif (scriptProperties.alignVertical == false){\n   newLine = [\n  ''\n]\n}\n  if (scriptProperties.monthFormat == 1){\n  months = [\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '6',\n  '7',\n  '8',\n  '9',\n  '10',\n  '11',\n  '12'\n]\n}\n if (scriptProperties.monthFormat == 2){\n months = [\n  'JAN',\n  'FEB',\n  'MAR',\n  'APR',\n  'MAY',\n  'JUN',\n  'JUL',\n  'AUG',\n  'SEP',\n  'OCT',\n  'NOV',\n  'DEC'\n]\n}\nif (scriptProperties.monthFormat == 3){\n months = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December'\n]\n}\nif (scriptProperties.dayFormat == 1){\n  day = [\n  'S U N',\n  'M O N',\n  'T U E',\n  'W E D',\n  'T H U',\n  'F R I',\n  'S A T'\n]\n}\nif (scriptProperties.dayFormat == 2){\n day = [\n  'S U N D A Y',\n  'M O N D A Y',\n  'T U E S D A Y',\n  'W E D N E S D A Y',\n  'T H U R S D A Y',\n  'F R I D A Y',\n  'S A T U R D A Y'\n]\n}\n\tlet date = new Date();{\n    if (scriptProperties.showDay == true ){\n    return day[date.getDay()]      }\n    if (scriptProperties.showDay == false ){\n\treturn   date.getDate() + delimiterValue + months[date.getMonth()] + delimiterValue + date.getFullYear();\n}\n}\n}\n",
				"scriptproperties" : 
				{
					"addDelimiter" : "/",
					"alignVertical" : false,
					"dayFormat" : "2",
					"monthFormat" : "1",
					"showDay" : true,
					"useDelimiter" : true
				},
				"value" : "W E D N E S D A Y"
			},
			"verticalalign" : "center",
			"visible" : 
			{
				"user" : "daydatetime",
				"value" : true
			}
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.00000 0.00000 0.00000",
			"blockalign" : false,
			"brightness" : 1.98,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : "0.62353 0.82745 1.00000",
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/2981960200/blurprecise/effect.json",
					"id" : 43814,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"scale" : "1.33 1.33"
							},
							"id" : 43815
						},
						{
							"combos" : 
							{
								"ENABLEMASK" : 1,
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "1.33 1.33"
							},
							"id" : 43816
						}
					],
					"visible" : true
				}
			],
			"font" : "fonts/airstrikecond.ttf",
			"horizontalalign" : "center",
			"id" : 43813,
			"limitrows" : false,
			"limituseellipsis" : false,
			"limitwidth" : false,
			"maxrows" : 1,
			"maxwidth" : 500.0,
			"name" : "Date",
			"opaquebackground" : false,
			"origin" : "0.09955 -80.32359 0.00000",
			"padding" : 32,
			"parallaxDepth" : "-1.50000 -1.50000",
			"parent" : 43807,
			"pointsize" : 29.0,
			"scale" : "0.27716 0.27019 0.46798",
			"size" : "393.00000 170.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '2981960200';\n// Please note: Do not remove this line or asset references may break.\n// Please note: Do not remove this line or asset references may break.\n\n\nexport var scriptProperties = createScriptProperties()\n\t.addCombo({\n\t\tname: 'monthFormat',\n\t\tlabel: 'Month Format',\n\t\toptions: [{\n\t\t\tlabel: 'Numeric',\n\t\t\tvalue: '1'\n\t\t}, {\n\t\t\tlabel: 'Abbreviated',\n\t\t\tvalue: '2'\n\t\t},{\n\t\t\tlabel: 'Full',\n\t\t\tvalue: '3'\n\t\t}]\n\t})\n\t.addCombo({\n\t\tname: 'dayFormat',\n\t\tlabel: 'Day Format',\n\t\toptions: [{\n\t\t\tlabel: 'Abbreviated',\n\t\t\tvalue: '1'\n\t\t}, {\n\t\t\tlabel: 'Full',\n\t\t\tvalue: '2'\n\t\t}]\n\t})\n\t.addCheckbox({\n\t\tname: 'showDay',\n\t\tlabel: 'Show Day',\n\t\tvalue: false\n\t})\n   .addCheckbox({\n\t\tname: 'alignVertical',\n\t\tlabel: 'Align Day Vertically',\n\t\tvalue: false\n\t})\n  .addCheckbox({\n\t\tname: 'useDelimiter',\n\t\tlabel: 'Use Delimiter',\n\t\tvalue: false\n\t})\n\t.addText({\n\t\tname: 'addDelimiter',\n\t\tlabel: 'Delimiter',\n\t\tvalue: '/'\n\t})\n\t.finish();\n\n\nlet months;\nlet day;\nvar delimiterValue;\nvar newLine;\n/**\n * @param {String} value (for property 'text')\n */\nexport function update(value){\n  if (scriptProperties.useDelimiter == true){\n  delimiterValue = scriptProperties.addDelimiter\n}\n  if (scriptProperties.useDelimiter == false){\n   delimiterValue = [\n  ' '\n]\n}\nif (scriptProperties.alignVertical == true){\n   newLine = [\n  '\\n'\n]\n}\nif (scriptProperties.alignVertical == false){\n   newLine = [\n  ''\n]\n}\n  if (scriptProperties.monthFormat == 1){\n  months = [\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '6',\n  '7',\n  '8',\n  '9',\n  '10',\n  '11',\n  '12'\n]\n}\n if (scriptProperties.monthFormat == 2){\n months = [\n  ' JAN ',\n  ' FEB ',\n  ' MAR ',\n  ' APR ',\n  ' MAY ',\n  ' JUN ',\n  ' JUL ',\n  ' AUG ',\n  ' SEP ',\n  ' OCT ',\n  ' NOV ',\n  ' DEC '\n]\n}\nif (scriptProperties.monthFormat == 3){\n months = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December'\n]\n}\nif (scriptProperties.dayFormat == 1){\n  day = [\n  'Sun',\n  'Mon',\n  'Tue',\n  'Wed',\n  'Thu',\n  'Fri',\n  '\\nSat'\n]\n}\nif (scriptProperties.dayFormat == 2){\n day = [\n  'Sunday',\n  'Monday',\n  'Tuesday',\n  'Wednesday',\n  'Thursday',\n  'Friday',\n  '\\nSaturday'\n]\n}\n\tlet date = new Date();{\n    if (scriptProperties.showDay == true ){\n    return day[date.getDay()] + newLine + ' ' + date.getDate() + delimiterValue + months[date.getMonth()] + delimiterValue + date.getFullYear();\n    }\n    if (scriptProperties.showDay == false ){\n\treturn   date.getDate() + delimiterValue + months[date.getMonth()] + delimiterValue + date.getFullYear();\n}\n}\n}\n",
				"scriptproperties" : 
				{
					"addDelimiter" : "",
					"alignVertical" : false,
					"dayFormat" : "2",
					"monthFormat" : "2",
					"showDay" : false,
					"useDelimiter" : true
				},
				"value" : "<Date>"
			},
			"verticalalign" : "center"
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.00000 0.00000 0.00000",
			"blockalign" : false,
			"brightness" : 2.3900001,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : "0.62353 0.82745 1.00000",
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/2981960200/blurprecise/effect.json",
					"id" : 43801,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"scale" : "1.28 1.28"
							},
							"id" : 43802
						},
						{
							"combos" : 
							{
								"ENABLEMASK" : 1,
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "1.28 1.28"
							},
							"id" : 43803
						}
					],
					"visible" : true
				}
			],
			"font" : "fonts/Archive.ttf",
			"horizontalalign" : "center",
			"id" : 43800,
			"limitrows" : false,
			"limituseellipsis" : false,
			"limitwidth" : false,
			"maxrows" : 1,
			"maxwidth" : 500.0,
			"name" : "Clock",
			"opaquebackground" : false,
			"origin" : "0.00000 -107.09850 0.00000",
			"padding" : 32,
			"parallaxDepth" : "-1.50000 -1.50000",
			"parent" : 43807,
			"pointsize" : 25.0,
			"scale" : "0.24490 0.24773 0.29262",
			"size" : "325.00000 168.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '2981960200';\n// Please note: Do not remove this line or asset references may break.\n\nexport var scriptProperties = createScriptProperties()\n\t// Whether you want a 24h or 12h style format\n\t.addCheckbox({\n\t\tname: 'use24hFormat',\n\t\tlabel: 'ui_editor_properties_use_24h_format',\n\t\tvalue: true\n\t})\n\t// Whether you want to see the seconds or not\n\t.addCheckbox({\n\t\tname: 'showSeconds',\n\t\tlabel: 'ui_editor_properties_show_seconds',\n\t\tvalue: false\n\t})\n\t// This will be used to separate each element\n\t.addText({\n\t\tname: 'delimiter',\n\t\tlabel: 'ui_editor_properties_delimiter',\n\t\tvalue: ':'\n\t})\n\t.finish();\n\n/**\n * @param {String} value (for property 'text')\n */\nexport function update(value) {\n\tlet time = new Date();\n\tvar hours = time.getHours();\n\tif (!scriptProperties.use24hFormat) {\n\t\thours %= 12;\n\t\tif (hours == 0) {\n\t\t\thours = 12;\n\t\t}\n\t}\n\thours = (\"00\" + hours).slice(-2);\n\tlet minutes = (\"00\" + time.getMinutes()).slice(-2);\n\tvalue = \"-\" + hours + scriptProperties.delimiter + minutes+\"-\";\n\tif (scriptProperties.showSeconds) {\n\t\tlet seconds = (\"00\" + time.getSeconds()).slice(-2);\n\t\tvalue += scriptProperties.delimiter + seconds;\n\t}\n\treturn value;\n}\n",
				"scriptproperties" : 
				{
					"delimiter" : ":",
					"showSeconds" : false,
					"use24hFormat" : true
				},
				"value" : "12:34"
			},
			"verticalalign" : "center",
			"visible" : 
			{
				"user" : 
				{
					"condition" : "0",
					"name" : "clock"
				},
				"value" : true
			}
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.00000 0.00000 0.00000",
			"blockalign" : false,
			"brightness" : 2.3900001,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : "0.62353 0.82745 1.00000",
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/2981960200/blurprecise/effect.json",
					"id" : 12291,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"scale" : "1.28 1.28"
							},
							"id" : 12292
						},
						{
							"combos" : 
							{
								"ENABLEMASK" : 1,
								"VERTICAL" : 1
							},
							"constantshadervalues" : 
							{
								"scale" : "1.28 1.28"
							},
							"id" : 12293
						}
					],
					"visible" : true
				}
			],
			"font" : "fonts/Archive.ttf",
			"horizontalalign" : "center",
			"id" : 12290,
			"limitrows" : false,
			"limituseellipsis" : false,
			"limitwidth" : false,
			"maxrows" : 1,
			"maxwidth" : 500.0,
			"name" : "Clock",
			"opaquebackground" : false,
			"origin" : "0.00000 -107.09850 0.00000",
			"padding" : 32,
			"parallaxDepth" : "-1.50000 -1.50000",
			"parent" : 43807,
			"pointsize" : 25.0,
			"scale" : "0.24490 0.24773 0.29262",
			"size" : "325.00000 168.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '2981960200';\n// Please note: Do not remove this line or asset references may break.\n\nexport var scriptProperties = createScriptProperties()\n\t// Whether you want a 24h or 12h style format\n\t.addCheckbox({\n\t\tname: 'use24hFormat',\n\t\tlabel: 'ui_editor_properties_use_24h_format',\n\t\tvalue: true\n\t})\n\t// Whether you want to see the seconds or not\n\t.addCheckbox({\n\t\tname: 'showSeconds',\n\t\tlabel: 'ui_editor_properties_show_seconds',\n\t\tvalue: false\n\t})\n\t// This will be used to separate each element\n\t.addText({\n\t\tname: 'delimiter',\n\t\tlabel: 'ui_editor_properties_delimiter',\n\t\tvalue: ':'\n\t})\n\t.finish();\n\n/**\n * @param {String} value (for property 'text')\n */\nexport function update(value) {\n\tlet time = new Date();\n\tvar hours = time.getHours();\n\tif (!scriptProperties.use24hFormat) {\n\t\thours %= 12;\n\t\tif (hours == 0) {\n\t\t\thours = 12;\n\t\t}\n\t}\n\thours = (\"00\" + hours).slice(-2);\n\tlet minutes = (\"00\" + time.getMinutes()).slice(-2);\n\tvalue = \"-\" + hours + scriptProperties.delimiter + minutes+\"-\";\n\tif (scriptProperties.showSeconds) {\n\t\tlet seconds = (\"00\" + time.getSeconds()).slice(-2);\n\t\tvalue += scriptProperties.delimiter + seconds;\n\t}\n\treturn value;\n}\n",
				"scriptproperties" : 
				{
					"delimiter" : ":",
					"showSeconds" : false,
					"use24hFormat" : false
				},
				"value" : "12:34"
			},
			"verticalalign" : "center",
			"visible" : 
			{
				"user" : 
				{
					"condition" : "1",
					"name" : "clock"
				},
				"value" : false
			}
		},
		{
			"alpha" : 0.0,
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"id" : 788,
			"image" : "models/util/solidlayer.json",
			"name" : "Media Info (ROUND)",
			"origin" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'isMovable',\n        label: 'Is movable',\n        value: false\n    })\n    .finish();\n\nconst storageName = \"storedPosRoundMIC\";\nlet isDragging = false, dragOffset, timer;\n\nexport function cursorDown(event) {\n    timer = Date.now();\n    isDragging = true;\n    dragOffset = thisLayer.origin.subtract(event.worldPosition);\n}\n\nexport function cursorUp(event) {\n    isDragging = false;\n    localStorage.set(storageName, thisLayer.origin);\n}\n\nexport function cursorMove(event) {\n    const overClick = Date.now() - timer > 50;\n    if (!overClick) dragOffset = thisLayer.origin.subtract(event.worldPosition);\n\n    if (isDragging && scriptProperties.isMovable && shared.miDragable && overClick) {\n        thisLayer.origin = event.worldPosition.add(dragOffset);\n    }\n}\n\nexport function init() {\n    shared.miDragable = localStorage.get(\"miDragable\");\n    shared.miDragable = shared.miDragable == undefined ? scriptProperties.isMovable : shared.miDragable;\n    return localStorage.get(storageName) || thisLayer.origin;\n} \n",
				"scriptproperties" : 
				{
					"isMovable" : true
				},
				"value" : "3462.50684 1839.53003 0.00000"
			},
			"parallaxDepth" : "0.00000 0.00000",
			"scale" : "0.40000 0.40000 0.40000",
			"size" : "512.00000 512.00000",
			"visible" : 
			{
				"user" : "mediainfo",
				"value" : false
			}
		},
		{
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addSlider({\n\t\tname: 'dur',\n\t\tlabel: 'Transition duration',\n\t\tvalue: 1,\n\t\tmin: 0,\n\t\tmax: 2,\n\t\tinteger: false\n\t})\n\t.finish();\n\nlet timer, oldColor = new Vec3(0), newColor = new Vec3(0);\n\nexport function update() {\n\tvar color = newColor;\n\n\tif (timer < scriptProperties.dur) {\n\t\tcolor = oldColor.mix(newColor, timer / scriptProperties.dur);\n\t\ttimer += engine.frametime;\n\t\tshared.miPrimaryColor = color;\n\t}\n\n\treturn color;\n}\n\nexport function mediaThumbnailChanged(event) {\n\ttimer = 0;\n\toldColor = newColor;\n\tnewColor = event.primaryColor;\n\tshared.miPrimaryColor = newColor;\n}\n\nexport function init() {\n\tshared.miPrimaryColor = newColor;\n}\n",
				"scriptproperties" : 
				{
					"dur" : 1
				},
				"value" : "0.48235 0.12941 0.12941"
			},
			"disablepropagation" : false,
			"id" : 789,
			"image" : "models/workshop/3219510589/corner5.json",
			"name" : "Holder (hide before publish)",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 788,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nimport * as WEMath from 'WEMath';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'media',\n        label: 'Media Based Detection',\n        value: true\n    })\n    .addCheckbox({\n        name: 'invert',\n        label: 'Invert',\n        value: false\n\t})\n    .addSlider({\n        name: 'min',\n        label: 'Min value',\n        value: 0.75,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'max',\n        label: 'Max value',\n        value: 1,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerIn',\n        label: 'Fade in timer',\n        value: 0.05,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerOut',\n        label: 'Fade out timer',\n        value: 1.25,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeInDur',\n        label: 'Fade in duration',\n        value: 0.25,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeOutDur',\n        label: 'Fade out duration',\n        value: 0.2,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .finish();\n\nconst vecToggles = new Vec3(1, 1, 1); //1 enabled, 0 disabled\nconst audioBuffer = engine.registerAudioBuffers(16);\nlet state, oldState, target, dur = 0, isVector, stopTimeout, oldSettings = false, cursor, oldCursor = false;\n\nexport function update(value) {\n\tif (oldState == undefined) {\n\t\toldState = state;\n\t\ttarget = (state && shared.miTextPos != 3) ^ scriptProperties.invert ? scriptProperties.max : scriptProperties.min;\n\t\treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n    cursor = shared.miCursorIn ^ scriptProperties.invert;\n\n    if (oldState != state || shared.miSettingsOpen != oldSettings || cursor != oldCursor){\n        if (stopTimeout) stopTimeout();\n        oldState = state;\n\n        let fadeDur, targ, timer;\n\n        if (state && shared.miTextPos != 3 || shared.miSettingsOpen || cursor && shared.miTextPos == 3 && state) {\n            timer = scriptProperties.timerIn;\n            fadeDur = scriptProperties.fadeInDur;\n            targ = scriptProperties.max;\n        } else {\n            timer = scriptProperties.timerOut;\n            fadeDur = scriptProperties.fadeOutDur;\n            targ = scriptProperties.min;\n        }\n        if (shared.miSettingsOpen != oldSettings) {\n            timer = 0;\n            fadeDur = shared.miSettingsOpenSpeed;\n        }\n\n        stopTimeout = engine.setTimeout(() => {setTarget(targ, fadeDur)}, timer * 1000);\n\n        oldCursor = cursor;\n        oldSettings = shared.miSettingsOpen;\n    }\n\n    return lerp(value, target, dur);\n}\n\nfunction setTarget(targ, fadeDur) {\n    target = isVector ? new Vec3(targ) : targ;\n\tdur = engine.frametime / Math.max(0.0001, fadeDur);\n    dur = isVector ? vecToggles.multiply(dur) : dur;\n}\n\nfunction lerp(a, b, value) {\n    if (isVector) {\n        const x = WEMath.mix(a.x, b.x, value.x);\n        const y = WEMath.mix(a.y, b.y, value.y);\n        const z = WEMath.mix(a.z, b.z, value.z);\n        return new Vec3(x, y, z);\n    }\n    return WEMath.mix(a, b, value);\n}\n\nexport function init(value) {\n\tisVector = value.hasOwnProperty(\"x\");\n\tdur = isVector ? new Vec3(dur) : dur;\n    shared.miCursorIn = false;\n\n    if (!scriptProperties.media) {\n\t\tstate = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n\t\ttarget = state ? scriptProperties.max : scriptProperties.min;\n    \treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n}\n\nexport function mediaPlaybackChanged(event) {\n    if (scriptProperties.media) state = event.state == 1 ^ scriptProperties.invert;\n}\n\nexport function cursorEnter(event) {\n\tshared.miCursorIn = true;\n}\n\nexport function cursorLeave(event) {\n\tshared.miCursorIn = false;\n}\n",
				"scriptproperties" : 
				{
					"fadeInDur" : 0.25,
					"fadeOutDur" : 0.2,
					"invert" : false,
					"max" : 1,
					"media" : true,
					"min" : 0.69999999,
					"timerIn" : 0.050000001,
					"timerOut" : 1.25
				},
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "512.00000 512.00000",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\n/**\n * @param {MediaPlaybackEvent} event\n */\nexport function mediaPlaybackChanged(event) {\n\tthisLayer.visible = event.state !== MediaPlaybackEvent.PLAYBACK_STOPPED;\n}\n",
				"value" : true
			}
		},
		{
			"alpha" : 0.69999999,
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miPrimaryColor;\n}\n",
				"value" : "0.48235 0.12941 0.12941"
			},
			"disablepropagation" : false,
			"id" : 792,
			"image" : "models/workshop/3219510589/corner5.json",
			"name" : "Clock Container",
			"origin" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nimport * as WEMath from 'WEMath';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'enabled',\n        label: 'Enabled',\n        value: true\n    })\n    .addCheckbox({\n        name: 'media',\n        label: 'Media based detection',\n        value: true\n    })\n    .addCheckbox({\n\t\tname: 'invert',\n\t\tlabel: 'Invert',\n\t\tvalue: false\n\t})\n    .addSlider({\n        name: 'min',\n        label: 'Min value',\n        value: 0,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'max',\n        label: 'Max value',\n        value: 1,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerIn',\n        label: 'Fade in timer',\n        value: 0.5,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerOut',\n        label: 'Fade out timer',\n        value: 0.5,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeInDur',\n        label: 'Fade in duration',\n        value: 0.155,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeOutDur',\n        label: 'Fade out duration',\n        value: 0.2,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerSwitch',\n        label: 'Flip timer',\n        value: 0.08,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'switchDur',\n        label: 'Flip duration',\n        value: 0.125,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .finish();\n\nconst vecToggles = new Vec3(0, 1, 0); //1 enabled, 0 disabled\nconst audioBuffer = engine.registerAudioBuffers(16);\nlet state, oldState, target, dur = 0, isVector, stopTimeout, pos, oldPos, flip, mediaState = 0, oldSettings = false, oldClockOrientation = 2, oldShowClock = 2, parent, cursor, oldCursor = false;\n\nexport function update(value) {\n\tif (oldState == undefined) {\n        oldState = state;\n        target = (!state && shared.miTextPos != 3 && shared.miShowClock == 2) ^ scriptProperties.invert ? scriptProperties.max : scriptProperties.min;\n        target = shared.miClockPos == 1 || shared.miClockPos == 2 && oldPos ? target : -target;\n        return target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n    }\n\n    pos = parent.getTransformMatrix().m[13] > engine.canvasSize.y / 2;\n    state = scriptProperties.media ? mediaState : !!audioBuffer.average.reduce((a, b) => a + b);\n    state = (!scriptProperties.enabled || state) ^ scriptProperties.invert ^ !scriptProperties.enabled;\n    state = (shared.miShowClock == 1 || state) && shared.miShowClock;\n    cursor = shared.miCursorIn ^ scriptProperties.invert;\n\n    flip = pos != oldPos;\n    const settings = shared.miSettingsOpen != oldSettings;\n    const orientation = shared.miClockPos != oldClockOrientation;\n    const toggle = shared.miShowClock != oldShowClock;\n    const cursorChange = cursor != oldCursor;\n\n    if (oldState != state || flip || settings || orientation || toggle || cursorChange){\n        if (stopTimeout) stopTimeout();\n        oldState = state;\n        \n        let fadeDur, targ, timer;\n        if ((state && shared.miTextPos != 3 || shared.miSettingsOpen || (cursor || state) && shared.miTextPos == 3 && !shared.miSettingsOpen) && shared.miShowClock || shared.miShowClock == 1) {\n            timer = flip ? scriptProperties.timerSwitch : scriptProperties.timerIn;\n            fadeDur = scriptProperties.fadeInDur;\n            targ = scriptProperties.max;\n        } else {\n            timer = flip ? scriptProperties.timerSwitch : scriptProperties.timerOut;\n            fadeDur = scriptProperties.fadeOutDur;\n            targ = scriptProperties.min;\n        }\n        if (settings || orientation || toggle || cursorChange) {\n            timer = !cursor ^ scriptProperties.invert && cursorChange ? scriptProperties.timerOut : 0;\n            fadeDur = !cursor ^ scriptProperties.invert && cursorChange ? scriptProperties.fadeOutDur : shared.miSettingsOpenSpeed;\n        }\n\n        stopTimeout = engine.setTimeout(() => {setTarget(targ, fadeDur)}, timer * 1000);\n\t\t\n        oldCursor = cursor;\n        oldShowClock = shared.miShowClock;\n\t\toldClockOrientation = shared.miClockPos;\n        oldSettings = shared.miSettingsOpen;\n        oldPos = pos;\n    }\n\n    return lerp(value, target, dur);\n}\n\nfunction setTarget(targ, fadeDur) {\n    target = shared.miClockPos == 1 || shared.miClockPos == 2 && pos ? targ : -targ;\n    target = isVector ? new Vec3(target) : target;\n\tdur = engine.frametime / Math.max(0.0001, flip ? scriptProperties.switchDur : fadeDur);\n    dur = isVector ? vecToggles.multiply(dur) : dur;\n}\n\nfunction lerp(a, b, value) {\n    if (isVector) {\n        const x = WEMath.mix(a.x, b.x, value.x);\n        const y = WEMath.mix(a.y, b.y, value.y);\n        const z = WEMath.mix(a.z, b.z, value.z);\n        return new Vec3(x, y, z);\n    }\n    return WEMath.mix(a, b, value);\n}\n\nexport function init(value) {\n\tisVector = value.hasOwnProperty(\"x\");\n\tdur = isVector ? new Vec3(dur) : dur;\n    oldPos = thisLayer.getTransformMatrix().m[13] > engine.canvasSize.y / 2;\n    shared.miTextContainerScale = value;\n    parent = thisLayer.getParent();\n    shared.miShowClock = localStorage.get(\"miShowClock\");\n    shared.miShowClock = shared.miShowClock == undefined ? scriptProperties.enabled * 2 : shared.miShowClock;\n    shared.miClockPos = localStorage.get(\"miClockPos\");\n    shared.miClockPos = shared.miClockPos == undefined ? 2 : shared.miClockPos;\n\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n}\n\nexport function mediaPlaybackChanged(event) {\n    mediaState = event.state == 1;\n    if (oldState == undefined && scriptProperties.media) state = mediaState ^ scriptProperties.invert;\n}\n",
				"scriptproperties" : 
				{
					"enabled" : true,
					"fadeInDur" : 0.25,
					"fadeOutDur" : 0.075000003,
					"invert" : true,
					"max" : -182,
					"media" : true,
					"min" : 0,
					"switchDur" : 0.125,
					"timerIn" : 1.25,
					"timerOut" : 0.050000001,
					"timerSwitch" : 0.079999998
				},
				"value" : "0.00000 -182.00000 0.00000"
			},
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 789,
			"size" : "512.00000 512.00000"
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.00000 0.00000 0.00000",
			"blockalign" : false,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"font" : "fonts/workshop/3219510589/LEMONMILK-Bold.otf",
			"horizontalalign" : "center",
			"id" : 793,
			"limitrows" : false,
			"limituseellipsis" : false,
			"limitwidth" : false,
			"maxrows" : 1,
			"maxwidth" : 500.0,
			"name" : "Clock",
			"opaquebackground" : false,
			"origin" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent;\n\nexport function update(value) {\n\tvalue.y = initValue.y * Math.sign(-parent.origin.y);\n\tthisLayer.verticalalign = parent.origin.y < 0 ? \"top\" : \"bottom\";\n\treturn value;\n}\n\nexport function init(value) {\n\tinitValue = value;\n\tparent = thisLayer.getParent();\n}\n",
				"value" : "0.00000 -66.00000 0.00000"
			},
			"padding" : 32,
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 792,
			"pointsize" : 32.0,
			"size" : "373.00000 180.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addCheckbox({\n\t\tname: 'use24hFormat',\n\t\tlabel: 'ui_editor_properties_use_24h_format',\n\t\tvalue: true\n\t})\n\t.addCheckbox({\n\t\tname: 'showSeconds',\n\t\tlabel: 'ui_editor_properties_show_seconds',\n\t\tvalue: false\n\t})\n\t.addText({\n\t\tname: 'delimiter',\n\t\tlabel: 'ui_editor_properties_delimiter',\n\t\tvalue: ':'\n\t})\n\t.finish();\n\nexport function update(value) {\n\tlet time = new Date();\n\tvar hours = time.getHours();\n\tif (!scriptProperties.use24hFormat) {\n\t\thours %= 12;\n\t\tif (hours == 0) {\n\t\t\thours = 12;\n\t\t}\n\t}\n\thours = (\"00\" + hours).slice(-2);\n\tlet minutes = (\"00\" + time.getMinutes()).slice(-2);\n\tvalue = hours + scriptProperties.delimiter + minutes;\n\tif (scriptProperties.showSeconds) {\n\t\tlet seconds = (\"00\" + time.getSeconds()).slice(-2);\n\t\tvalue += scriptProperties.delimiter + seconds;\n\t}\n\treturn value;\n}\n",
				"scriptproperties" : 
				{
					"delimiter" : ":",
					"showSeconds" : false,
					"use24hFormat" : true
				},
				"value" : "12:34"
			},
			"verticalalign" : "top"
		},
		{
			"alpha" : 0.69999999,
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miPrimaryColor;\n}\n",
				"value" : "0.48235 0.12941 0.12941"
			},
			"disablepropagation" : false,
			"id" : 794,
			"image" : "models/workshop/3219510589/corner4.json",
			"name" : "Text Container",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 789,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nimport * as WEMath from 'WEMath';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'media',\n        label: 'Media based detection',\n        value: true\n    })\n    .addCheckbox({\n\t\tname: 'invert',\n\t\tlabel: 'Invert',\n\t\tvalue: false\n\t})\n    .addSlider({\n        name: 'min',\n        label: 'Min value',\n        value: 0,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'max',\n        label: 'Max value',\n        value: 1,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerIn',\n        label: 'Fade in timer',\n        value: 0.5,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerOut',\n        label: 'Fade out timer',\n        value: 0.5,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeInDur',\n        label: 'Fade in duration',\n        value: 0.155,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeOutDur',\n        label: 'Fade out duration',\n        value: 0.2,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerSwitch',\n        label: 'Flip timer',\n        value: 0.08,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'switchDur',\n        label: 'Flip duration',\n        value: 0.125,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .finish();\n\nconst vecToggles = new Vec3(1, 0, 0); //1 enabled, 0 disabled\nconst audioBuffer = engine.registerAudioBuffers(16);\nlet state, oldState, target, dur = 0, isVector, stopTimeout, pos, oldPos, flip, oldSettings = false, oldTextVisible = true, cursor, oldCursor = false;\n\nexport function update(value) {\n\tif (oldState == undefined) {\n        oldState = state;\n        target = (state && shared.miTextPos != 3) ^ scriptProperties.invert ? scriptProperties.max : scriptProperties.min;\n        target = shared.miTextPos == 1 || shared.miTextPos == 2 && oldPos ? target : -target;\n        return target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n    }\n    \n    pos = thisLayer.getTransformMatrix().m[12] > engine.canvasSize.x / 2;\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n    cursor = shared.miCursorIn ^ scriptProperties.invert;\n\n    flip = pos != oldPos;\n    const textVisibleChange = shared.miTextVisible != oldTextVisible;\n    const settingsChange = oldSettings != shared.miSettingsOpen;\n    const cursorChange = cursor != oldCursor;\n    \n    if (oldState != state || flip || settingsChange || textVisibleChange || cursorChange){\n        if (stopTimeout) stopTimeout();\n        oldState = state;\n        \n        let fadeDur, targ, timer;\n        if (state && !shared.miSettingsOpen && shared.miTextVisible && shared.miTextPos != 3 || shared.miSettingsOpen && !shared.miTextVisible || cursor && shared.miTextPos == 3 && !shared.miSettingsOpen && state && shared.miTextVisible) {\n            timer = flip ? scriptProperties.timerSwitch : scriptProperties.timerIn;\n            fadeDur = scriptProperties.fadeInDur;\n            targ = scriptProperties.max;\n        } else {\n            timer = flip ? scriptProperties.timerSwitch : scriptProperties.timerOut;\n            fadeDur = scriptProperties.fadeOutDur;\n            targ = scriptProperties.min;\n        }\n        if (settingsChange || textVisibleChange || cursorChange) {\n            timer = !cursor ^ scriptProperties.invert && cursorChange ? scriptProperties.timerOut : 0;\n            fadeDur = !cursor ^ scriptProperties.invert && cursorChange ? scriptProperties.fadeOutDur : shared.miSettingsOpenSpeed;\n        }\n\n        stopTimeout = engine.setTimeout(() => {setTarget(targ, fadeDur)}, timer * 1000);\n        \n        oldCursor = cursor;\n        oldTextVisible = shared.miTextVisible;\n        oldSettings = shared.miSettingsOpen;\n        oldPos = pos;\n    }\n    \n    return shared.miTextContainerScale = lerp(value, target, dur);\n}\n\nfunction setTarget(targ, fadeDur) {\n    target = shared.miTextPos == 1 || (shared.miTextPos >= 2 && pos) ? targ : -targ;\n    target = isVector ? new Vec3(target) : target;\n\tdur = engine.frametime / Math.max(0.0001, flip ? scriptProperties.switchDur : fadeDur);\n    dur = isVector ? vecToggles.multiply(dur) : dur;\n}\n\nfunction lerp(a, b, value) {\n    if (isVector) {\n        const x = WEMath.mix(a.x, b.x, value.x);\n        const y = WEMath.mix(a.y, b.y, value.y);\n        const z = WEMath.mix(a.z, b.z, value.z);\n        return new Vec3(x, y, z);\n    }\n    return WEMath.mix(a, b, value);\n}\n\nexport function init(value) {\n\tisVector = value.hasOwnProperty(\"x\");\n\tdur = isVector ? new Vec3(dur) : dur;\n    oldPos = thisLayer.getTransformMatrix().m[12] > engine.canvasSize.x / 2;\n    shared.miTextContainerScale = value;\n    shared.miTextPos = localStorage.get(\"miTextPos\");\n    shared.miTextPos = shared.miTextPos == undefined ? 2 : shared.miTextPos;\n\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n}\n\nexport function mediaPlaybackChanged(event) {\n    if (scriptProperties.media) state = event.state == 1 ^ scriptProperties.invert;\n}\n",
				"scriptproperties" : 
				{
					"fadeInDur" : 0.155,
					"fadeOutDur" : 0.2,
					"invert" : false,
					"max" : 1,
					"media" : true,
					"min" : 0,
					"switchDur" : 0.125,
					"timerIn" : 0.5,
					"timerOut" : 0.5,
					"timerSwitch" : 0.079999998
				},
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "512.00000 512.00000"
		},
		{
			"alignment" : "right",
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miPrimaryColor;\n}\n",
				"value" : "0.48235 0.12941 0.12941"
			},
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/3219510589/tint/effect.json",
					"id" : 798,
					"name" : "",
					"passes" : 
					[
						{
							"combos" : 
							{
								"BLENDMODE" : 0
							},
							"constantshadervalues" : 
							{
								"alpha" : 
								{
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addSlider({\n\t\tname: 'fadeSpeed',\n\t\tlabel: 'Fade speed',\n\t\tvalue: 1,\n\t\tmin: 0,\n\t\tmax: 3,\n\t\tinteger: false\n\t})\n\t.finish();\n\nlet initValue, parent, initParent;\n\nexport function update() {\n\tshared.miTextBgColorFadeSpeed = scriptProperties.fadeSpeed;\n\treturn Math.max(0, Math.abs(parent.scale.x / initParent.x) * scriptProperties.fadeSpeed - (scriptProperties.fadeSpeed - 1)) * initValue;\n}\n\nexport function init(value) {\n\tinitValue = value;\n\tparent = thisLayer.getParent();\n\tinitParent = parent.scale;\n\tshared.miTextBgColorFadeSpeed = scriptProperties.fadeSpeed;\n\tshared.miInitTextBgColorAlpha = value;\n}\n",
									"scriptproperties" : 
									{
										"fadeSpeed" : 1
									},
									"value" : 0.30000001
								},
								"color" : 
								{
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addSlider({\n\t\tname: 'dur',\n\t\tlabel: 'Transition duration',\n\t\tvalue: 1,\n\t\tmin: 0,\n\t\tmax: 2,\n\t\tinteger: false\n\t})\n\t.finish();\n\nlet timer, oldColor = new Vec3(0), newColor = new Vec3(0);\n\nexport function update() {\n\tvar color = newColor;\n\t\n\tif (timer < scriptProperties.dur) {\n\t\tcolor = oldColor.mix(newColor, timer / scriptProperties.dur);\n\t\ttimer += engine.frametime;\n\t\tshared.miTextBgColor = color;\n\t}\n\n\treturn color;\n}\n\nexport function mediaThumbnailChanged(event) {\n\ttimer = 0;\n\toldColor = newColor;\n\tnewColor = event.tertiaryColor;\n\tshared.miTextBgColor = newColor;\n}\n\nexport function init() {\n\tshared.miTextBgColor = newColor;\n}\n",
									"scriptproperties" : 
									{
										"dur" : 1
									},
									"value" : "0.00000 0.00000 0.00000"
								}
							},
							"id" : 799,
							"textures" : [ null, "workshop/3219510589/text_viss0" ]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/workshop/3219510589/opacity/effect.json",
					"id" : 801,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"alpha" : 0.69999999
							},
							"id" : 802
						}
					],
					"visible" : true
				}
			],
			"id" : 797,
			"image" : "models/util/solidlayer.json",
			"name" : "Background",
			"origin" : "-256.00000 0.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 794,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addSlider({\n\t\tname: 'border',\n\t\tlabel: 'Border',\n\t\tvalue: 0,\n\t\tmin: -300,\n\t\tmax: 300,\n\t\tinteger: false\n\t})\n\t.finish();\n\nlet artist = \"Artist Name\", song = \"Song Title\", settings = \"Settings Container\", corners = \"Rounded Corners\", initScale;\n\nexport function update(value) {\n    let width;\n    if (!shared.miTextVisible) width = settings.size.x / 2 * Math.abs(settings.scale.x) - settings.origin.x;\n    else width = Math.max(artist.size.x * Math.abs(artist.scale.x) - artist.origin.x, song.size.x * Math.abs(song.scale.x) - song.origin.x);\n\n    width -= corners.size.x * Math.min(1, Math.abs(corners.scale.x)) - scriptProperties.border;\n    value.x = width / (thisLayer.size.x * initScale.x) * initScale.x;\n    return value;\n}\n\nexport function init(value) {\n    artist = thisScene.getLayer(artist);\n    song = thisScene.getLayer(song);\n    settings = thisScene.getLayer(settings);\n    corners = thisScene.getLayer(corners);\n    initScale = value;\n}\n",
				"scriptproperties" : 
				{
					"border" : -182
				},
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "1206.00000 512.00000"
		},
		{
			"alignment" : "right",
			"alpha" : 0.69999999,
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initContainer;\n\nexport function update() {\n    const mixValue = Math.max(0, Math.abs(shared.miTextContainerScale.x / initContainer.x) * shared.miTextBgColorFadeSpeed - (shared.miTextBgColorFadeSpeed - 1)) * shared.miInitTextBgColorAlpha;\n    return shared.miPrimaryColor.mix(shared.miTextBgColor, mixValue);\n}\n\nexport function init() {\n    initContainer = shared.miTextContainerScale;\n}\n",
				"value" : "0.33725 0.09020 0.09020"
			},
			"disablepropagation" : false,
			"id" : 805,
			"image" : "models/workshop/3219510589/corners.json",
			"name" : "Rounded Corners",
			"origin" : "-1206.00000 0.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 797,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent, initParent, container, initContainer;\n\nexport function update(value) {\n    value.x = initValue.x / Math.max(0.001, Math.abs(parent.scale.x * container.scale.x)) * initParent.x * initContainer.x;\n    return value;\n}\n\nexport function init(value) {\n    parent = thisLayer.getParent();\n    container = parent.getParent();\n    initParent = parent.scale;\n    initContainer = container.scale;\n    initValue = value;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "85.00000 512.00000"
		},
		{
			"alignment" : "right",
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addSlider({\n\t\tname: 'dur',\n\t\tlabel: 'Transition duration',\n\t\tvalue: 1,\n\t\tmin: 0,\n\t\tmax: 2,\n\t\tinteger: false\n\t})\n\t.finish();\n\nlet timer, oldColor = new Vec3(0), newColor = new Vec3(0);\n\nexport function update() {\n\tvar color = newColor;\n\n\tif (timer < scriptProperties.dur) {\n\t\tcolor = oldColor.mix(newColor, timer / scriptProperties.dur);\n\t\ttimer += engine.frametime;\n\t\tshared.miTextColor = color;\n\t}\n\n\treturn color;\n}\n\nexport function mediaThumbnailChanged(event) {\n\ttimer = 0;\n\toldColor = newColor;\n\tnewColor = event.textColor;\n\tshared.miTextColor = newColor;\n}\n",
				"scriptproperties" : 
				{
					"dur" : 1
				},
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 812,
			"image" : "models/util/solidlayer.json",
			"name" : "Progress Bar",
			"origin" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent, initParent;\n\nexport function update(value) {\n    value.x = initValue.x / Math.max(0.001, parent.scale.x) * initParent.x;\n    return value;\n}\n\nexport function init(value) {\n    parent = thisLayer.getParent();\n    initParent = parent.scale;\n    initValue = value;\n}\n",
				"value" : "-66.00000 -162.00000 0.00000"
			},
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 797,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\n// Script by Rusty\n\nlet defScale, defRatio = 0.01, curRatio = 0, playbackState, oldTime = 0, newTime = 0;\nconst updateMult = 1; //how smooth bar updates, 1.0 = updates each second, 0.1 = updates each .1 of a second\n//though smaller the number the less accurate it gets, wouldn't recommend going lower than 0.5, 1.0 is pretty much 100% accurate\n\nexport function update(value) {\n    newTime = Date.now();\n    if (playbackState == MediaPlaybackEvent.PLAYBACK_PLAYING && newTime - oldTime >= 1000*updateMult)\n    {\n        curRatio += defRatio*updateMult;\n        value.x = defScale.x*curRatio;\n        oldTime = newTime;\n    }\n    return value;\n}\n\nexport function init(value) {\n    defScale = value;\n    oldTime = Date.now();\n    playbackState = MediaPlaybackEvent.PLAYBACK_STOPPED;\n    return value;\n}\n\nexport function mediaTimelineChanged(event) {\n    defRatio = 1/event.duration;\n    curRatio = event.position/event.duration;\n}\n\nexport function mediaPlaybackChanged(event) {\n    playbackState = event.state;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "1132.00000 15.00000",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nconst trigger = 0.05;\nlet parent;\n\nexport function update(value) {\n    if (shared.miSettingsOpen && Math.abs(parent.scale.x) < trigger) value = false;\n    else if (!shared.miSettingsOpen && Math.abs(parent.scale.x) < trigger) value = true;\n    return shared.miTextVisible = value;\n}\n\nexport function init() {\n    parent = thisLayer.getParent().getParent();\n    shared.miTextVisible = true;\n    shared.miTextVisibleTriggerValue = trigger;\n}\n",
				"value" : true
			}
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 813,
			"image" : "models/workshop/3219510589/CircleXXXS.json",
			"name" : "Round R",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 812,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent, initParent, container, initContainer;\n\nexport function update(value) {\n    value.x = initValue.x / Math.max(0.001, Math.abs(parent.scale.x * container.scale.x)) * initParent.x * initContainer.x;\n    return value;\n}\n\nexport function init(value) {\n    parent = thisLayer.getParent();\n    container = parent.getParent();\n    initParent = parent.scale;\n    initContainer = container.scale;\n    initValue = value;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "15.00000 15.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 816,
			"image" : "models/workshop/3219510589/CircleXXXS.json",
			"name" : "Round L",
			"origin" : "-1132.00000 0.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 812,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent, initParent, container, initContainer;\n\nexport function update(value) {\n    value.x = initValue.x / Math.max(0.001, Math.abs(parent.scale.x * container.scale.x)) * initParent.x * initContainer.x;\n    return value;\n}\n\nexport function init(value) {\n    parent = thisLayer.getParent();\n    container = parent.getParent();\n    initParent = parent.scale;\n    initContainer = container.scale;\n    initValue = value;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "15.00000 15.00000"
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.43922 0.00000 0.74902",
			"blockalign" : false,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"font" : "fonts/workshop/3219510589/LEMONMILK-Bold.otf",
			"horizontalalign" : "right",
			"id" : 817,
			"limitrows" : true,
			"limituseellipsis" : false,
			"limitwidth" : true,
			"maxrows" : 1,
			"maxwidth" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\n// This script was actually made by seekay XD\n\nlet mediaInfo = \"Media Info (ROUND)\";\n\nexport function init() {\n    mediaInfo = thisScene.getLayer(mediaInfo);\n}\n\nexport function update(value) {\n    if (thisLayer.scale.x < 0) value = engine.canvasSize.x * (1 - 0.25 * mediaInfo.scale.x) - mediaInfo.origin.x;\n    else value = mediaInfo.origin.x - engine.canvasSize.x * 0.25 * mediaInfo.scale.x;\n    return value / mediaInfo.scale.x;\n}\n",
				"value" : 1200.0
			},
			"name" : "Artist Name",
			"opaquebackground" : false,
			"origin" : "-308.00000 4.00000 0.00000",
			"padding" : 0,
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 794,
			"pointsize" : 38.0,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent;\n\nexport function update(value) {\n    value.x = Math.sign(parent.scale.x) * initValue.x;\n    thisLayer.horizontalalign = value.x > 0 ? \"right\" : \"left\";\n    return value;\n}\n\nexport function init(value) {\n    initValue = value;\n    parent = thisLayer.getParent();\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "1166.00000 214.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nvar mediaData = \"\";\n\n/**\n * @param {String} value - for property 'text'\n * @return {String} - update current property value\n */\nexport function update(value) {\n\treturn mediaData;\n}\n\n/**\n * @param {MediaPropertiesEvent} event\n */\nexport function mediaPropertiesChanged(event) {\n\tmediaData = event.artist;\n}\n",
				"value" : "Artist Name\nTHIS LAYER NAME HAS TO BE UNIQUE"
			},
			"verticalalign" : "bottom",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet parent;\n\nexport function update(value) {\n    if (shared.miSettingsOpen && Math.abs(parent.scale.x) < shared.miTextVisibleTriggerValue) value = false;\n    else if (!shared.miSettingsOpen && Math.abs(parent.scale.x) < shared.miTextVisibleTriggerValue) value = true;\n    return shared.miTextVisible = value;\n}\n\nexport function init() {\n    parent = thisLayer.getParent();\n    shared.miTextVisible = true;\n}\n",
				"value" : true
			}
		},
		{
			"anchor" : "none",
			"angles" : "0.00000 -0.00000 0.00000",
			"backgroundbrightness" : 1.0,
			"backgroundcolor" : "0.43922 0.00000 0.74902",
			"blockalign" : false,
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"depthtest" : "enabled",
			"disablepropagation" : false,
			"font" : "fonts/workshop/3219510589/LEMONMILK-Light.otf",
			"horizontalalign" : "right",
			"id" : 818,
			"limitrows" : true,
			"limituseellipsis" : false,
			"limitwidth" : true,
			"maxrows" : 1,
			"maxwidth" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\n// This script was actually made by seekay XD\n\nlet mediaInfo = \"Media Info (ROUND)\";\n\nexport function init(value)\n{\n    mediaInfo = thisScene.getLayer(mediaInfo);\n}\n\nexport function update(value) {\n    if (thisLayer.scale.x < 0) {\n    value = engine.canvasSize.x * (1 - 0.25 * mediaInfo.scale.x) - mediaInfo.origin.x;\n    }\n    else {\n    value = mediaInfo.origin.x - ((engine.canvasSize.x*0.25)*mediaInfo.scale.x);\n  }\n    return value / mediaInfo.scale.x;\n}\n",
				"value" : 1200.0
			},
			"name" : "Song Title",
			"opaquebackground" : false,
			"origin" : "-308.00000 38.00000 0.00000",
			"padding" : 0,
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 794,
			"pointsize" : 32.0,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, parent;\n\nexport function update(value) {\n    value.x = Math.sign(parent.scale.x) * initValue.x;\n    thisLayer.horizontalalign = value.x > 0 ? \"right\" : \"left\";\n    return value;\n}\n\nexport function init(value) {\n    initValue = value;\n    parent = thisLayer.getParent();\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "807.00000 180.00000",
			"text" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nvar mediaData = \"\";\n\n/**\n * @param {String} value - for property 'text'\n * @return {String} - update current property value\n */\nexport function update(value) {\n\treturn mediaData;\n}\n\n/**\n * @param {MediaPropertiesEvent} event\n */\nexport function mediaPropertiesChanged(event) {\n\tmediaData = event.title;\n}\n",
				"value" : "Song Title\nTHIS LAYER NAME HAS TO BE UNIQUE"
			},
			"verticalalign" : "top",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet parent;\n\nexport function update(value) {\n\tif (shared.miSettingsOpen && Math.abs(parent.scale.x) < 1e-4) value = false;\n\telse if (!shared.miSettingsOpen && Math.abs(parent.scale.x) < 1e-4) value = true;\n\treturn shared.miTextVisible = value;\n}\n\nexport function init() {\n    parent = thisLayer.getParent();\n\tshared.miTextVisible = true;\n}\n",
				"value" : true
			}
		},
		{
			"alpha" : 0.0,
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"id" : 819,
			"image" : "models/util/solidlayer.json",
			"name" : "Settings Container",
			"origin" : "-384.00000 0.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 794,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet initValue, container;\n\nexport function update() {\n\treturn initValue.multiply(vecSign(container.scale));\n}\n\nexport function init(value) {\n\tcontainer = thisLayer.getParent();\n\tinitValue = value;\n}\n\nfunction vecSign(vec) {\n\treturn new Vec3(Math.sign(vec.x), Math.sign(vec.y), Math.sign(vec.z));\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"size" : "256.00000 512.00000",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn !shared.miTextVisible && shared.miSettingsOpen;\n}\n",
				"value" : false
			}
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n    return shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 820,
			"image" : "models/workshop/3219510589/dragAndDropToggle.json",
			"name" : "dragAndDropToggle",
			"origin" : "0.00000 170.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 819,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet animation, parent;\n\nexport function init() {\n\tanimation = thisLayer.getTextureAnimation();\n\tanimation.stop();\n\tparent = thisLayer.getParent();\n\tanimation.setFrame(shared.miDragable * 1);\n}\n\nexport function cursorClick(event) {\n\tif (parent.visible) {\n\t\tshared.miDragable = !shared.miDragable;\n\t\tlocalStorage.set(\"miDragable\", shared.miDragable);\n\t\tanimation.setFrame(shared.miDragable * 1);\n\t}\n}\n",
				"value" : "0.80000 0.80000 0.80000"
			},
			"size" : "256.00000 128.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n    return shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 823,
			"image" : "models/workshop/3219510589/clockHideToggle.json",
			"name" : "clockHideToggle",
			"origin" : "0.00000 58.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 819,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet animation, parent;\n\nexport function init() {\n\tanimation = thisLayer.getTextureAnimation();\n\tanimation.stop();\n\tparent = thisLayer.getParent();\n\tanimation.setFrame(shared.miShowClock);\n}\n\nexport function cursorClick(event) {\n\tif (parent.visible) {\n\t\tshared.miShowClock = (shared.miShowClock + 1) % 3;\n\t\tlocalStorage.set(\"miShowClock\", shared.miShowClock);\n\t\tanimation.setFrame(shared.miShowClock);\n\t}\n}\n",
				"value" : "0.80000 0.80000 1.00000"
			},
			"size" : "256.00000 128.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n    return shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 826,
			"image" : "models/workshop/3219510589/clockOrientationToggle.json",
			"name" : "clockOrientationToggle",
			"origin" : "0.00000 -58.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 819,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet animation, parent;\n\nexport function init() {\n    animation = thisLayer.getTextureAnimation();\n    animation.stop();\n    parent = thisLayer.getParent();\n    animation.setFrame(shared.miClockPos);\n}\n\nexport function cursorClick(event) {\n    if (parent.visible) {\n        shared.miClockPos = (shared.miClockPos + 1) % 3;\n        localStorage.set(\"miClockPos\", shared.miClockPos);\n        animation.setFrame(shared.miClockPos);\n    }\n}\n",
				"value" : "0.80000 0.80000 1.00000"
			},
			"size" : "256.00000 128.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n    return shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 829,
			"image" : "models/workshop/3219510589/textOrientationToggle.json",
			"name" : "textOrientationToggle",
			"origin" : "0.00000 -170.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 819,
			"scale" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nlet animation, parent;\n\nexport function init() {\n    animation = thisLayer.getTextureAnimation();\n    animation.stop();\n    parent = thisLayer.getParent();\n    animation.setFrame(shared.miTextPos);\n}\n\nexport function cursorClick(event) {\n    if (parent.visible) {\n        shared.miTextPos = (shared.miTextPos + 1) % 4;\n        localStorage.set(\"miTextPos\", shared.miTextPos);\n        animation.setFrame(shared.miTextPos);\n    }\n}\n",
				"value" : "0.80000 0.80000 1.00000"
			},
			"size" : "256.00000 128.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"disablepropagation" : false,
			"effects" : 
			[
				{
					"file" : "effects/workshop/3219510589/blendgradient/effect.json",
					"id" : 835,
					"name" : "Media Transition",
					"passes" : 
					[
						{
							"combos" : 
							{
								"WRITEALPHA" : 1
							},
							"constantshadervalues" : 
							{
								"alpha" : 1,
								"gradientscale" : 0.34999999,
								"multiply" : 
								{
									"animation" : 
									{
										"c0" : 
										[
											{
												"back" : 
												{
													"enabled" : false,
													"x" : -1,
													"y" : -0.0
												},
												"frame" : 0,
												"front" : 
												{
													"enabled" : false,
													"x" : 0.51111108,
													"y" : 0
												},
												"lockangle" : true,
												"locklength" : true,
												"value" : 1
											},
											{
												"back" : 
												{
													"enabled" : false,
													"x" : -0.51111108,
													"y" : -0.0
												},
												"frame" : 38,
												"front" : 
												{
													"enabled" : false,
													"x" : 1,
													"y" : 0
												},
												"lockangle" : true,
												"locklength" : true,
												"value" : 0
											}
										],
										"options" : 
										{
											"fps" : 30,
											"length" : 45,
											"mode" : "single",
											"wraploop" : null
										}
									},
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function mediaThumbnailChanged(event) {\n\tthisObject.getAnimation().play();\n}\n",
									"value" : 0
								}
							},
							"id" : 836,
							"textures" : [ null, "util/black", null ],
							"usertextures" : 
							[
								null,
								{
									"name" : "$mediaPreviousThumbnail",
									"type" : "system"
								}
							]
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/workshop/3219510589/tint/effect.json",
					"id" : 838,
					"name" : "HUE",
					"passes" : 
					[
						{
							"combos" : 
							{
								"BLENDMODE" : 26
							},
							"constantshadervalues" : 
							{
								"alpha" : 
								{
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nimport * as WEMath from 'WEMath';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'media',\n        label: 'Media Based Detection',\n        value: false\n    })\n    .addCheckbox({\n\tname: 'invert',\n\tlabel: 'Invert',\n\tvalue: false\n\t})\n    .addSlider({\n        name: 'min',\n        label: 'Min value',\n        value: 0,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'max',\n        label: 'Max value',\n        value: 1,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerIn',\n        label: 'Fade in timer',\n        value: 2,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerOut',\n        label: 'Fade out timer',\n        value: 2,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeInDur',\n        label: 'Fade in duration',\n        value: 0.5,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeOutDur',\n        label: 'Fade out duration',\n        value: 0.5,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .finish();\n\nconst vecToggles = new Vec3(1, 1, 1); //1 enabled, 0 disabled\nconst audioBuffer = engine.registerAudioBuffers(16);\nlet state, oldState, target, dur = 0, isVector, stopTimeout;\n\nexport function update(value) {\n\tif (oldState == undefined) {\n\t\toldState = state;\n\t\ttarget = state ? scriptProperties.max : scriptProperties.min;\n\t\treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n\n    if (oldState != state){\n        oldState = state;\n\n        if (stopTimeout) stopTimeout();\n        if (state) stopTimeout = engine.setTimeout(() => {setTarget(scriptProperties.max, scriptProperties.fadeInDur)}, scriptProperties.timerIn * 1000);\n        else stopTimeout = engine.setTimeout(() => {setTarget(scriptProperties.min, scriptProperties.fadeOutDur)}, scriptProperties.timerOut * 1000);\n    }\n\n    return lerp(value, target, dur);\n}\n\nfunction setTarget(targ, fadeDur) {\n    target = isVector ? new Vec3(targ) : targ;\n\tdur = engine.frametime / Math.max(0.0001, fadeDur);\n    dur = isVector ? vecToggles.multiply(dur) : dur;\n}\n\nfunction lerp(a, b, value) {\n    if (isVector) {\n        const x = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.x, b.x, value.x), scriptProperties.max));\n        const y = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.y, b.y, value.y), scriptProperties.max));\n        const z = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.z, b.z, value.z), scriptProperties.max));\n        return new Vec3(x, y, z);\n    }\n    return Math.max(scriptProperties.min, Math.min(WEMath.mix(a, b, value), scriptProperties.max));\n}\n\nexport function init(value) {\n\tisVector = value.hasOwnProperty(\"x\");\n\tdur = isVector ? new Vec3(dur) : dur;\n\n    if (!scriptProperties.media) {\n\t\tstate = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n\t\ttarget = state ? scriptProperties.max : scriptProperties.min;\n    \treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n}\n\nexport function mediaPlaybackChanged(event) {\n    if (scriptProperties.media) state = event.state == 1 ^ scriptProperties.invert;\n}\n",
									"scriptproperties" : 
									{
										"fadeInDur" : 0.34999999,
										"fadeOutDur" : 0.25,
										"invert" : true,
										"max" : 1,
										"media" : 
										{
											"user" : "media",
											"value" : true
										},
										"min" : 0,
										"timerIn" : 1.5,
										"timerOut" : 0.050000001
									},
									"value" : 1
								},
								"color" : 
								{
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miPrimaryColor;\n}\n",
									"value" : "0.48235 0.12941 0.12941"
								}
							},
							"id" : 839
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/workshop/3219510589/tint/effect.json",
					"id" : 840,
					"name" : "SATURATION",
					"passes" : 
					[
						{
							"combos" : 
							{
								"BLENDMODE" : 27
							},
							"constantshadervalues" : 
							{
								"alpha" : 
								{
									"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nimport * as WEMath from 'WEMath';\n\nexport var scriptProperties = createScriptProperties()\n    .addCheckbox({\n        name: 'media',\n        label: 'Media Based Detection',\n        value: false\n    })\n    .addCheckbox({\n\tname: 'invert',\n\tlabel: 'Invert',\n\tvalue: false\n\t})\n    .addSlider({\n        name: 'min',\n        label: 'Min value',\n        value: 0,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'max',\n        label: 'Max value',\n        value: 1,\n        min: 0,\n        max: 1,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerIn',\n        label: 'Fade in timer',\n        value: 2,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'timerOut',\n        label: 'Fade out timer',\n        value: 2,\n        min: 0,\n        max: 10,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeInDur',\n        label: 'Fade in duration',\n        value: 0.5,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .addSlider({\n        name: 'fadeOutDur',\n        label: 'Fade out duration',\n        value: 0.5,\n        min: 0,\n        max: 2,\n        integer: false\n    })\n    .finish();\n\nconst vecToggles = new Vec3(1, 1, 1); //1 enabled, 0 disabled\nconst audioBuffer = engine.registerAudioBuffers(16);\nlet state, oldState, target, dur = 0, isVector, stopTimeout;\n\nexport function update(value) {\n\tif (oldState == undefined) {\n\t\toldState = state;\n\t\ttarget = state ? scriptProperties.max : scriptProperties.min;\n\t\treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n\n    if (!scriptProperties.media) state = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n\n    if (oldState != state){\n        oldState = state;\n\n        if (stopTimeout) stopTimeout();\n        if (state) stopTimeout = engine.setTimeout(() => {setTarget(scriptProperties.max, scriptProperties.fadeInDur)}, scriptProperties.timerIn * 1000);\n        else stopTimeout = engine.setTimeout(() => {setTarget(scriptProperties.min, scriptProperties.fadeOutDur)}, scriptProperties.timerOut * 1000);\n    }\n\n    return lerp(value, target, dur);\n}\n\nfunction setTarget(targ, fadeDur) {\n    target = isVector ? new Vec3(targ) : targ;\n\tdur = engine.frametime / Math.max(0.0001, fadeDur);\n    dur = isVector ? vecToggles.multiply(dur) : dur;\n}\n\nfunction lerp(a, b, value) {\n    if (isVector) {\n        const x = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.x, b.x, value.x), scriptProperties.max));\n        const y = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.y, b.y, value.y), scriptProperties.max));\n        const z = Math.max(scriptProperties.min, Math.min(WEMath.mix(a.z, b.z, value.z), scriptProperties.max));\n        return new Vec3(x, y, z);\n    }\n    return Math.max(scriptProperties.min, Math.min(WEMath.mix(a, b, value), scriptProperties.max));\n}\n\nexport function init(value) {\n\tisVector = value.hasOwnProperty(\"x\");\n\tdur = isVector ? new Vec3(dur) : dur;\n\n    if (!scriptProperties.media) {\n\t\tstate = !!audioBuffer.average.reduce((a, b) => a + b) ^ scriptProperties.invert;\n\t\ttarget = state ? scriptProperties.max : scriptProperties.min;\n    \treturn target = isVector ? lerp(value, new Vec3(target), vecToggles) : target;\n\t}\n}\n\nexport function mediaPlaybackChanged(event) {\n    if (scriptProperties.media) state = event.state == 1 ^ scriptProperties.invert;\n}\n",
									"scriptproperties" : 
									{
										"fadeInDur" : 0.34999999,
										"fadeOutDur" : 0.25,
										"invert" : true,
										"max" : 0.34999999,
										"media" : 
										{
											"user" : "media",
											"value" : true
										},
										"min" : 0,
										"timerIn" : 1.5,
										"timerOut" : 0.050000001
									},
									"value" : 1
								},
								"color" : "0.00000 0.00000 0.00000"
							},
							"id" : 841
						}
					],
					"visible" : true
				},
				{
					"file" : "effects/workshop/3219510589/opacity/effect.json",
					"id" : 842,
					"name" : "",
					"passes" : 
					[
						{
							"constantshadervalues" : 
							{
								"alpha" : 1
							},
							"id" : 843,
							"textures" : [ null, "workshop/3219510589/opacitymap1" ]
						}
					],
					"visible" : true
				}
			],
			"id" : 832,
			"image" : "models/workshop/3219510589/solid_instance_model_b5d59996.json",
			"instance" : 
			{
				"combos" : 
				{
					"version" : 2
				},
				"id" : 833,
				"textures" : [ "util/white" ],
				"usertextures" : 
				[
					{
						"name" : "$mediaThumbnail",
						"type" : "system"
					}
				]
			},
			"name" : "Album Cover",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 789,
			"size" : "456.00000 456.00000"
		},
		{
			"alpha" : 
			{
				"animation" : 
				{
					"c0" : 
					[
						{
							"back" : 
							{
								"enabled" : true,
								"magic" : true,
								"x" : -0.52941173,
								"y" : -0.0
							},
							"frame" : 0,
							"front" : 
							{
								"enabled" : true,
								"magic" : true,
								"x" : 1,
								"y" : 0
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 0
						},
						{
							"back" : 
							{
								"enabled" : true,
								"x" : -1,
								"y" : -0.1
							},
							"frame" : 1,
							"front" : 
							{
								"enabled" : false,
								"x" : 1,
								"y" : 0.1
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 1
						},
						{
							"back" : 
							{
								"enabled" : false,
								"x" : -1,
								"y" : 0.011764706
							},
							"frame" : 2,
							"front" : 
							{
								"enabled" : true,
								"x" : 0.55882353,
								"y" : -0.1
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 1
						},
						{
							"back" : 
							{
								"enabled" : false,
								"x" : -0.5625,
								"y" : -0.0
							},
							"frame" : 18,
							"front" : 
							{
								"enabled" : true,
								"x" : 1,
								"y" : 0
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 0
						}
					],
					"options" : 
					{
						"fps" : 30,
						"length" : 18,
						"mode" : "single",
						"startpaused" : true,
						"wraploop" : null
					}
				},
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function mediaPlaybackChanged(event) {\n    if (event.state == 1 && !shared.miSettingsVisible) thisObject.getAnimation().play();\n}\n",
				"value" : 0.0
			},
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "1.00000 1.00000 1.00000"
			},
			"disablepropagation" : false,
			"id" : 847,
			"image" : "models/workshop/3219510589/play.json",
			"name" : "Play Icon",
			"origin" : "-4.00000 12.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 832,
			"scale" : "1.50000 1.50000 1.00000",
			"size" : "192.00000 192.00000"
		},
		{
			"alpha" : 
			{
				"animation" : 
				{
					"c0" : 
					[
						{
							"back" : 
							{
								"enabled" : true,
								"magic" : true,
								"x" : -0.52941173,
								"y" : -0.0
							},
							"frame" : 0,
							"front" : 
							{
								"enabled" : true,
								"magic" : true,
								"x" : 1,
								"y" : 0
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 0
						},
						{
							"back" : 
							{
								"enabled" : true,
								"x" : -1,
								"y" : -0.1
							},
							"frame" : 1,
							"front" : 
							{
								"enabled" : false,
								"x" : 1,
								"y" : 0.1
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 1
						},
						{
							"back" : 
							{
								"enabled" : false,
								"x" : -1,
								"y" : 0.011764706
							},
							"frame" : 2,
							"front" : 
							{
								"enabled" : true,
								"x" : 0.55882353,
								"y" : -0.1
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 1
						},
						{
							"back" : 
							{
								"enabled" : false,
								"x" : -0.5625,
								"y" : -0.0
							},
							"frame" : 18,
							"front" : 
							{
								"enabled" : true,
								"x" : 1,
								"y" : 0
							},
							"lockangle" : true,
							"locklength" : true,
							"value" : 0
						}
					],
					"options" : 
					{
						"fps" : 30,
						"length" : 18,
						"mode" : "single",
						"wraploop" : null
					}
				},
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function mediaPlaybackChanged(event) {\n    if (event.state == 2 && !shared.miSettingsVisible) thisObject.getAnimation().play();\n}\n",
				"value" : 0.0
			},
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "0.00000 0.00000 0.00000"
			},
			"disablepropagation" : false,
			"id" : 854,
			"image" : "models/workshop/3219510589/pause.json",
			"name" : "Pause Icon",
			"origin" : "0.00000 12.00000 0.00000",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 832,
			"scale" : "1.50000 1.50000 1.00000",
			"size" : "192.00000 192.00000"
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n\treturn shared.miTextColor;\n}\n",
				"value" : "0.00000 0.00000 0.00000"
			},
			"disablepropagation" : false,
			"id" : 857,
			"image" : "models/workshop/3219510589/COGWHEEL.json",
			"name" : "Settings button",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 832,
			"size" : "416.00000 416.00000",
			"visible" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport var scriptProperties = createScriptProperties()\n\t.addCheckbox({\n\t\tname: 'enabled',\n\t\tlabel: 'Enable settings',\n\t\tvalue: true\n\t})\n\t.addSlider({\n\t\tname: 'speed',\n\t\tlabel: 'Settings open speed',\n\t\tvalue: 0.2,\n\t\tmin: 0,\n\t\tmax: 1,\n\t\tinteger: false\n\t})\n\t\n\t.finish();\n\nconst maxClickTime = 250; //in ms\n\nexport function init() {\n\tshared.miSettingsVisible = thisLayer.visible = false;\n\tshared.miSettingsOpen = false;\n\tshared.miMaxCLickTime = maxClickTime;\n\tshared.miSettingsOpenSpeed = scriptProperties.speed / 2;\n}\n\nexport function cursorEnter(event) {\n\tshared.miSettingsVisible = thisLayer.visible = true && scriptProperties.enabled;\n}\n\nexport function cursorLeave(event) {\n\tshared.miSettingsVisible = thisLayer.visible = false || shared.miSettingsOpen;\n}\n\nlet timer;\n\nexport function cursorDown(event) {\n\ttimer = Date.now();\n}\n\nexport function cursorUp(event) {\n\tif (Date.now() - timer < maxClickTime) {\n\t\tshared.miSettingsOpen = !shared.miSettingsOpen && scriptProperties.enabled;\n\t\tshared.miSettingsOpenSpeed = scriptProperties.speed / 2;\n\t}\t\n}\n",
				"scriptproperties" : 
				{
					"enabled" : true,
					"speed" : 0.2
				},
				"value" : false
			}
		},
		{
			"angles" : "0.00000 -0.00000 0.00000",
			"castshadow" : false,
			"clampuvs" : true,
			"color" : 
			{
				"script" : "'use strict';\n// Please note: Do not remove this line or asset references may break.\nexport let __workshopId = '3219510589';\n\nexport function update() {\n    return shared.miTextBgColor;\n}\n",
				"value" : "0.00000 0.00000 0.00000"
			},
			"disablepropagation" : false,
			"id" : 860,
			"image" : "models/workshop/3219510589/freem.json",
			"name" : "Frame",
			"parallaxDepth" : "0.00000 0.00000",
			"parent" : 789,
			"size" : "470.00000 470.00000"
		},
		{
			"disablepropagation" : false,
			"id" : 46375,
			"maxtime" : 5.0,
			"mintime" : 1.0,
			"muteineditor" : true,
			"name" : "Wuthering Waves  Black Shores - Ending.mp3",
			"playbackmode" : "loop",
			"solid" : true,
			"sound" : [ "sounds/Wuthering Waves  Black Shores - Ending.mp3" ],
			"startsilent" : false,
			"volume" : 
			{
				"user" : "music",
				"value" : 0.64999998
			}
		},
		{
			"disablepropagation" : false,
			"id" : 68470,
			"maxtime" : 5.0,
			"mintime" : 1.0,
			"muteineditor" : true,
			"name" : "sandy-beach-calm-waves-water-nature-sounds-8052.mp3",
			"playbackmode" : "loop",
			"solid" : true,
			"sound" : [ "sounds/sandy-beach-calm-waves-water-nature-sounds-8052.mp3" ],
			"startsilent" : false,
			"volume" : 
			{
				"user" : "waternaturesounds",
				"value" : 0.69999999
			}
		}
	],
	"version" : 4
}