local P do local x=(CFrame.new()).components function P(P,g,U,E,s)local F,y,w,u,p,f,r,m,J,c,H,k=x(P)local b,X,h,i,O,A,z,N,n,t,v,d=x(U)local S,Y,K=g.x/2,g.y/2,g.z/2 local V,R,B=E.x/2,E.y/2,E.z/2 local q,j,D=b-F,X-y,h-w local o=(u*q+r*j)+c*D local Z=(p*q+m*j)+H*D local W=(f*q+J*j)+k*D local L=(i*q+z*j)+t*D local C=(O*q+N*j)+v*D local G=(A*q+n*j)+d*D local T=L>V and L-V or L<-V and L+V or 0 local e=C>R and C-R or C<-R and C+R or 0 local M=G>B and G-B or G<-B and G+B or 0 local l=o>S and o-S or o<-S and o+S or 0 local I=Z>Y and Z-Y or Z<-Y and Z+Y or 0 local a=W>K and W-K or W<-K and W+K or 0 local Q=(T*T+e*e)+M*M local PO=(l*l+I*I)+a*a local xO=S<Y and(S<K and S or K)or Y<K and Y or K local gO=V<R and(V<B and V or B)or R<B and R or B if Q<xO*xO or PO<gO*gO then return true elseif Q>(S*S+Y*Y)+K*K or PO>(V*V+R*R)+B*B then return false elseif s==nil then local P=(u*i+r*z)+c*t local x=(u*O+r*N)+c*v local g=(u*A+r*n)+c*d local U=(p*i+m*z)+H*t local E=(p*O+m*N)+H*v local s=(p*A+m*n)+H*d local F=(f*i+J*z)+k*t local y=(f*O+J*N)+k*v local w=(f*A+J*n)+k*d local b=B*B local X=V*V local h=R*R local q=S*P local j=Y*U local D=K*F local T=S*x local e=Y*E local M=K*y local l=S*g local I=Y*s local a=K*w local Q=((q+j)+D)-L if Q*Q<X then local P=((T+e)+M)-C if P*P<h then local P=((l+I)+a)-G if P*P<b then return true end end end local PO=((-q+j)+D)-L if PO*PO<X then local P=((-T+e)+M)-C if P*P<h then local P=((-l+I)+a)-G if P*P<b then return true end end end local xO=((q-j)+D)-L if xO*xO<X then local P=((T-e)+M)-C if P*P<h then local P=((l-I)+a)-G if P*P<b then return true end end end local gO=((-q-j)+D)-L if gO*gO<X then local P=((-T-e)+M)-C if P*P<h then local P=((-l-I)+a)-G if P*P<b then return true end end end local UO=((q+j)-D)-L if UO*UO<X then local P=((T+e)-M)-C if P*P<h then local P=((l+I)-a)-G if P*P<b then return true end end end local EO=((-q+j)-D)-L if EO*EO<X then local P=((-T+e)-M)-C if P*P<h then local P=((-l+I)-a)-G if P*P<b then return true end end end local sO=((q-j)-D)-L if sO*sO<X then local P=((T-e)-M)-C if P*P<h then local P=((l-I)-a)-G if P*P<b then return true end end end local FO=((-q-j)-D)-L if FO*FO<X then local P=((-T-e)-M)-C if P*P<h then local P=((-l-I)-a)-G if P*P<b then return true end end end local yO=S*S local wO=Y*Y local uO=K*K local pO=V*F local fO=R*y local rO=V*P local mO=R*x local JO=V*U local cO=R*E local HO=B*w local kO=B*g local bO=B*s local XO=(((W-K)+pO)+fO)/w if XO*XO<b then local P=((o+rO)+mO)-XO*g if P*P<yO then local P=((Z+JO)+cO)-XO*s if P*P<wO then return true end end end local hO=(((W+K)+pO)+fO)/w if hO*hO<b then local P=((o+rO)+mO)-hO*g if P*P<yO then local P=((Z+JO)+cO)-hO*s if P*P<wO then return true end end end local iO=(((W-K)-pO)+fO)/w if iO*iO<b then local P=((o-rO)+mO)-iO*g if P*P<yO then local P=((Z-JO)+cO)-iO*s if P*P<wO then return true end end end local OO=(((W+K)-pO)+fO)/w if OO*OO<b then local P=((o-rO)+mO)-OO*g if P*P<yO then local P=((Z-JO)+cO)-OO*s if P*P<wO then return true end end end local AO=(((W-K)+pO)-fO)/w if AO*AO<b then local P=((o+rO)-mO)-AO*g if P*P<yO then local P=((Z+JO)-cO)-AO*s if P*P<wO then return true end end end local zO=(((W+K)+pO)-fO)/w if zO*zO<b then local P=((o+rO)-mO)-zO*g if P*P<yO then local P=((Z+JO)-cO)-zO*s if P*P<wO then return true end end end local NO=(((W-K)-pO)-fO)/w if NO*NO<b then local P=((o-rO)-mO)-NO*g if P*P<yO then local P=((Z-JO)-cO)-NO*s if P*P<wO then return true end end end local nO=(((W+K)-pO)-fO)/w if nO*nO<b then local P=((o-rO)-mO)-nO*g if P*P<yO then local P=((Z-JO)-cO)-nO*s if P*P<wO then return true end end end local tO=(((o-S)+rO)+mO)/g if tO*tO<b then local P=((Z+JO)+cO)-tO*s if P*P<wO then local P=((W+pO)+fO)-tO*w if P*P<uO then return true end end end local vO=(((o+S)+rO)+mO)/g if vO*vO<b then local P=((Z+JO)+cO)-vO*s if P*P<wO then local P=((W+pO)+fO)-vO*w if P*P<uO then return true end end end local dO=(((o-S)-rO)+mO)/g if dO*dO<b then local P=((Z-JO)+cO)-dO*s if P*P<wO then local P=((W-pO)+fO)-dO*w if P*P<uO then return true end end end local SO=(((o+S)-rO)+mO)/g if SO*SO<b then local P=((Z-JO)+cO)-SO*s if P*P<wO then local P=((W-pO)+fO)-SO*w if P*P<uO then return true end end end local YO=(((o-S)+rO)-mO)/g if YO*YO<b then local P=((Z+JO)-cO)-YO*s if P*P<wO then local P=((W+pO)-fO)-YO*w if P*P<uO then return true end end end local KO=(((o+S)+rO)-mO)/g if KO*KO<b then local P=((Z+JO)-cO)-KO*s if P*P<wO then local P=((W+pO)-fO)-KO*w if P*P<uO then return true end end end local VO=(((o-S)-rO)-mO)/g if VO*VO<b then local P=((Z-JO)-cO)-VO*s if P*P<wO then local P=((W-pO)-fO)-VO*w if P*P<uO then return true end end end local RO=(((o+S)-rO)-mO)/g if RO*RO<b then local P=((Z-JO)-cO)-RO*s if P*P<wO then local P=((W-pO)-fO)-RO*w if P*P<uO then return true end end end local BO=(((Z-Y)+JO)+cO)/s if BO*BO<b then local P=((W+pO)+fO)-BO*w if P*P<uO then local P=((o+rO)+mO)-BO*g if P*P<yO then return true end end end local qO=(((Z+Y)+JO)+cO)/s if qO*qO<b then local P=((W+pO)+fO)-qO*w if P*P<uO then local P=((o+rO)+mO)-qO*g if P*P<yO then return true end end end local jO=(((Z-Y)-JO)+cO)/s if jO*jO<b then local P=((W-pO)+fO)-jO*w if P*P<uO then local P=((o-rO)+mO)-jO*g if P*P<yO then return true end end end local DO=(((Z+Y)-JO)+cO)/s if DO*DO<b then local P=((W-pO)+fO)-DO*w if P*P<uO then local P=((o-rO)+mO)-DO*g if P*P<yO then return true end end end local oO=(((Z-Y)+JO)-cO)/s if oO*oO<b then local P=((W+pO)-fO)-oO*w if P*P<uO then local P=((o+rO)-mO)-oO*g if P*P<yO then return true end end end local ZO=(((Z+Y)+JO)-cO)/s if ZO*ZO<b then local P=((W+pO)-fO)-ZO*w if P*P<uO then local P=((o+rO)-mO)-ZO*g if P*P<yO then return true end end end local WO=(((Z-Y)-JO)-cO)/s if WO*WO<b then local P=((W-pO)-fO)-WO*w if P*P<uO then local P=((o-rO)-mO)-WO*g if P*P<yO then return true end end end local LO=(((Z+Y)-JO)-cO)/s if LO*LO<b then local P=((W-pO)-fO)-LO*w if P*P<uO then local P=((o-rO)-mO)-LO*g if P*P<yO then return true end end end local CO=(((W-K)+fO)+HO)/F if CO*CO<X then local x=((o+mO)+kO)-CO*P if x*x<yO then local P=((Z+cO)+bO)-CO*U if P*P<wO then return true end end end local GO=(((W+K)+fO)+HO)/F if GO*GO<X then local x=((o+mO)+kO)-GO*P if x*x<yO then local P=((Z+cO)+bO)-GO*U if P*P<wO then return true end end end local TO=(((W-K)-fO)+HO)/F if TO*TO<X then local x=((o-mO)+kO)-TO*P if x*x<yO then local P=((Z-cO)+bO)-TO*U if P*P<wO then return true end end end local eO=(((W+K)-fO)+HO)/F if eO*eO<X then local x=((o-mO)+kO)-eO*P if x*x<yO then local P=((Z-cO)+bO)-eO*U if P*P<wO then return true end end end local MO=(((W-K)+fO)-HO)/F if MO*MO<X then local x=((o+mO)-kO)-MO*P if x*x<yO then local P=((Z+cO)-bO)-MO*U if P*P<wO then return true end end end local lO=(((W+K)+fO)-HO)/F if lO*lO<X then local x=((o+mO)-kO)-lO*P if x*x<yO then local P=((Z+cO)-bO)-lO*U if P*P<wO then return true end end end local IO=(((W-K)-fO)-HO)/F if IO*IO<X then local x=((o-mO)-kO)-IO*P if x*x<yO then local P=((Z-cO)-bO)-IO*U if P*P<wO then return true end end end local aO=(((W+K)-fO)-HO)/F if aO*aO<X then local x=((o-mO)-kO)-aO*P if x*x<yO then local P=((Z-cO)-bO)-aO*U if P*P<wO then return true end end end local QO=(((o-S)+mO)+kO)/P if QO*QO<X then local P=((Z+cO)+bO)-QO*U if P*P<wO then local P=((W+fO)+HO)-QO*F if P*P<uO then return true end end end local PS=(((o+S)+mO)+kO)/P if PS*PS<X then local P=((Z+cO)+bO)-PS*U if P*P<wO then local P=((W+fO)+HO)-PS*F if P*P<uO then return true end end end local xS=(((o-S)-mO)+kO)/P if xS*xS<X then local P=((Z-cO)+bO)-xS*U if P*P<wO then local P=((W-fO)+HO)-xS*F if P*P<uO then return true end end end local gS=(((o+S)-mO)+kO)/P if gS*gS<X then local P=((Z-cO)+bO)-gS*U if P*P<wO then local P=((W-fO)+HO)-gS*F if P*P<uO then return true end end end local US=(((o-S)+mO)-kO)/P if US*US<X then local P=((Z+cO)-bO)-US*U if P*P<wO then local P=((W+fO)-HO)-US*F if P*P<uO then return true end end end local ES=(((o+S)+mO)-kO)/P if ES*ES<X then local P=((Z+cO)-bO)-ES*U if P*P<wO then local P=((W+fO)-HO)-ES*F if P*P<uO then return true end end end local sS=(((o-S)-mO)-kO)/P if sS*sS<X then local P=((Z-cO)-bO)-sS*U if P*P<wO then local P=((W-fO)-HO)-sS*F if P*P<uO then return true end end end local FS=(((o+S)-mO)-kO)/P if FS*FS<X then local P=((Z-cO)-bO)-FS*U if P*P<wO then local P=((W-fO)-HO)-FS*F if P*P<uO then return true end end end local yS=(((Z-Y)+cO)+bO)/U if yS*yS<X then local x=((W+fO)+HO)-yS*F if x*x<uO then local x=((o+mO)+kO)-yS*P if x*x<yO then return true end end end local wS=(((Z+Y)+cO)+bO)/U if wS*wS<X then local x=((W+fO)+HO)-wS*F if x*x<uO then local x=((o+mO)+kO)-wS*P if x*x<yO then return true end end end local uS=(((Z-Y)-cO)+bO)/U if uS*uS<X then local x=((W-fO)+HO)-uS*F if x*x<uO then local x=((o-mO)+kO)-uS*P if x*x<yO then return true end end end local pS=(((Z+Y)-cO)+bO)/U if pS*pS<X then local x=((W-fO)+HO)-pS*F if x*x<uO then local x=((o-mO)+kO)-pS*P if x*x<yO then return true end end end local fS=(((Z-Y)+cO)-bO)/U if fS*fS<X then local x=((W+fO)-HO)-fS*F if x*x<uO then local x=((o+mO)-kO)-fS*P if x*x<yO then return true end end end local rS=(((Z+Y)+cO)-bO)/U if rS*rS<X then local x=((W+fO)-HO)-rS*F if x*x<uO then local x=((o+mO)-kO)-rS*P if x*x<yO then return true end end end local mS=(((Z-Y)-cO)-bO)/U if mS*mS<X then local x=((W-fO)-HO)-mS*F if x*x<uO then local x=((o-mO)-kO)-mS*P if x*x<yO then return true end end end local JS=(((Z+Y)-cO)-bO)/U if JS*JS<X then local x=((W-fO)-HO)-JS*F if x*x<uO then local x=((o-mO)-kO)-JS*P if x*x<yO then return true end end end local cS=(((W-K)+HO)+pO)/y if cS*cS<h then local P=((o+kO)+rO)-cS*x if P*P<yO then local P=((Z+bO)+JO)-cS*E if P*P<wO then return true end end end local HS=(((W+K)+HO)+pO)/y if HS*HS<h then local P=((o+kO)+rO)-HS*x if P*P<yO then local P=((Z+bO)+JO)-HS*E if P*P<wO then return true end end end local kS=(((W-K)-HO)+pO)/y if kS*kS<h then local P=((o-kO)+rO)-kS*x if P*P<yO then local P=((Z-bO)+JO)-kS*E if P*P<wO then return true end end end local bS=(((W+K)-HO)+pO)/y if bS*bS<h then local P=((o-kO)+rO)-bS*x if P*P<yO then local P=((Z-bO)+JO)-bS*E if P*P<wO then return true end end end local XS=(((W-K)+HO)-pO)/y if XS*XS<h then local P=((o+kO)-rO)-XS*x if P*P<yO then local P=((Z+bO)-JO)-XS*E if P*P<wO then return true end end end local hS=(((W+K)+HO)-pO)/y if hS*hS<h then local P=((o+kO)-rO)-hS*x if P*P<yO then local P=((Z+bO)-JO)-hS*E if P*P<wO then return true end end end local iS=(((W-K)-HO)-pO)/y if iS*iS<h then local P=((o-kO)-rO)-iS*x if P*P<yO then local P=((Z-bO)-JO)-iS*E if P*P<wO then return true end end end local OS=(((W+K)-HO)-pO)/y if OS*OS<h then local P=((o-kO)-rO)-OS*x if P*P<yO then local P=((Z-bO)-JO)-OS*E if P*P<wO then return true end end end local AS=(((o-S)+kO)+rO)/x if AS*AS<h then local P=((Z+bO)+JO)-AS*E if P*P<wO then local P=((W+HO)+pO)-AS*y if P*P<uO then return true end end end local zS=(((o+S)+kO)+rO)/x if zS*zS<h then local P=((Z+bO)+JO)-zS*E if P*P<wO then local P=((W+HO)+pO)-zS*y if P*P<uO then return true end end end local NS=(((o-S)-kO)+rO)/x if NS*NS<h then local P=((Z-bO)+JO)-NS*E if P*P<wO then local P=((W-HO)+pO)-NS*y if P*P<uO then return true end end end local nS=(((o+S)-kO)+rO)/x if nS*nS<h then local P=((Z-bO)+JO)-nS*E if P*P<wO then local P=((W-HO)+pO)-nS*y if P*P<uO then return true end end end local tS=(((o-S)+kO)-rO)/x if tS*tS<h then local P=((Z+bO)-JO)-tS*E if P*P<wO then local P=((W+HO)-pO)-tS*y if P*P<uO then return true end end end local vS=(((o+S)+kO)-rO)/x if vS*vS<h then local P=((Z+bO)-JO)-vS*E if P*P<wO then local P=((W+HO)-pO)-vS*y if P*P<uO then return true end end end local dS=(((o-S)-kO)-rO)/x if dS*dS<h then local P=((Z-bO)-JO)-dS*E if P*P<wO then local P=((W-HO)-pO)-dS*y if P*P<uO then return true end end end local SS=(((o+S)-kO)-rO)/x if SS*SS<h then local P=((Z-bO)-JO)-SS*E if P*P<wO then local P=((W-HO)-pO)-SS*y if P*P<uO then return true end end end local YS=(((Z-Y)+bO)+JO)/E if YS*YS<h then local P=((W+HO)+pO)-YS*y if P*P<uO then local P=((o+kO)+rO)-YS*x if P*P<yO then return true end end end local KS=(((Z+Y)+bO)+JO)/E if KS*KS<h then local P=((W+HO)+pO)-KS*y if P*P<uO then local P=((o+kO)+rO)-KS*x if P*P<yO then return true end end end local VS=(((Z-Y)-bO)+JO)/E if VS*VS<h then local P=((W-HO)+pO)-VS*y if P*P<uO then local P=((o-kO)+rO)-VS*x if P*P<yO then return true end end end local RS=(((Z+Y)-bO)+JO)/E if RS*RS<h then local P=((W-HO)+pO)-RS*y if P*P<uO then local P=((o-kO)+rO)-RS*x if P*P<yO then return true end end end local BS=(((Z-Y)+bO)-JO)/E if BS*BS<h then local P=((W+HO)-pO)-BS*y if P*P<uO then local P=((o+kO)-rO)-BS*x if P*P<yO then return true end end end local qS=(((Z+Y)+bO)-JO)/E if qS*qS<h then local P=((W+HO)-pO)-qS*y if P*P<uO then local P=((o+kO)-rO)-qS*x if P*P<yO then return true end end end local jS=(((Z-Y)-bO)-JO)/E if jS*jS<h then local P=((W-HO)-pO)-jS*y if P*P<uO then local P=((o-kO)-rO)-jS*x if P*P<yO then return true end end end local DS=(((Z+Y)-bO)-JO)/E if DS*DS<h then local P=((W-HO)-pO)-DS*y if P*P<uO then local P=((o-kO)-rO)-DS*x if P*P<yO then return true end end end return false else return s end end end local x=setmetatable local g=(CFrame.new()).components local U=Workspace local E=U.FindPartsInRegion3WithIgnoreList local s=unpack local F=type local y=game.IsA local w=Region3.new local u=Vector3.new local function p(P,x)local U,E,s,F,y,p,f,r,m,J,c,H=g(P)local k,b,X=x.x/2,x.y/2,x.z/2 local h=(k*(F<0 and-F or F)+b*(y<0 and-y or y))+X*(p<0 and-p or p)local i=(k*(f<0 and-f or f)+b*(r<0 and-r or r))+X*(m<0 and-m or m)local O=(k*(J<0 and-J or J)+b*(c<0 and-c or c))+X*(H<0 and-H or H)return w(u(U-h,E-i,s-O),u(U+h,E+i,s+O))end local function f(P,x)local g=F(x)=="\116\097\098\108\101"and x or{x}local y=#g repeat local x=E(U,P,g,100)local s=#g for P=1,#x,1 do g[s+P]=x[P]end until#x<100 return{s(g,y+1,#g)}end local function r(P,x)return BoxPointCollision(P.CFrame,P.Size,x)end local function m(P,x,g)return BoxSphereCollision(P.CFrame,P.Size,x,g)end local function J(x,g,U)return P(x.CFrame,x.Size,g,U)end local function c(x,g)return(not y(g,"\080\097\114\116")or g.Shape=="\066\108\111\099\107")and P(x.CFrame,x.Size,g.CFrame,g.Size)or BoxSphereCollision(x.CFrame,x.Size,g.Position,g.Size.x)end local function H(P,x)local g={}for U=1,#x,1 do if c(P,x[U])then g[#g+1]=x[U]end end return g end local function k(P,x)local g={}local U=f(P.Region3,x)for x=1,#U,1 do if c(P,U[x])then g[#g+1]=U[x]end end return g end local function b(P,g)local U={CFrame=P;Size=g,Region3=p(P,g);Cast=k,CastPart=c;CastParts=H,CastPoint=r;CastSphere=m,CastBox=J}return x({},{__index=U;__newindex=function(P,x,g)U[x]=g U.Region3=p(U.CFrame,U.Size)end})end Region.Region3BoundingBox=p Region.FindAllPartsInRegion3=f Region.BoxPointCollision=BoxPointCollision Region.BoxSphereCollision=BoxSphereCollision Region.BoxCollision=P Region.new=b function Region.FromPart(P)return b(P.CFrame,P.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)
	return	(not IsA(Part,"Part") or Part.Shape=="Block") and
			BoxCollision(Region.CFrame,Region.Size,Part.CFrame,Part.Size)
			or BoxSphereCollision(Region.CFrame,Region.Size,Part.Position,Part.Size.x)
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
