local A do local S=(CFrame.new()).components function A(A,x,v,M,Q)local B,c,O,I,n,J,H,N,C,b,Z,j=S(A)local o,T,G,e,V,s,k,W,y,i,K,P=S(v)local u,f,R=x.x/2,x.y/2,x.z/2 local X,t,Y=M.x/2,M.y/2,M.z/2 local E,g,p=o-B,T-c,G-O local r=(I*E+H*g)+b*p local m=(n*E+N*g)+Z*p local h=(J*E+C*g)+j*p local l=(e*E+k*g)+i*p local U=(V*E+W*g)+K*p local F=(s*E+y*g)+P*p local w=l>X and l-X or l<-X and l+X or 0 local q=U>t and U-t or U<-t and U+t or 0 local D=F>Y and F-Y or F<-Y and F+Y or 0 local L=r>u and r-u or r<-u and r+u or 0 local z=m>f and m-f or m<-f and m+f or 0 local d=h>R and h-R or h<-R and h+R or 0 local a=(w*w+q*q)+D*D local Ab=(L*L+z*z)+d*d local Sb=u<f and(u<R and u or R)or f<R and f or R local xb=X<t and(X<Y and X or Y)or t<Y and t or Y if a<Sb*Sb or Ab<xb*xb then return true elseif a>(u*u+f*f)+R*R or Ab>(X*X+t*t)+Y*Y then return false elseif Q==nil then local A=(I*e+H*k)+b*i local S=(I*V+H*W)+b*K local x=(I*s+H*y)+b*P local v=(n*e+N*k)+Z*i local M=(n*V+N*W)+Z*K local Q=(n*s+N*y)+Z*P local B=(J*e+C*k)+j*i local c=(J*V+C*W)+j*K local O=(J*s+C*y)+j*P local o=Y*Y local T=X*X local G=t*t local E=u*A local g=f*v local p=R*B local w=u*S local q=f*M local D=R*c local L=u*x local z=f*Q local d=R*O local a=((E+g)+p)-l if a*a<T then local A=((w+q)+D)-U if A*A<G then local A=((L+z)+d)-F if A*A<o then return true end end end local Ab=((-E+g)+p)-l if Ab*Ab<T then local A=((-w+q)+D)-U if A*A<G then local A=((-L+z)+d)-F if A*A<o then return true end end end local Sb=((E-g)+p)-l if Sb*Sb<T then local A=((w-q)+D)-U if A*A<G then local A=((L-z)+d)-F if A*A<o then return true end end end local xb=((-E-g)+p)-l if xb*xb<T then local A=((-w-q)+D)-U if A*A<G then local A=((-L-z)+d)-F if A*A<o then return true end end end local vb=((E+g)-p)-l if vb*vb<T then local A=((w+q)-D)-U if A*A<G then local A=((L+z)-d)-F if A*A<o then return true end end end local Mb=((-E+g)-p)-l if Mb*Mb<T then local A=((-w+q)-D)-U if A*A<G then local A=((-L+z)-d)-F if A*A<o then return true end end end local Qb=((E-g)-p)-l if Qb*Qb<T then local A=((w-q)-D)-U if A*A<G then local A=((L-z)-d)-F if A*A<o then return true end end end local Bb=((-E-g)-p)-l if Bb*Bb<T then local A=((-w-q)-D)-U if A*A<G then local A=((-L-z)-d)-F if A*A<o then return true end end end local cb=u*u local Ob=f*f local Ib=R*R local nb=X*B local Jb=t*c local Hb=X*A local Nb=t*S local Cb=X*v local bb=t*M local Zb=Y*O local jb=Y*x local ob=Y*Q local Tb=(((h-R)+nb)+Jb)/O if Tb*Tb<o then local A=((r+Hb)+Nb)-Tb*x if A*A<cb then local A=((m+Cb)+bb)-Tb*Q if A*A<Ob then return true end end end local Gb=(((h+R)+nb)+Jb)/O if Gb*Gb<o then local A=((r+Hb)+Nb)-Gb*x if A*A<cb then local A=((m+Cb)+bb)-Gb*Q if A*A<Ob then return true end end end local eb=(((h-R)-nb)+Jb)/O if eb*eb<o then local A=((r-Hb)+Nb)-eb*x if A*A<cb then local A=((m-Cb)+bb)-eb*Q if A*A<Ob then return true end end end local Vb=(((h+R)-nb)+Jb)/O if Vb*Vb<o then local A=((r-Hb)+Nb)-Vb*x if A*A<cb then local A=((m-Cb)+bb)-Vb*Q if A*A<Ob then return true end end end local sb=(((h-R)+nb)-Jb)/O if sb*sb<o then local A=((r+Hb)-Nb)-sb*x if A*A<cb then local A=((m+Cb)-bb)-sb*Q if A*A<Ob then return true end end end local kb=(((h+R)+nb)-Jb)/O if kb*kb<o then local A=((r+Hb)-Nb)-kb*x if A*A<cb then local A=((m+Cb)-bb)-kb*Q if A*A<Ob then return true end end end local Wb=(((h-R)-nb)-Jb)/O if Wb*Wb<o then local A=((r-Hb)-Nb)-Wb*x if A*A<cb then local A=((m-Cb)-bb)-Wb*Q if A*A<Ob then return true end end end local yb=(((h+R)-nb)-Jb)/O if yb*yb<o then local A=((r-Hb)-Nb)-yb*x if A*A<cb then local A=((m-Cb)-bb)-yb*Q if A*A<Ob then return true end end end local ib=(((r-u)+Hb)+Nb)/x if ib*ib<o then local A=((m+Cb)+bb)-ib*Q if A*A<Ob then local A=((h+nb)+Jb)-ib*O if A*A<Ib then return true end end end local Kb=(((r+u)+Hb)+Nb)/x if Kb*Kb<o then local A=((m+Cb)+bb)-Kb*Q if A*A<Ob then local A=((h+nb)+Jb)-Kb*O if A*A<Ib then return true end end end local Pb=(((r-u)-Hb)+Nb)/x if Pb*Pb<o then local A=((m-Cb)+bb)-Pb*Q if A*A<Ob then local A=((h-nb)+Jb)-Pb*O if A*A<Ib then return true end end end local ub=(((r+u)-Hb)+Nb)/x if ub*ub<o then local A=((m-Cb)+bb)-ub*Q if A*A<Ob then local A=((h-nb)+Jb)-ub*O if A*A<Ib then return true end end end local fb=(((r-u)+Hb)-Nb)/x if fb*fb<o then local A=((m+Cb)-bb)-fb*Q if A*A<Ob then local A=((h+nb)-Jb)-fb*O if A*A<Ib then return true end end end local Rb=(((r+u)+Hb)-Nb)/x if Rb*Rb<o then local A=((m+Cb)-bb)-Rb*Q if A*A<Ob then local A=((h+nb)-Jb)-Rb*O if A*A<Ib then return true end end end local Xb=(((r-u)-Hb)-Nb)/x if Xb*Xb<o then local A=((m-Cb)-bb)-Xb*Q if A*A<Ob then local A=((h-nb)-Jb)-Xb*O if A*A<Ib then return true end end end local tb=(((r+u)-Hb)-Nb)/x if tb*tb<o then local A=((m-Cb)-bb)-tb*Q if A*A<Ob then local A=((h-nb)-Jb)-tb*O if A*A<Ib then return true end end end local Yb=(((m-f)+Cb)+bb)/Q if Yb*Yb<o then local A=((h+nb)+Jb)-Yb*O if A*A<Ib then local A=((r+Hb)+Nb)-Yb*x if A*A<cb then return true end end end local Eb=(((m+f)+Cb)+bb)/Q if Eb*Eb<o then local A=((h+nb)+Jb)-Eb*O if A*A<Ib then local A=((r+Hb)+Nb)-Eb*x if A*A<cb then return true end end end local gb=(((m-f)-Cb)+bb)/Q if gb*gb<o then local A=((h-nb)+Jb)-gb*O if A*A<Ib then local A=((r-Hb)+Nb)-gb*x if A*A<cb then return true end end end local pb=(((m+f)-Cb)+bb)/Q if pb*pb<o then local A=((h-nb)+Jb)-pb*O if A*A<Ib then local A=((r-Hb)+Nb)-pb*x if A*A<cb then return true end end end local rb=(((m-f)+Cb)-bb)/Q if rb*rb<o then local A=((h+nb)-Jb)-rb*O if A*A<Ib then local A=((r+Hb)-Nb)-rb*x if A*A<cb then return true end end end local mb=(((m+f)+Cb)-bb)/Q if mb*mb<o then local A=((h+nb)-Jb)-mb*O if A*A<Ib then local A=((r+Hb)-Nb)-mb*x if A*A<cb then return true end end end local hb=(((m-f)-Cb)-bb)/Q if hb*hb<o then local A=((h-nb)-Jb)-hb*O if A*A<Ib then local A=((r-Hb)-Nb)-hb*x if A*A<cb then return true end end end local lb=(((m+f)-Cb)-bb)/Q if lb*lb<o then local A=((h-nb)-Jb)-lb*O if A*A<Ib then local A=((r-Hb)-Nb)-lb*x if A*A<cb then return true end end end local Ub=(((h-R)+Jb)+Zb)/B if Ub*Ub<T then local S=((r+Nb)+jb)-Ub*A if S*S<cb then local A=((m+bb)+ob)-Ub*v if A*A<Ob then return true end end end local Fb=(((h+R)+Jb)+Zb)/B if Fb*Fb<T then local S=((r+Nb)+jb)-Fb*A if S*S<cb then local A=((m+bb)+ob)-Fb*v if A*A<Ob then return true end end end local wb=(((h-R)-Jb)+Zb)/B if wb*wb<T then local S=((r-Nb)+jb)-wb*A if S*S<cb then local A=((m-bb)+ob)-wb*v if A*A<Ob then return true end end end local qb=(((h+R)-Jb)+Zb)/B if qb*qb<T then local S=((r-Nb)+jb)-qb*A if S*S<cb then local A=((m-bb)+ob)-qb*v if A*A<Ob then return true end end end local Db=(((h-R)+Jb)-Zb)/B if Db*Db<T then local S=((r+Nb)-jb)-Db*A if S*S<cb then local A=((m+bb)-ob)-Db*v if A*A<Ob then return true end end end local Lb=(((h+R)+Jb)-Zb)/B if Lb*Lb<T then local S=((r+Nb)-jb)-Lb*A if S*S<cb then local A=((m+bb)-ob)-Lb*v if A*A<Ob then return true end end end local zb=(((h-R)-Jb)-Zb)/B if zb*zb<T then local S=((r-Nb)-jb)-zb*A if S*S<cb then local A=((m-bb)-ob)-zb*v if A*A<Ob then return true end end end local db=(((h+R)-Jb)-Zb)/B if db*db<T then local S=((r-Nb)-jb)-db*A if S*S<cb then local A=((m-bb)-ob)-db*v if A*A<Ob then return true end end end local ab=(((r-u)+Nb)+jb)/A if ab*ab<T then local A=((m+bb)+ob)-ab*v if A*A<Ob then local A=((h+Jb)+Zb)-ab*B if A*A<Ib then return true end end end local Aq=(((r+u)+Nb)+jb)/A if Aq*Aq<T then local A=((m+bb)+ob)-Aq*v if A*A<Ob then local A=((h+Jb)+Zb)-Aq*B if A*A<Ib then return true end end end local Sq=(((r-u)-Nb)+jb)/A if Sq*Sq<T then local A=((m-bb)+ob)-Sq*v if A*A<Ob then local A=((h-Jb)+Zb)-Sq*B if A*A<Ib then return true end end end local xq=(((r+u)-Nb)+jb)/A if xq*xq<T then local A=((m-bb)+ob)-xq*v if A*A<Ob then local A=((h-Jb)+Zb)-xq*B if A*A<Ib then return true end end end local vq=(((r-u)+Nb)-jb)/A if vq*vq<T then local A=((m+bb)-ob)-vq*v if A*A<Ob then local A=((h+Jb)-Zb)-vq*B if A*A<Ib then return true end end end local Mq=(((r+u)+Nb)-jb)/A if Mq*Mq<T then local A=((m+bb)-ob)-Mq*v if A*A<Ob then local A=((h+Jb)-Zb)-Mq*B if A*A<Ib then return true end end end local Qq=(((r-u)-Nb)-jb)/A if Qq*Qq<T then local A=((m-bb)-ob)-Qq*v if A*A<Ob then local A=((h-Jb)-Zb)-Qq*B if A*A<Ib then return true end end end local Bq=(((r+u)-Nb)-jb)/A if Bq*Bq<T then local A=((m-bb)-ob)-Bq*v if A*A<Ob then local A=((h-Jb)-Zb)-Bq*B if A*A<Ib then return true end end end local cq=(((m-f)+bb)+ob)/v if cq*cq<T then local S=((h+Jb)+Zb)-cq*B if S*S<Ib then local S=((r+Nb)+jb)-cq*A if S*S<cb then return true end end end local Oq=(((m+f)+bb)+ob)/v if Oq*Oq<T then local S=((h+Jb)+Zb)-Oq*B if S*S<Ib then local S=((r+Nb)+jb)-Oq*A if S*S<cb then return true end end end local Iq=(((m-f)-bb)+ob)/v if Iq*Iq<T then local S=((h-Jb)+Zb)-Iq*B if S*S<Ib then local S=((r-Nb)+jb)-Iq*A if S*S<cb then return true end end end local nq=(((m+f)-bb)+ob)/v if nq*nq<T then local S=((h-Jb)+Zb)-nq*B if S*S<Ib then local S=((r-Nb)+jb)-nq*A if S*S<cb then return true end end end local Jq=(((m-f)+bb)-ob)/v if Jq*Jq<T then local S=((h+Jb)-Zb)-Jq*B if S*S<Ib then local S=((r+Nb)-jb)-Jq*A if S*S<cb then return true end end end local Hq=(((m+f)+bb)-ob)/v if Hq*Hq<T then local S=((h+Jb)-Zb)-Hq*B if S*S<Ib then local S=((r+Nb)-jb)-Hq*A if S*S<cb then return true end end end local Nq=(((m-f)-bb)-ob)/v if Nq*Nq<T then local S=((h-Jb)-Zb)-Nq*B if S*S<Ib then local S=((r-Nb)-jb)-Nq*A if S*S<cb then return true end end end local Cq=(((m+f)-bb)-ob)/v if Cq*Cq<T then local S=((h-Jb)-Zb)-Cq*B if S*S<Ib then local S=((r-Nb)-jb)-Cq*A if S*S<cb then return true end end end local bq=(((h-R)+Zb)+nb)/c if bq*bq<G then local A=((r+jb)+Hb)-bq*S if A*A<cb then local A=((m+ob)+Cb)-bq*M if A*A<Ob then return true end end end local Zq=(((h+R)+Zb)+nb)/c if Zq*Zq<G then local A=((r+jb)+Hb)-Zq*S if A*A<cb then local A=((m+ob)+Cb)-Zq*M if A*A<Ob then return true end end end local jq=(((h-R)-Zb)+nb)/c if jq*jq<G then local A=((r-jb)+Hb)-jq*S if A*A<cb then local A=((m-ob)+Cb)-jq*M if A*A<Ob then return true end end end local oq=(((h+R)-Zb)+nb)/c if oq*oq<G then local A=((r-jb)+Hb)-oq*S if A*A<cb then local A=((m-ob)+Cb)-oq*M if A*A<Ob then return true end end end local Tq=(((h-R)+Zb)-nb)/c if Tq*Tq<G then local A=((r+jb)-Hb)-Tq*S if A*A<cb then local A=((m+ob)-Cb)-Tq*M if A*A<Ob then return true end end end local Gq=(((h+R)+Zb)-nb)/c if Gq*Gq<G then local A=((r+jb)-Hb)-Gq*S if A*A<cb then local A=((m+ob)-Cb)-Gq*M if A*A<Ob then return true end end end local eq=(((h-R)-Zb)-nb)/c if eq*eq<G then local A=((r-jb)-Hb)-eq*S if A*A<cb then local A=((m-ob)-Cb)-eq*M if A*A<Ob then return true end end end local Vq=(((h+R)-Zb)-nb)/c if Vq*Vq<G then local A=((r-jb)-Hb)-Vq*S if A*A<cb then local A=((m-ob)-Cb)-Vq*M if A*A<Ob then return true end end end local sq=(((r-u)+jb)+Hb)/S if sq*sq<G then local A=((m+ob)+Cb)-sq*M if A*A<Ob then local A=((h+Zb)+nb)-sq*c if A*A<Ib then return true end end end local kq=(((r+u)+jb)+Hb)/S if kq*kq<G then local A=((m+ob)+Cb)-kq*M if A*A<Ob then local A=((h+Zb)+nb)-kq*c if A*A<Ib then return true end end end local Wq=(((r-u)-jb)+Hb)/S if Wq*Wq<G then local A=((m-ob)+Cb)-Wq*M if A*A<Ob then local A=((h-Zb)+nb)-Wq*c if A*A<Ib then return true end end end local yq=(((r+u)-jb)+Hb)/S if yq*yq<G then local A=((m-ob)+Cb)-yq*M if A*A<Ob then local A=((h-Zb)+nb)-yq*c if A*A<Ib then return true end end end local iq=(((r-u)+jb)-Hb)/S if iq*iq<G then local A=((m+ob)-Cb)-iq*M if A*A<Ob then local A=((h+Zb)-nb)-iq*c if A*A<Ib then return true end end end local Kq=(((r+u)+jb)-Hb)/S if Kq*Kq<G then local A=((m+ob)-Cb)-Kq*M if A*A<Ob then local A=((h+Zb)-nb)-Kq*c if A*A<Ib then return true end end end local Pq=(((r-u)-jb)-Hb)/S if Pq*Pq<G then local A=((m-ob)-Cb)-Pq*M if A*A<Ob then local A=((h-Zb)-nb)-Pq*c if A*A<Ib then return true end end end local uq=(((r+u)-jb)-Hb)/S if uq*uq<G then local A=((m-ob)-Cb)-uq*M if A*A<Ob then local A=((h-Zb)-nb)-uq*c if A*A<Ib then return true end end end local fq=(((m-f)+ob)+Cb)/M if fq*fq<G then local A=((h+Zb)+nb)-fq*c if A*A<Ib then local A=((r+jb)+Hb)-fq*S if A*A<cb then return true end end end local Rq=(((m+f)+ob)+Cb)/M if Rq*Rq<G then local A=((h+Zb)+nb)-Rq*c if A*A<Ib then local A=((r+jb)+Hb)-Rq*S if A*A<cb then return true end end end local Xq=(((m-f)-ob)+Cb)/M if Xq*Xq<G then local A=((h-Zb)+nb)-Xq*c if A*A<Ib then local A=((r-jb)+Hb)-Xq*S if A*A<cb then return true end end end local tq=(((m+f)-ob)+Cb)/M if tq*tq<G then local A=((h-Zb)+nb)-tq*c if A*A<Ib then local A=((r-jb)+Hb)-tq*S if A*A<cb then return true end end end local Yq=(((m-f)+ob)-Cb)/M if Yq*Yq<G then local A=((h+Zb)-nb)-Yq*c if A*A<Ib then local A=((r+jb)-Hb)-Yq*S if A*A<cb then return true end end end local Eq=(((m+f)+ob)-Cb)/M if Eq*Eq<G then local A=((h+Zb)-nb)-Eq*c if A*A<Ib then local A=((r+jb)-Hb)-Eq*S if A*A<cb then return true end end end local gq=(((m-f)-ob)-Cb)/M if gq*gq<G then local A=((h-Zb)-nb)-gq*c if A*A<Ib then local A=((r-jb)-Hb)-gq*S if A*A<cb then return true end end end local pq=(((m+f)-ob)-Cb)/M if pq*pq<G then local A=((h-Zb)-nb)-pq*c if A*A<Ib then local A=((r-jb)-Hb)-pq*S if A*A<cb then return true end end end return false else return Q end end end local S=setmetatable local x=(CFrame.new()).components local v=Workspace local M=v.FindPartsInRegion3WithIgnoreList local Q=unpack local B=type local c=game.IsA local O=Region3.new local I=Vector3.new local function n(A,S)local v,M,Q,B,c,n,J,H,N,C,b,Z=x(A)local j,o,T=S.x/2,S.y/2,S.z/2 local G=(j*(B<0 and-B or B)+o*(c<0 and-c or c))+T*(n<0 and-n or n)local e=(j*(J<0 and-J or J)+o*(H<0 and-H or H))+T*(N<0 and-N or N)local V=(j*(C<0 and-C or C)+o*(b<0 and-b or b))+T*(Z<0 and-Z or Z)return O(I(v-G,M-e,Q-V),I(v+G,M+e,Q+V))end local function J(A,S)local x=B(S)=="\116\097\098\108\101"and S or{S}local c=#x repeat local S=M(v,A,x,100)local Q=#x for A=1,#S,1 do x[Q+A]=S[A]end until#S<100 return{Q(x,c+1,#x)}end local function H(A,S)return BoxPointCollision(A.CFrame,A.Size,S)end local function N(A,S,x)return BoxSphereCollision(A.CFrame,A.Size,S,x)end local function C(S,x,v)return A(S.CFrame,S.Size,x,v)end local function b(S,x)local v=A(S.CFrame,S.Size,x.CFrame,x.Size)return v end local function Z(A,S)local x={}for v=1,#S,1 do if b(A,S[v])then x[#x+1]=S[v]end end return x end local function j(A,S)local x={}local v=J(A.Region3,S)for S=1,#v,1 do if b(A,v[S])then x[#x+1]=v[S]end end return x end local function o(A,x)local v={CFrame=A,Size=x,Region3=n(A,x),Cast=j;CastPart=b;CastParts=Z;CastPoint=H;CastSphere=N;CastBox=C}return S({},{__index=v,__newindex=function(A,S,x)v[S]=x v.Region3=n(v.CFrame,v.Size)end})end Region.Region3BoundingBox=n Region.FindAllPartsInRegion3=J Region.BoxPointCollision=BoxPointCollision Region.BoxSphereCollision=BoxSphereCollision Region.BoxCollision=A Region.new=o function Region.FromPart(A)return o(A.CFrame,A.Size)end return Region

local BoxCollision do
	local components=CFrame.new().components
	function BoxCollision(CFrame0,Size0,CFrame1,Size1,AssumeTrue)
		local	m00,m01,m02,
				m03,m04,m05,
				m06,m07,m08,
				m09,m10,m11	=components(CFrame0)
		local	m12,m13,m14,
				m15,m16,m17,
				m18,m19,m20,
				m21,m22,m23	=components(CFrame1)
		local	m24,m25,m26	=Size0.x/2,Size0.y/2,Size0.z/2
		local	m27,m28,m29	=Size1.x/2,Size1.y/2,Size1.z/2
		local	m30,m31,m32	=m12-m00,m13-m01,m14-m02
		local	m00			=m03*m30+m06*m31+m09*m32
		local	m01			=m04*m30+m07*m31+m10*m32
		local	m02			=m05*m30+m08*m31+m11*m32
		local	m12			=m15*m30+m18*m31+m21*m32
		local	m13			=m16*m30+m19*m31+m22*m32
		local	m14			=m17*m30+m20*m31+m23*m32
		local	m30			=m12>m27 and m12-m27
							or m12<-m27 and m12+m27
							or 0
		local	m31			=m13>m28 and m13-m28
							or m13<-m28 and m13+m28
							or 0
		local	m32			=m14>m29 and m14-m29
							or m14<-m29 and m14+m29
							or 0
		local	m33			=m00>m24 and m00-m24
							or m00<-m24 and m00+m24
							or 0
		local	m34			=m01>m25 and m01-m25
							or m01<-m25 and m01+m25
							or 0
		local	m35			=m02>m26 and m02-m26
							or m02<-m26 and m02+m26
							or 0
		local	m36			=m30*m30+m31*m31+m32*m32
		local	m30			=m33*m33+m34*m34+m35*m35
		local	m31			=m24<m25 and (m24<m26 and m24 or m26)
							or (m25<m26 and m25 or m26)
		local	m32			=m27<m28 and (m27<m29 and m27 or m29)
							or (m28<m29 and m28 or m29)
		if m36<m31*m31 or m30<m32*m32 then
			return true
		elseif m36>m24*m24+m25*m25+m26*m26 or m30>m27*m27+m28*m28+m29*m29 then
			return false
		elseif AssumeTrue==nil then
			--LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL
			--(This is how you tell if something was made by Axis Angle)
			local m30=m03*m15+m06*m18+m09*m21
			local m31=m03*m16+m06*m19+m09*m22
			local m32=m03*m17+m06*m20+m09*m23
			local m03=m04*m15+m07*m18+m10*m21
			local m06=m04*m16+m07*m19+m10*m22
			local m09=m04*m17+m07*m20+m10*m23
			local m04=m05*m15+m08*m18+m11*m21
			local m07=m05*m16+m08*m19+m11*m22
			local m10=m05*m17+m08*m20+m11*m23
			local m05=m29*m29
			local m08=m27*m27
			local m11=m28*m28
			local m15=m24*m30
			local m16=m25*m03
			local m17=m26*m04
			local m18=m24*m31
			local m19=m25*m06
			local m20=m26*m07
			local m21=m24*m32
			local m22=m25*m09
			local m23=m26*m10
			local m33=m15+m16+m17-m12;if m33*m33<m08 then local m34=m18+m19+m20-m13;if m34*m34<m11 then local m35=m21+m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15+m16+m17-m12;if m33*m33<m08 then local m34=-m18+m19+m20-m13;if m34*m34<m11 then local m35=-m21+m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15-m16+m17-m12;if m33*m33<m08 then local m34=m18-m19+m20-m13;if m34*m34<m11 then local m35=m21-m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15-m16+m17-m12;if m33*m33<m08 then local m34=-m18-m19+m20-m13;if m34*m34<m11 then local m35=-m21-m22+m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15+m16-m17-m12;if m33*m33<m08 then local m34=m18+m19-m20-m13;if m34*m34<m11 then local m35=m21+m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15+m16-m17-m12;if m33*m33<m08 then local m34=-m18+m19-m20-m13;if m34*m34<m11 then local m35=-m21+m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=m15-m16-m17-m12;if m33*m33<m08 then local m34=m18-m19-m20-m13;if m34*m34<m11 then local m35=m21-m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m33=-m15-m16-m17-m12;if m33*m33<m08 then local m34=-m18-m19-m20-m13;if m34*m34<m11 then local m35=-m21-m22-m23-m14;if m35*m35<m05 then return true;end;end;end;
			local m12=m24*m24
			local m13=m25*m25
			local m14=m26*m26
			local m15=m27*m04
			local m16=m28*m07
			local m17=m27*m30
			local m18=m28*m31
			local m19=m27*m03
			local m20=m28*m06
			local m21=m29*m10
			local m22=m29*m32
			local m23=m29*m09
			local m35=(m02-m26+m15+m16)/m10;if m35*m35<m05 then local m33=m00+m17+m18-m35*m32;if m33*m33<m12 then local m34=m01+m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m15+m16)/m10;if m35*m35<m05 then local m33=m00+m17+m18-m35*m32;if m33*m33<m12 then local m34=m01+m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m15+m16)/m10;if m35*m35<m05 then local m33=m00-m17+m18-m35*m32;if m33*m33<m12 then local m34=m01-m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m15+m16)/m10;if m35*m35<m05 then local m33=m00-m17+m18-m35*m32;if m33*m33<m12 then local m34=m01-m19+m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m15-m16)/m10;if m35*m35<m05 then local m33=m00+m17-m18-m35*m32;if m33*m33<m12 then local m34=m01+m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m15-m16)/m10;if m35*m35<m05 then local m33=m00+m17-m18-m35*m32;if m33*m33<m12 then local m34=m01+m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m15-m16)/m10;if m35*m35<m05 then local m33=m00-m17-m18-m35*m32;if m33*m33<m12 then local m34=m01-m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m15-m16)/m10;if m35*m35<m05 then local m33=m00-m17-m18-m35*m32;if m33*m33<m12 then local m34=m01-m19-m20-m35*m09;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m17+m18)/m32;if m35*m35<m05 then local m33=m01+m19+m20-m35*m09;if m33*m33<m13 then local m34=m02+m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m17+m18)/m32;if m35*m35<m05 then local m33=m01+m19+m20-m35*m09;if m33*m33<m13 then local m34=m02+m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m17+m18)/m32;if m35*m35<m05 then local m33=m01-m19+m20-m35*m09;if m33*m33<m13 then local m34=m02-m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m17+m18)/m32;if m35*m35<m05 then local m33=m01-m19+m20-m35*m09;if m33*m33<m13 then local m34=m02-m15+m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m17-m18)/m32;if m35*m35<m05 then local m33=m01+m19-m20-m35*m09;if m33*m33<m13 then local m34=m02+m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m17-m18)/m32;if m35*m35<m05 then local m33=m01+m19-m20-m35*m09;if m33*m33<m13 then local m34=m02+m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m17-m18)/m32;if m35*m35<m05 then local m33=m01-m19-m20-m35*m09;if m33*m33<m13 then local m34=m02-m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m17-m18)/m32;if m35*m35<m05 then local m33=m01-m19-m20-m35*m09;if m33*m33<m13 then local m34=m02-m15-m16-m35*m10;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m19+m20)/m09;if m35*m35<m05 then local m33=m02+m15+m16-m35*m10;if m33*m33<m14 then local m34=m00+m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m19+m20)/m09;if m35*m35<m05 then local m33=m02+m15+m16-m35*m10;if m33*m33<m14 then local m34=m00+m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m19+m20)/m09;if m35*m35<m05 then local m33=m02-m15+m16-m35*m10;if m33*m33<m14 then local m34=m00-m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m19+m20)/m09;if m35*m35<m05 then local m33=m02-m15+m16-m35*m10;if m33*m33<m14 then local m34=m00-m17+m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m19-m20)/m09;if m35*m35<m05 then local m33=m02+m15-m16-m35*m10;if m33*m33<m14 then local m34=m00+m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m19-m20)/m09;if m35*m35<m05 then local m33=m02+m15-m16-m35*m10;if m33*m33<m14 then local m34=m00+m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m19-m20)/m09;if m35*m35<m05 then local m33=m02-m15-m16-m35*m10;if m33*m33<m14 then local m34=m00-m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m19-m20)/m09;if m35*m35<m05 then local m33=m02-m15-m16-m35*m10;if m33*m33<m14 then local m34=m00-m17-m18-m35*m32;if m34*m34<m12 then return true;end;end;end;
			local m35=(m02-m26+m16+m21)/m04;if m35*m35<m08 then local m33=m00+m18+m22-m35*m30;if m33*m33<m12 then local m34=m01+m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m16+m21)/m04;if m35*m35<m08 then local m33=m00+m18+m22-m35*m30;if m33*m33<m12 then local m34=m01+m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m16+m21)/m04;if m35*m35<m08 then local m33=m00-m18+m22-m35*m30;if m33*m33<m12 then local m34=m01-m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m16+m21)/m04;if m35*m35<m08 then local m33=m00-m18+m22-m35*m30;if m33*m33<m12 then local m34=m01-m20+m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m16-m21)/m04;if m35*m35<m08 then local m33=m00+m18-m22-m35*m30;if m33*m33<m12 then local Axi=m01+m20-m23-m35*m03;if Axi*Axi<m13 then return true;end;end;end;
			local m35=(m02+m26+m16-m21)/m04;if m35*m35<m08 then local m33=m00+m18-m22-m35*m30;if m33*m33<m12 then local sAn=m01+m20-m23-m35*m03;if sAn*sAn<m13 then return true;end;end;end;
			local m35=(m02-m26-m16-m21)/m04;if m35*m35<m08 then local m33=m00-m18-m22-m35*m30;if m33*m33<m12 then local gle=m01-m20-m23-m35*m03;if gle*gle<m13 then return true;end;end;end;
			local m35=(m02+m26-m16-m21)/m04;if m35*m35<m08 then local m33=m00-m18-m22-m35*m30;if m33*m33<m12 then local m34=m01-m20-m23-m35*m03;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m18+m22)/m30;if m35*m35<m08 then local m33=m01+m20+m23-m35*m03;if m33*m33<m13 then local m34=m02+m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m18+m22)/m30;if m35*m35<m08 then local m33=m01+m20+m23-m35*m03;if m33*m33<m13 then local m34=m02+m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m18+m22)/m30;if m35*m35<m08 then local m33=m01-m20+m23-m35*m03;if m33*m33<m13 then local m34=m02-m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m18+m22)/m30;if m35*m35<m08 then local m33=m01-m20+m23-m35*m03;if m33*m33<m13 then local m34=m02-m16+m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m18-m22)/m30;if m35*m35<m08 then local m33=m01+m20-m23-m35*m03;if m33*m33<m13 then local m34=m02+m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m18-m22)/m30;if m35*m35<m08 then local m33=m01+m20-m23-m35*m03;if m33*m33<m13 then local m34=m02+m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m18-m22)/m30;if m35*m35<m08 then local m33=m01-m20-m23-m35*m03;if m33*m33<m13 then local m34=m02-m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m18-m22)/m30;if m35*m35<m08 then local m33=m01-m20-m23-m35*m03;if m33*m33<m13 then local m34=m02-m16-m21-m35*m04;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m20+m23)/m03;if m35*m35<m08 then local m33=m02+m16+m21-m35*m04;if m33*m33<m14 then local m34=m00+m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m20+m23)/m03;if m35*m35<m08 then local m33=m02+m16+m21-m35*m04;if m33*m33<m14 then local m34=m00+m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m20+m23)/m03;if m35*m35<m08 then local m33=m02-m16+m21-m35*m04;if m33*m33<m14 then local m34=m00-m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m20+m23)/m03;if m35*m35<m08 then local m33=m02-m16+m21-m35*m04;if m33*m33<m14 then local m34=m00-m18+m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m20-m23)/m03;if m35*m35<m08 then local m33=m02+m16-m21-m35*m04;if m33*m33<m14 then local m34=m00+m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m20-m23)/m03;if m35*m35<m08 then local m33=m02+m16-m21-m35*m04;if m33*m33<m14 then local m34=m00+m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m20-m23)/m03;if m35*m35<m08 then local m33=m02-m16-m21-m35*m04;if m33*m33<m14 then local m34=m00-m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m20-m23)/m03;if m35*m35<m08 then local m33=m02-m16-m21-m35*m04;if m33*m33<m14 then local m34=m00-m18-m22-m35*m30;if m34*m34<m12 then return true;end;end;end;
			local m35=(m02-m26+m21+m15)/m07;if m35*m35<m11 then local m33=m00+m22+m17-m35*m31;if m33*m33<m12 then local m34=m01+m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m21+m15)/m07;if m35*m35<m11 then local m33=m00+m22+m17-m35*m31;if m33*m33<m12 then local m34=m01+m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m21+m15)/m07;if m35*m35<m11 then local m33=m00-m22+m17-m35*m31;if m33*m33<m12 then local m34=m01-m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m21+m15)/m07;if m35*m35<m11 then local m33=m00-m22+m17-m35*m31;if m33*m33<m12 then local m34=m01-m23+m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26+m21-m15)/m07;if m35*m35<m11 then local m33=m00+m22-m17-m35*m31;if m33*m33<m12 then local m34=m01+m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26+m21-m15)/m07;if m35*m35<m11 then local m33=m00+m22-m17-m35*m31;if m33*m33<m12 then local m34=m01+m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02-m26-m21-m15)/m07;if m35*m35<m11 then local m33=m00-m22-m17-m35*m31;if m33*m33<m12 then local m34=m01-m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m02+m26-m21-m15)/m07;if m35*m35<m11 then local m33=m00-m22-m17-m35*m31;if m33*m33<m12 then local m34=m01-m23-m19-m35*m06;if m34*m34<m13 then return true;end;end;end;
			local m35=(m00-m24+m22+m17)/m31;if m35*m35<m11 then local m33=m01+m23+m19-m35*m06;if m33*m33<m13 then local m34=m02+m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m22+m17)/m31;if m35*m35<m11 then local m33=m01+m23+m19-m35*m06;if m33*m33<m13 then local m34=m02+m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m22+m17)/m31;if m35*m35<m11 then local m33=m01-m23+m19-m35*m06;if m33*m33<m13 then local m34=m02-m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m22+m17)/m31;if m35*m35<m11 then local m33=m01-m23+m19-m35*m06;if m33*m33<m13 then local m34=m02-m21+m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24+m22-m17)/m31;if m35*m35<m11 then local m33=m01+m23-m19-m35*m06;if m33*m33<m13 then local m34=m02+m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24+m22-m17)/m31;if m35*m35<m11 then local m33=m01+m23-m19-m35*m06;if m33*m33<m13 then local m34=m02+m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00-m24-m22-m17)/m31;if m35*m35<m11 then local m33=m01-m23-m19-m35*m06;if m33*m33<m13 then local m34=m02-m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m00+m24-m22-m17)/m31;if m35*m35<m11 then local m33=m01-m23-m19-m35*m06;if m33*m33<m13 then local m34=m02-m21-m15-m35*m07;if m34*m34<m14 then return true;end;end;end;
			local m35=(m01-m25+m23+m19)/m06;if m35*m35<m11 then local m33=m02+m21+m15-m35*m07;if m33*m33<m14 then local m34=m00+m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m23+m19)/m06;if m35*m35<m11 then local m33=m02+m21+m15-m35*m07;if m33*m33<m14 then local m34=m00+m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m23+m19)/m06;if m35*m35<m11 then local m33=m02-m21+m15-m35*m07;if m33*m33<m14 then local m34=m00-m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m23+m19)/m06;if m35*m35<m11 then local m33=m02-m21+m15-m35*m07;if m33*m33<m14 then local m34=m00-m22+m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25+m23-m19)/m06;if m35*m35<m11 then local m33=m02+m21-m15-m35*m07;if m33*m33<m14 then local m34=m00+m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25+m23-m19)/m06;if m35*m35<m11 then local m33=m02+m21-m15-m35*m07;if m33*m33<m14 then local m34=m00+m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01-m25-m23-m19)/m06;if m35*m35<m11 then local m33=m02-m21-m15-m35*m07;if m33*m33<m14 then local m34=m00-m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			local m35=(m01+m25-m23-m19)/m06;if m35*m35<m11 then local m33=m02-m21-m15-m35*m07;if m33*m33<m14 then local m34=m00-m22-m17-m35*m31;if m34*m34<m12 then return true;end;end;end;
			return false
		else
			return AssumeTrue
		end
	end
end


local setmetatable	=setmetatable
local components	=CFrame.new().components
local Workspace		=Workspace
local BoxCast		=Workspace.FindPartsInRegion3WithIgnoreList
local unpack		=unpack
local type			=type
local IsA			=game.IsA
local r3			=Region3.new
local v3			=Vector3.new



local function Region3BoundingBox(CFrame,Size)
 	local	x,y,z,
			xx,yx,zx,
			xy,yy,zy,
			xz,yz,zz=components(CFrame)
	local	sx,sy,sz=Size.x/2,Size.y/2,Size.z/2
	local	px		=sx*(xx<0 and -xx or xx)
					+sy*(yx<0 and -yx or yx)
					+sz*(zx<0 and -zx or zx)
	local	py		=sx*(xy<0 and -xy or xy)
					+sy*(yy<0 and -yy or yy)
					+sz*(zy<0 and -zy or zy)
	local	pz		=sx*(xz<0 and -xz or xz)
					+sy*(yz<0 and -yz or yz)
					+sz*(zz<0 and -zz or zz)
	return			r3(v3(x-px,y-py,z-pz),v3(x+px,y+py,z+pz))
end



local function FindAllPartsInRegion3(Region3,Ignore)
	local Ignore=type(Ignore)=="table" and Ignore or {Ignore}
	local Last=#Ignore
	repeat
		local Parts=BoxCast(Workspace,Region3,Ignore,100)
		local Start=#Ignore
		for i=1,#Parts do
			Ignore[Start+i]=Parts[i]
		end
	until #Parts<100;
	return {unpack(Ignore,Last+1,#Ignore)}
end



local function CastPoint(Region,Point)
	return BoxPointCollision(Region.CFrame,Region.Size,Point)
end



local function CastSphere(Region,Center,Radius)
	return BoxSphereCollision(Region.CFrame,Region.Size,Center,Radius)
end



local function CastBox(Region,CFrame,Size)
	return BoxCollision(Region.CFrame,Region.Size,CFrame,Size)
end



local function CastPart(Region,Part)
	local result = BoxCollision(Region.CFrame,Region.Size,Part.CFrame,Part.Size);
	return result;
end



local function CastParts(Region,Parts)
	local Inside={}
	for i=1,#Parts do
		if CastPart(Region,Parts[i]) then
			Inside[#Inside+1]=Parts[i]
		end
	end
	return Inside
end



local function Cast(Region,Ignore)
	local Inside={}
	local Parts=FindAllPartsInRegion3(Region.Region3,Ignore)
	for i=1,#Parts do
		if CastPart(Region,Parts[i]) then
			Inside[#Inside+1]=Parts[i]
		end
	end
	return Inside
end



local function NewRegion(CFrame,Size)
	local Object	={
		CFrame		=CFrame;
		Size		=Size;
		Region3		=Region3BoundingBox(CFrame,Size);
		Cast		=Cast;
		CastPart	=CastPart;
		CastParts	=CastParts;
		CastPoint	=CastPoint;
		CastSphere	=CastSphere;
		CastBox		=CastBox;
					}
	return			setmetatable({},{
		__index=Object;
		__newindex=function(_,Index,Value)
			Object[Index]=Value
			Object.Region3=Region3BoundingBox(Object.CFrame,Object.Size)
		end;
					})
end



Region.Region3BoundingBox	=Region3BoundingBox
Region.FindAllPartsInRegion3=FindAllPartsInRegion3
Region.BoxPointCollision	=BoxPointCollision
Region.BoxSphereCollision	=BoxSphereCollision
Region.BoxCollision			=BoxCollision
Region.new					=NewRegion
function Region.FromPart(Part)
	return NewRegion(Part.CFrame,Part.Size)
end

return Region
