-157778763 218978790 976692563 591093088
 -1 -4 1 4
 -999999999 -1000000000 -1 0
 1000000000 1000000000 1000000000 1000000000
 -2 -3 -2 1
 -1000000000 -999999999 1000000000 999999999
 0 -1 0 1
 -999999999 -999999999 999999999 999999999
 -946749893 -687257665 -539044455 -443568671
 -26644507 -867720841 975594569 264730225
 309857887 -687373066 663986893 403321752
 -2 -2 -2 0
 0 -2 0 2
 0 -1 2 1
 -2 -2 2 2
 -999999999 -1000000000 999999999 1000000000
 -330513944 -970064382 500608496 369852884
 0 -3 0 3
 0 0 2 2
 -946749893 -687257666 -539044455 -443568670
 -330513944 -970064383 500608496 369852885
 -1000000000 -1000000000 1000000000 1000000000
 0 -1 2 3
 -999999999 -999999999 -1 -1
 309857887 -687373065 663986893 403321751
 -482406510 -512306895 412844236 -168036049
 0 0 2 0
 0 0 0 0
 -471257905 -685885154 782342299 909511044
 -482406510 -512306894 412844236 -168036050
 -157778763 218978791 976692563 591093087
 -411495869 33834653 -234317741 925065545
 -2 -3 2 3
 -411495869 33834652 -234317741 925065546
 -26644507 -867720842 975594569 264730226
 -537640548 -254017710 62355638 588691834
 -471257905 -685885153 782342299 909511043
 -1 -3 1 3
 1000000000 999999999 1000000000 999999999
 1 0 5 6
 -537640548 -254017711 62355638 588691835

211076501291102387 14 500000000000000000 1 3 2000000000000000000 2 1999999998000000001 49676664342971903 567493356068872580 193123336596257367 2 3 5 13 2000000000000000000 556817654843544374 4 5 49676664750677342 556817655674666815 2000000002000000001 8 499999999000000001 193123336242128360 154104366473536355 2 1 999994501061310398 154104365578285608 211076500156631060 78953311064369599 18 78953311241547728 567493357071111657 252811256874252458 999994499807710193 11 1 18 252811257474248645
#define _CRT_SECURE_NO_WARNINGS

#pragma comment(linker, "/STACK:640000000")

#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <list>
#include <vector>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cassert>
#include <bitset>

using namespace std;

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define forn1(i, n) for(int i = 1; i <= (int)(n); i++)
#define forr(i, l, r) for(int i = int(l); i <= int(r); i++)
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)((a).size())
#define mp make_pair
#define pb push_back
#define x first
#define y second
#define y1 __y1
#define sqr(x) ((x) * (x))

typedef long long li;
typedef long double ld;
typedef pair<int, int> pt;

inline void read(int&);
inline void read(li&);
inline void read(ld&);
inline void read(char&);
inline void read(string&);
template <typename T1, typename T2> inline void read(T1&, T2&);
template <typename T1, typename T2, typename T3> inline void read(T1&, T2&, T3&);
template <typename T1, typename T2, typename T3, typename T4> inline void read(T1&, T2&, T3&, T4&);

inline void read(string &s) {
	static char buf[int(1e6) + 10];
	assert(scanf("%s", buf) == 1);
	s = string(buf);
	return;
}

const int INF = (int)(1e9);
const li INF64 = (li)(INF)* (li)(INF);
const ld eps = 1e-9;
const ld pi = ld(3.1415926535897932384626433832795);

inline bool in(int i, int j, int n, int m) {
    return i >= 1 && i <= n && j >= 1 && j <= m;
}

inline int myrand() {
    return (rand() ^ (rand() << 15));
}

inline li randL() {
    return myrand() * 1LL * myrand() + myrand();
}

const int dx[] = { 0, -1, 1, 0 };
const int dy[] = { -1, 0, 0, 1 };

const int N = 1111;

int x1, y1, x2, y2;

inline void gen() {
    return;
}

inline bool read() {
	cin >> x1 >> y1 >> x2 >> y2;
    return true;
}

li c[N][N];

inline void calcC() {
	c[0][0] = 1;
	for(int i = 1; i < N; i++) {
		c[i][0] = c[i][i] = 1;
		for(int j = 1; j < i; j++) c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
	}

	return;
}

int cntY(int x, int y1, int y2) {
	if(x & 1) {
		if(y2 & 1) y2++;
		if(y1 & 1) y1--;
		if(y1 == y2) return 1;
		return max(0, (y2 - y1) / 2);
	} else {
		if((y2 & 1) == 0) y2--;
		if((y1 & 1) == 0) y1++;
		if(y1 == y2) return 0;
		return max((y2 - y1) / 2, 0);
	}
}

inline void solve() {
	calcC();
	x1 += INF + 10, x2 += INF + 10, y1 += INF + 10, y2 += INF + 10;
	int c1 = cntY(x1, y1, y2);
	if(x1 == x2) {
		cout << c1 << endl;
		return;
	}

	int c2 = cntY(x1 + 1, y1, y2);
	cerr << "c1 c2 == " << c1 << ' ' << c2 << endl;
	int cnt = (x2 - x1 + 1);
	int cnt1 = (cnt + 1) / 2, cnt2 = cnt - cnt1;
	cerr << "cnts == " << cnt1 << ' ' << cnt2 << endl;
	li ans = c1 * 1LL * cnt1 + c2 * 1LL * cnt2;
	cout << ans << endl;
	return;
}

int main() {
#ifdef _DEBUG
    assert(freopen("input.txt", "rt", stdin));
    assert(freopen("output.txt", "wt", stdout));
#else
#endif

    cout << setprecision(10) << fixed;
    cerr << setprecision(10) << fixed;

    srand(int(time(NULL)));

    int T = 1;
    //assert(scanf("%d", &T) == 1);

    forn(i, T) {
		//cerr << "TEST == " << i + 1 << endl;
        assert(read());
        solve();
    }

#ifdef _DEBUG
    cerr << "TIME == " << clock() << " ms" << endl;
#endif
    return 0;
}