#include <bits/stdc++.h>   using namespace std;   const long long INF = 1e9 + 7;   const int N = 4e5 + 10;   const int M = 22;   class SegmentTree {    public:     int ql, qr, qx;     int xorv[N];     int sumv[N];     void init() {       memset((xorv), (0), sizeof(xorv));       memset((sumv), (0), sizeof(sumv));     }     void set(int ql, int qr, int qx) {       this->ql = ql;       this->qr = qr;       this->qx = qx;     }     void pushdown(int o, int len) {       if (xorv[o]) {         xorv[o << 1] ^= 1;         xorv[o << 1 | 1] ^= 1;         sumv[o << 1] = (len - len / 2) - sumv[o << 1];         sumv[o << 1 | 1] = len / 2 - sumv[o << 1 | 1];         xorv[o] = 0;       }     }     void maintain(int o) { sumv[o] = sumv[o << 1] + sumv[o << 1 | 1]; }     int query(int l, int r, int o = 1) {       if (ql <= l && qr >= r) {         return sumv[o];       }       int mid = (l + r) >> 1;       pushdown(o, r - l + 1);       int ans = 0;       if (ql <= mid) ans += query(l, mid, o << 1);       if (qr > mid) ans += query(mid + 1, r, o << 1 | 1);       return ans;     }     void update(int l, int r, int o = 1) {       if (ql <= l && qr >= r) {         xorv[o] ^= 1;         sumv[o] = r - l + 1 - sumv[o];         return;       }       int mid = (l + r) >> 1;       pushdown(o, r - l + 1);       if (ql <= mid) update(l, mid, o << 1);       if (qr > mid) update(mid + 1, r, o << 1 | 1);       maintain(o);     }   } st[M];   int main() {     for (int i = 0; i < M; i++) st[i].init();     int n;     cin >> n;     for (int i = 1; i <= n; i++) {       int x;       cin >> x;       for (int j = 0; j < M; j++) {         if (x >> j & 1) st[j].set(i, i, 1), st[j].update(1, n);       }     }     int q;     cin >> q;     while (q--) {       int op;       cin >> op;       if (op == 1) {         int l, r;         cin >> l >> r;         long long ans = 0;         for (int i = 0; i < M; i++) {           st[i].set(l, r, 0);           ans += (1LL << i) * st[i].query(1, n);         }         cout << ans <<   n ;       } else {         int l, r, x;         cin >> l >> r >> x;         for (int i = 0; i < M; i++) {           if (x >> i & 1) st[i].set(l, r, 1), st[i].update(1, n);         }       }     }     return 0;   }   