2779 lines
		
	
	
		
			74 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2779 lines
		
	
	
		
			74 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/// @ref gtx_vec_swizzle
 | 
						|
/// @file glm/gtx/vec_swizzle.hpp
 | 
						|
///
 | 
						|
/// @see core (dependence)
 | 
						|
///
 | 
						|
/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle
 | 
						|
/// @ingroup gtx
 | 
						|
///
 | 
						|
/// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.
 | 
						|
///
 | 
						|
/// Functions to perform swizzle operation.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "../glm.hpp"
 | 
						|
 | 
						|
#ifndef GLM_ENABLE_EXPERIMENTAL
 | 
						|
#	error "GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
 | 
						|
#endif
 | 
						|
 | 
						|
namespace glm {
 | 
						|
	// xx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// ww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<2, T, Q>(v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.x, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.y, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.z, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// www
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<3, T, Q>(v.w, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xxww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xywx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xywy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xywz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xyww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xzww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// xwww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yxww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yywx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yywy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yywz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yyww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// yzww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// ywww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zxww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zywx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zywy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zywz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zyww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zzww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// zwww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wxww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wywx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wywy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wywz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wyww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wzww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwxx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwxy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwxz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwxw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwyx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwyy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwyz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwyw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwzx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwzy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwzz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwzw
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwwx
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwwy
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwwz
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
 | 
						|
	}
 | 
						|
 | 
						|
	// wwww
 | 
						|
	template<typename T, qualifier Q>
 | 
						|
	GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
 | 
						|
		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
 | 
						|
	}
 | 
						|
 | 
						|
}
 |