function AttributeValue.__index(f,k)if k=="\086\097\108\117\101"then local k=f._object:GetAttribute(rawget(f,"\095\097\116\116\114\105\098\117\116\101\078\097\109\101"))local u=rawget(f,"\095\100\101\102\097\117\108\116\086\097\108\117\101")if k==nil then return u else return k end elseif k=="\067\104\097\110\103\101\100"then return f._object:GetAttributeChangedSignal(f._attributeName)elseif AttributeValue[k]then return AttributeValue[k]else error(("\037\113 \105\115 \110\111\116 \097 \109\101\109\098\101\114 \111\102 \065\116\116\114\105\098\117\116\101\086\097\108\117\101"):format(tostring(k)))end end function AttributeValue.__newindex(u,k,f)if k=="\086\097\108\117\101"then u._object:SetAttribute(rawget(u,"\095\097\116\116\114\105\098\117\116\101\078\097\109\101"),f)else error(("\037\113 \105\115 \110\111\116 \097 \109\101\109\098\101\114 \111\102 \065\116\116\114\105\098\117\116\101\086\097\108\117\101"):format(tostring(k)))end end return AttributeValue
--[=[
	Signal that fires when the attribute changes
	@readonly
	@prop Changed Signal<()>
	@within AttributeValue
]=]
function AttributeValue:__index(index)
	if index == "Value" then
		local result = self._object:GetAttribute(rawget(self, "_attributeName"))
		local default = rawget(self, "_defaultValue")
		if result == nil then
			return default
		else
			return result
		end
	elseif index == "Changed" then
		return self._object:GetAttributeChangedSignal(self._attributeName)
	elseif AttributeValue[index] then
		return AttributeValue[index]
	else
		error(("%q is not a member of AttributeValue"):format(tostring(index)))
	end
end

function AttributeValue:__newindex(index, value)
	if index == "Value" then
		self._object:SetAttribute(rawget(self, "_attributeName"), value)
	else
		error(("%q is not a member of AttributeValue"):format(tostring(index)))
	end
end

return AttributeValue
