#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define int long long
#define Ali ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)

const int N = 5e5 + 7;
const int MOD = 1e9 + 7;
int t[N][23], a[N], p[N][23];

void build(int v, int l, int r, int bit){
	if (l == r){
		t[v][bit] = (a[l] >> bit) & 1;
		return;
	}
	int mid = (l + r) / 2;
	build(v * 2, l, mid, bit);
	build(v * 2 + 1, mid + 1, r, bit);
	t[v][bit] = t[v * 2][bit] + t[v * 2 + 1][bit];
}

void push(int v, int l, int r, int bit){
	if (p[v][bit] && l != r){
		int mid = (r + l) / 2;
		p[v * 2][bit] ^= 1;
		p[v * 2 + 1][bit] ^= 1;
		t[v * 2][bit] = mid - l + 1 - t[v * 2][bit];
		t[v * 2 + 1][bit] = r - mid - t[v * 2 + 1][bit];
		p[v][bit] = 0;
	}
}

void upd(int v, int l, int r, int tl, int tr, int bit){
	if (l > tr || r < tl) return;
	if (tl <= l && r <= tr){
		t[v][bit] = r - l + 1 - t[v][bit];
		p[v][bit] ^= 1;
		return;
	}
	push(v, l, r, bit);
	int mid = (l + r) / 2;
	upd(v * 2, l, mid, tl, tr, bit);
	upd(v * 2 + 1, mid + 1, r, tl, tr, bit);
	t[v][bit] = t[v * 2][bit] + t[v * 2 + 1][bit];
}

int get(int v, int l, int r, int tl, int tr, int bit){
	push(v, l, r, bit);
	if (l > tr || r < tl) return 0;
	if (tl <= l && r <= tr) return t[v][bit];
	int mid = (r + l) / 2;
	return get(v * 2, l, mid, tl, tr, bit) + get(v * 2 + 1, mid + 1, r, tl, tr, bit);
}

void abb() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i){
		cin >> a[i];
	}for (int i = 0; i <= 20; ++i) build(1, 1, n, i);
	int q; cin >> q;
	for (int i = 1; i <= q; ++i){
		int type, l, r;
		cin >> type >> l >> r;
		if (type == 1){
			int sum = 0;
			for (int j = 0; j <= 20; ++j) sum += (get(1, 1, n, l, r, j) * (1ll << j));
			cout << sum << '\n';
		}else{
			int x; cin >> x;
			for (int j = 0; j <= 20; ++j){
				if (x & (1ll << j)) upd(1, 1, n, l, r, j);
			}
		}
	}
}
signed main(){
    Ali;
    int T = 1;
//    cin >> T;
    while(T--){
        abb();
    }
}