Step 2 - Article

This page provides details about article.json and its underlying validation rules along with a sample article.json file of a Bowling Alley VR Scene for your review.

Here is the article.json template that is to be used for filling the scene requirement specifications.

{
	"articles": [
		{
			"_objectname": "",
			"_sid": "",
			"_slabel": "",
			"_IsHidden": "",
			"_enumcount": "",
			"_Is3DObject": "",
			"HasChild": "",
			"shape": "",
			"dimension": {
				"dradii": "",
				"dvolumn": "",
				"dlength": "",
				"dbreadth": "",
				"dheight": ""
			},
			"IsText": "",
			"IsText3D": "",
			"lighting": {
				"CastShadow": "",
				"ReceiveShadow": "",
				"ContributeGlobalIlumination": ""
			},
			"IsIlluminate": "",
			"Transform_initialpos": {
				"#x_initialpos": "",
				"#y_initialpos": "",
				"#z_initialpos": ""
			},
			"Transform_initialrotation": {
				"#x_initialrotation": "",
				"#y_initialrotation": "",
				"#z_initialrotation": ""
			},
			"Transform_objectscale": {
				"#x_objectscale": "",
				"#y_objectscale": "",
				"#z_objectscale": ""
			},
			"repeattransfrom": {
				"distfactorx": "",
				"distfactory": "",
				"distfactorz": ""
			},
			"Interaction": {
				"XRGrabInteractable": "",
				"XRInteractionMaskLayer": "",
				"TrackPosition": "",
				"TrackRotation": "",
				"Throw_Detach": "",
				"forcegravity": "",
				"velocity": "",
				"angularvelocity": ""
			},
			"Smoothing": "",
			"Smoothing_duration": "",
			"attachtransform": {
				"#rotate_x": "",
				"#rotate_y": "",
				"#rotate_z": "",
				"#pos_x": "",
				"#pos_y": "",
				"#pos_z": ""
			},
			"XRRigidObject": {
				"value": "",
				"mass": "",
				"dragfriction": "",
				"angulardrag": "",
				"Isgravityenable": "",
				"IsKinematic": "",
				"CanInterpolate": "",
				"CollisionPolling": ""
			},
			"aud_hasaudio": "",
			"aud_type": "",
			"aud_src": "",
			"aud_volume": "",
			"aud_PlayInloop": "",
			"aud_IsSurround": "",
			"aud_Dopplerlevel": "",
			"aud_spread": "",
			"aud_mindist": "",
			"aud_maxdist": "",
			"_Opttxt1": "",
			"@context_img_source": "",
			"state": [
				{
					"stateid": "",
					"statename": "",
					"stateinitial": "",
					"statetransition": [
						{
							"sevent": "",
							"starget": "",
							"spref": ""
						},
						{
							"sevent": "",
							"starget": "",
							"spref": ""
						}
					],
					"statefinal": ""
				},
				{
					"stateid": "",
					"statename": "",
					"stateinitial": "",
					"statetransition": [
						{
							"sevent": "",
							"starget": "",
							"spref": ""
						},
						{
							"sevent": "",
							"starget": "",
							"spref": ""
						}
					],
					"statefinal": ""
				}
			]
		}
	]
}

Here is the articlevalidator.json with details about each specification along with its usage.

{
    "articles": {
        "req": "mandatory",
        "typeof": "object",
        "repeat": "notallow",
        "%comment%": "Array list of Articles that its respective properties"
    },
    "_objectname": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Name of the Object"
    },
    "_sid": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "unique identifier to identify the object"
    },
    "_slabel": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "50 character label to describe the object"
    },
    "_IsHidden": {
        "req": "mandatory",
        "typeof": "number",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object is hidden or unhidden"
    },
    "_enumcount": {
        "req": "mandatory",
        "typeof": "number",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Count of objects in the scene"
    },
    "_Is3DObject": {
        "req": "mandatory",
        "typeof": "number",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object is 3D or not"
    },
    "HasChild": {
        "req": "mandatory",
        "typeof": "number",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object has linked child object"
    },
    "shape": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Shape of the object, mention the geometery type"
    },
    "dradii": {
        "req": "mandatory",
        "typeof": "number",
        "repeat": "allow",
        "proot": "articles",
        "root": "dimension",
        "%comment%": "radius of the object if it is a sphere else NULL"
    },
    "dvolumn": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "dimension",
        "%comment%": "volumn of the object to determine the size"
    },
    "dlength": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "dimension",
        "%comment%": "Length of the object if it has a length property"
    },
    "dbreadth": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "dimension",
        "%comment%": "Breadth of the object if it has a breadth property"
    },
    "dheigth": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "dimension",
        "%comment%": "Height of the object if it has a height property"
    },
    "IsText": {
        "req": "mandatory",
        "typeof": "boolean",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if it is a Text object"
    },
    "IsText3D": {
        "req": "mandatory",
        "typeof": "boolean",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if it is a 3D Text object"
    },
    "CastShadow": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "lighting",
        "%comment%": "Flag to determine if the object can cast shadow"
    },
    "ReceiveShadow": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "lighting",
        "%comment%": "Flag to determine if the object can receive a shadow"
    },
    "ContributeGlobalIlumination": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "lighting",
        "%comment%": "Flag to determine if the object contributes to overall scene illumination or self glowing object"
    },
    "IsIlluminate": {
        "req": "mandatory",
        "typeof": "boolean",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object can illuminate self"
    },
    "#x_initialpos": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalpos",
        "%comment%": "x-axis initial position of the object in the scene terrian"
    },
    "#y_initialpos": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalpos",
        "%comment%": "y-axis initial position of the object in the scene terrian"
    },
    "#z_initialpos": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalpos",
        "%comment%": "z-axis initial position of the object in the scene terrian"
    },
    "#x_initialrotation": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalrotation",
        "%comment%": "x-axis initial rotation stance of the object in the scene terrian"
    },
    "#y_initialrotation": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalrotation",
        "%comment%": "y-axis initial rotation stance of the object in the scene terrian"
    },
    "#z_initialrotation": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_initalrotation",
        "%comment%": "z-axis initial rotation stance of the object in the scene terrian"
    },
    "#x_objectscale": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_objectscale",
        "%comment%": "x-axis tranformable object scale of the object in the scene terrian"
    },
    "#y_objectscale": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_objectscale",
        "%comment%": "y-axis tranformable object scale of the object in the scene terrian"
    },
    "#z_objectscale": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Transform_objectscale",
        "%comment%": "z-axis tranformable object scale of the object in the scene terrian"
    },
    "#distfactorx": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "repeattransform",
        "%comment%": "Distance Factor in x-axis of the object"
    },
    "#distfactory": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "repeattransform",
        "%comment%": "Distance Factor in y-axis of the object"
    },
    "#distfactorz": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "repeattransform",
        "%comment%":"Distance Factor in z-axis of the object"
    },

    "XRGrabInteractable": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object is grabbable and has interaction"
    },
    "XRInteractionMaskLayer": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object interaction has masked layer"
    },
    "TrackPosition": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can have a tracker position"
    },
    "TrackRotation": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can have a tracker rotation"
    },
    "Throw_Detach": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can be thrown and detachable"
    },
    "forcegravity": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can have a force gravity applied"
    },
    "velocity": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can hold natural velocity"
    },
    "angularvelocity": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "proot": "articles",
        "root": "Interaction",
        "%comment%": "Flag to determine if the object can hold an angular velocity"
    },
    "Smoothing": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object can hold smoothing"
    },
    "Smoothing_duration": {
        "req": "mandatory",
        "typeof": "string",
        "repeat": "allow",
        "root": "articles",
        "%comment%": "Flag to determine if the object smoothing duration"
    },
    "#rotate_x": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine x-axis of object rotation position"
    },
    "#rotate_y": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine y-axis of object rotation position"
    },
    "#rotate_z": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine z-axis of object rotation position"
    },
    "#pos_x": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine x-axis of object transform position"
    },
    "#pos_y": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine y-axis of object transform position"
    },
    "#pos_z": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "attachtransform",
        "repeat": "allow",
        "%comment%": "Flag to determine y-axis of object transform position"
    },
    "value": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Level of rigid with the scale of 1 to 10"
    },
    "mass": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to mention the mass of the object"
    },
    "dragfriction": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object can hold drag friction"
    },
    "angulardrag": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object can be angular drag"
    },
    "Isgravityenable": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object abides by natural gravity"
    },
    "IsKinematic": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object is mobile or kinematic"
    },
    "CanInterpolate": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determie if the object can interpolate"
    },
    "CollisionPolling": {
        "req": "mandatory",
        "typeof": "string",
        "proot": "articles",
        "root": "XRRigidObject",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object can CollisionPolling"
    },
    "aud_hasaudio": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Flag to determine if the object has audio setup"
    },
    "aud_type": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Type of Audio file"
    },
    "aud_src": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Audio Source file and its path"
    },
    "aud_volume": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Measure of audio volume"
    },
    "aud_PlayInloop": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Flag to determine if the audio is playable in loop"
    },
    "aud_IsSurround": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Flag to determine if the audio of the object is surroundable"
    },
    "aud_Dopplerlevel": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Audio doppler level of the object if available"
    },
    "aud_spread": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Audio spread measure of the object"
    },
    "aud_mindist": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Minimum distance covered via audio"
    },
    "aud_maxdist": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Maximum distance covered via audio"
    },
    "_Opttxt1": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "optional notes placeholder to add additional notes about the object"
    },
    "@context_img_source": {
        "req": "mandatory",
        "typeof": "string",
        "root": "articles",
        "repeat": "allow",
        "%comment%": "Sample image source file location for designer reference"
    },
    
	"state":{
	"req":"mandatory",
	"root":"ObjAction",
	"typeof":"object",
	"repeat":"allow",
	"%comment%":"This is a master node for state array object to defined states of a given action and its response over objects"
	},
	
	"stateid":{
	"req":"mandatory",
	"root":"ObjAction",
	"typeof":"number",
	"repeat":"allow",
	"%comment%":"Define your own unique identifier to identify a state"
		},
		
	
	"statename":{
	"req":"mandatory",
	"proot":"state",
	"root":"ObjAction",
	"typeof":"string",
	"repeat":"allow",
	"%comment%":"Provide a state name for a given stateid"
	
	},
	
	"stateinitial":{
	"req":"mandatory",
	"proot":"state",
	"root":"ObjAction",
	"typeof":"string",
	"repeat":"allow",
	"%comment%":"Describe your Initial Statement in less than 10 words"
		},
	
	"statetransition":{
	
	"req":"mandatory",
	"proot":"state",
	"root":"ObjAction",
	"typeof":"object",
	"repeat":"allow",
	"%comment%":"to describe the underlying events and target with a preference value"
	},
	
	"sevent":{
	"req":"mandatory",
	"proot":"statetransition",
	"root":"ObjAction",
	"typeof":"string",
	"repeat":"allow",
	"%comment%":"to describe the underlying events and its target along with a preference value"
	},
	
	"starget":{
	"req":"mandatory",
	"proot":"statetransition",
	"root":"ObjAction",
	"typeof":"string",
	"repeat":"allow",
	"%comment%":"to describe the underlying target for a given event along with a preference value"
	},
	
	"spref":{
	"req":"mandatory",
	"proot":"statetransition",
	"root":"ObjAction",
	"typeof":"number",
	"repeat":"allow",
	"%comment%":"to describe the perference value for a given sevent and starget. It starts with value 0"
	},
	
	"statefinal":{
	
	"req":"mandatory",
	"root":"state",
	"proot":"ObjAction",
	"typeof":"string",
	"repeat":"allow",
	"%comment%":"Describe your final Statement in less than 10 words"
	}
	

}

Here is a sample article.json file for a Bowling Alley VR Scene.

{
	"articles": [{
			"_objectname": "Ball",
			"_sid": "_gameball",
			"_slabel": "This is used to roll on pins",
			"_IsHidden": 0,
			"_enumcount": 1,
			"_Is3DObject": 1,
			"HasChild": 0,
			"shape": "sphere",
			"dimension": {
				"dradii": 5,
				"dvolumn": "null",
				"dlength": "null",
				"dbreadth": "null",
				"dheigth": "null"
			},
			"IsText": false,
			"IsText3D": false,
			"lighting": {
				"CastShadow": "1",
				"ReceiveShadow": "1",
				"ContributeGlobalIlumination": "1"
			},
			"IsIlluminate": true,
			"Transform_initialpos": {
				"#x_initialpos": "0",
				"#y_initialpos": "5",
				"#z_initialpos": "0"
			},
			"Transform_initialrotation": {
				"#x_initialrotation": "0",
				"#y_initialrotation": "5",
				"#z_initialrotation": "0"
			},
			"Transform_objectscale": {
				"#x_objectscale": "0",
				"#y_objectscale": "5",
				"#z_objectscale": "0"
			},
			"repeattransfrom": {
				"distfactorx": "null",
				"distfactory": "null",
				"distfactorz": "null"
			},
			"Interaction": {
				"XRGrabInteractable": "1",
				"XRInteractionMaskLayer": "nothing/everything/custom",
				"TrackPosition": "1",
				"TrackRotation": "1",
				"Throw_Detach": "1",
				"forcegravity": "1",
				"velocity": "3",
				"angularvelocity": "2"
			},
			"Smoothing": "1",
			"Smoothing_duration": "0.5",
			"attachtransform": {
				"#rotate_x": "null",
				"#rotate_y": "null",
				"#rotate_z": "null",
				"#pos_x": "null",
				"#pos_y": "null",
				"#pos_z": "null"
			},
			"XRRigidObject": {
				"value": "1",
				"mass": "20",
				"dragfriction": "5",
				"angulardrag": "4",
				"Isgravityenable": "true",
				"IsKinematic": "1",
				"CanInterpolate": "0",
				"CollisionPolling": "discreet/continous"
			},
			"aud_hasaudio": "1",
			"aud_type": "static/dynamic",
			"aud_src": "/path",
			"aud_volume": "10",
			"aud_PlayInloop": "0",
			"aud_IsSurround": "1",
			"aud_Dopplerlevel": "0.9",
			"aud_spread": "null",
			"aud_mindist": "null",
			"aud_maxdist": "null",
			"_Opttxt1": "null",
			"@context_img_source": "blank"
		},
		{
			"_objectname": "Pin_5",
			"_sid": "_pinsetter5",
			"_slabel": "This is pin",
			"_IsHidden": 0,
			"_enumcount": 1,
			"_Is3DObject": 1,
			"HasChild": 0,
			"shape": "sphere",
			"dimension": {
				"dradii": 5,
				"dvolumn": "null",
				"dlength": "null",
				"dbreadth": "null",
				"dheigth": "null"
			},
			"IsText": false,
			"IsText3D": false,
			"lighting": {
				"CastShadow": "1",
				"ReceiveShadow": "1",
				"ContributeGlobalIlumination": "1"
			},
			"IsIlluminate": true,
			"Transform_initialpos": {
				"#x_initialpos": "0",
				"#y_initialpos": "5",
				"#z_initialpos": "0"
			},
			"Transform_initialrotation": {
				"#x_initialrotation": "0",
				"#y_initialrotation": "5",
				"#z_initialrotation": "0"
			},
			"Transform_objectscale": {
				"#x_objectscale": "0",
				"#y_objectscale": "5",
				"#z_objectscale": "0"
			},
			"repeattransfrom": {
				"distfactorx": "null",
				"distfactory": "null",
				"distfactorz": "null"
			},
			"Interaction": {
				"XRGrabInteractable": "1",
				"XRInteractionMaskLayer": "nothing/everything/custom",
				"TrackPosition": "1",
				"TrackRotation": "1",
				"Throw_Detach": "1",
				"forcegravity": "1",
				"velocity": "3",
				"angularvelocity": "2"
			},
			"Smoothing": "1",
			"Smoothing_duration": "0.5",
			"attachtransform": {
				"#rotate_x": "null",
				"#rotate_y": "null",
				"#rotate_z": "null",
				"#pos_x": "null",
				"#pos_y": "null",
				"#pos_z": "null"
			},
			"XRRigidObject": {
				"value": "1",
				"mass": "20",
				"dragfriction": "5",
				"angulardrag": "4",
				"Isgravityenable": "true",
				"IsKinematic": "1",
				"CanInterpolate": "0",
				"CollisionPolling": "discreet/continous"
			},
			"aud_hasaudio": "1",
			"aud_type": "static/dynamic",
			"aud_src": "/path",
			"aud_volume": "10",
			"aud_PlayInloop": "0",
			"aud_IsSurround": "1",
			"aud_Dopplerlevel": "0.9",
			"aud_spread": "null",
			"aud_mindist": "null",
			"aud_maxdist": "null",
			"_Opttxt1": "null",
			"@context_img_source": "blank"
		}
	]
}

Last updated