#include <iostream>
#include <vector>
#include <algorithm>
#include <complex>

using namespace std;

#define EPS (1e-10)

typedef complex<double> P;
#define EQ(a,b) (abs((a)-(b)) < EPS)
double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}
double dot(P a, P b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
// a1,a2ツづーツ端ツ点ツづつキツづゥツ静シツ閉ェツづ1,b2ツづーツ端ツ点ツづつキツづゥツ静シツ閉ェツづ個古ーツ債キツ板サツ津ィ
int is_intersected_ls(P a1, P a2, P b1, P b2) {
  return ( cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS ) &&
         ( cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS );
}
int is_orthogonal(P a1, P a2, P b1, P b2) {
  return EQ( dot(a1-a2, b1-b2), 0.0 );
}
int main(){
	while(1){
		P p[4];
		for(int i = 0; i < 4; i++){
			double x,y;
			cin>>x>>y;
			if(cin.eof())
				return 0;
			p[i]=P(x,y);
		}
		if(is_orthogonal(p[0],p[1],p[2],p[3])){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}