1// #include <stdio.h>
2int d, z, C, h, P, K, ac, q, G, v, Q, R, D, L, W, M;
3
4void E(int e) {
5    *(char*) D++ = e;
6}
7
8void o() {
9    if (L) {
10        h = *(char*) L++;
11        if (h == 2) {
12            L = 0;
13            h = W;
14        }
15    } else
16        h = fgetc(Q);
17}
18
19int X() {
20    return isalnum(h) | h == 95;
21}
22
23void Y() {
24    if (h == 92) {
25        o();
26        if (h == 110)
27            h = 10;
28    }
29}
30
31void ad() {
32    int e, j, m;
33    while (isspace(h) | h == 35) {
34        if (h == 35) {
35            o();
36            ad();
37            if (d == 536) {
38                ad();
39                E(32);
40                *(int*) d = 1;
41                *(int*) (d + 4) = D;
42            }
43            while (h != 10) {
44                E(h);
45                o();
46            }
47            E(h);
48            E(2);
49        }
50        o();
51    }
52    C = 0;
53    d = h;
54    if (X()) {
55        E(32);
56        M = D;
57        while (X()) {
58            E(h);
59            o();
60        }
61        if (isdigit(d)) {
62            z = strtol(M, 0, 0);
63            d = 2;
64        } else {
65            *(char*) D = 32;
66            d = strstr(R, M - 1) - R;
67            *(char*) D = 0;
68            d = d * 8 + 256;
69            if (d > 536) {
70                d = P + d;
71                if (*(int*) d == 1) {
72                    L = *(int*) (d + 4);
73                    W = h;
74                    o();
75                    ad();
76                }
77            }
78        }
79    } else {
80        o();
81        if (d == 39) {
82            d = 2;
83            Y();
84            z = h;
85            o();
86            o();
87        } else if (d == 47 & h == 42) {
88            o();
89            while (h) {
90                while (h != 42)
91                    o();
92                o();
93                if (h == 47)
94                    h = 0;
95            }
96            o();
97            ad();
98        } else {
99            e
100                    = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
101            while (j = *(char*) e++) {
102                m = *(char*) e++;
103                z = 0;
104                while ((C = *(char*) e++ - 98) < 0)
105                    z = z * 64 + C + 64;
106                if (j == d & (m == h | m == 64)) {
107                    if (m == h) {
108                        o();
109                        d = 1;
110                    }
111                    break;
112                }
113            }
114        }
115    }
116}
117
118void ae(int g) {
119    while( g&&g!=-1) {
120        *(char*) q++=g;
121        g=g>>8;
122    }
123}
124
125void A(int e) {
126    int g;
127    while( e) {
128        g=*(int*) e;
129        *(int*) e=q-e-4;
130        e=g;
131    }
132}
133
134int s(int g, int e) {
135    ae(g);
136    *(int*) q = e;
137    e = q;
138    q = q + 4;
139    return e;
140}
141
142void H(int e) {
143    s(184,e);
144}
145
146int B(int e) {
147    return s(233,e);
148}
149
150int S(int j, int e) {
151    ae(1032325);
152    return s(132 + j, e);
153}
154
155void Z(int e) {
156    ae( 49465);
157    H(0);
158    ae( 15);
159    ae( e+144);
160    ae( 192);
161}
162
163void N(int j, int e) {
164    ae(j + 131);
165    s((e > -512 && e < 512) << 7 | 5, e);
166}
167
168void T (int j) {
169    int g,e,m,aa;
170    g=1;
171    if( d == 34) {
172        H(v);
173        while( h!=34) {
174            Y ();
175            *(char*) v++=h;
176            o ();
177        }
178        *(char*) v=0;
179        v=v +4&-4;
180        o ();
181        ad();
182    }
183    else {
184        aa=C;
185        m= z;
186        e=d;
187        ad();
188        if( e == 2) {
189            H(m);
190        }
191        else if( aa == 2) {
192            T(0);
193            s(185,0);
194            if( e == 33)Z(m);
195            else ae( m);
196        }
197        else if( e == 40) {
198            w ();
199            ad();
200        }
201        else if( e == 42) {
202            ad();
203            e=d;
204            ad();
205            ad();
206            if( d == 42) {
207                ad();
208                ad();
209                ad();
210                ad();
211                e=0;
212            }
213            ad();
214            T(0);
215            if( d == 61) {
216                ad();
217                ae( 80);
218                w ();
219                ae( 89);
220                ae( 392+(e == 256));
221            }
222            else if( e) {
223                if( e == 256)ae( 139);
224                else ae( 48655);
225                q++;
226            }
227        }
228        else if( e == 38) {
229            N(10,*(int*) d);
230            ad();
231        }
232        else {
233            g=*(int*) e;
234            if(!g)g=dlsym(0,M);
235            if( d == 61&j) {
236                ad();
237                w ();
238                N(6,g);
239            }
240            else if( d!= 40) {
241                N(8,g);
242                if( C == 11) {
243                    N(0,g);
244                    ae( z);
245                    ad();
246                }
247            }
248        }
249    }
250    if( d == 40) {
251        if( g == 1)ae( 80);
252        m= s(60545,0);
253        ad();
254        j=0;
255        while( d!= 41) {
256            w ();
257            s(2393225,j);
258            if( d == 44)ad();
259            j=j +4;
260        }
261        *(int*) m= j;
262        ad();
263        if(!g) {
264            e=e +4;
265            *(int*) e=s(232,*(int*) e);
266        }
267        else if( g == 1) {
268            s(2397439,j);
269            j=j +4;
270        }
271        else {
272            s(232,g-q-5);
273        }
274        if( j)s(50305,j);
275    }
276}
277
278void O (int j) {
279    int e,g,m;
280    if( j--== 1)T(1);
281    else {
282        O (j);
283        m= 0;
284        while( j == C) {
285            g=d;
286            e=z;
287            ad();
288            if( j>8) {
289                m= S(e,m);
290                O (j);
291            }
292            else {
293                ae( 80);
294                O (j);
295                ae( 89);
296                if( j == 4|j == 5) {
297                    Z(e);
298                }
299                else {
300                    ae( e);
301                    if( g == 37)ae( 146);
302                }
303            }
304        }
305        if( m&&j>8) {
306            m= S(e,m);
307            H(e^1);
308            B(5);
309            A(m);
310            H(e);
311        }
312    }
313}
314
315void w() {
316    O(11);
317}
318
319int U() {
320    w();
321    return S(0, 0);
322}
323
324void I (int j) {
325    int m,g,e;
326    if( d == 288) {
327        ad();
328        ad();
329        m= U ();
330        ad();
331        I (j);
332        if( d == 312) {
333            ad();
334            g=B(0);
335            A(m);
336            I (j);
337            A(g);
338        }
339        else {
340            A(m);
341        }
342    }
343    else if( d == 352|d == 504) {
344        e=d;
345        ad();
346        ad();
347        if( e == 352) {
348            g=q;
349            m= U ();
350        }
351        else {
352            if( d!= 59)w ();
353            ad();
354            g=q;
355            m= 0;
356            if( d!= 59)m= U ();
357            ad();
358            if( d!= 41) {
359                e=B(0);
360                w ();
361                B(g-q-5);
362                A(e);
363                g=e +4;
364            }
365        }
366        ad();
367        I(&m);
368        B(g-q-5);
369        A(m);
370    }
371    else if( d == 123) {
372        ad();
373        ab(1);
374        while( d!= 125)I (j);
375        ad();
376    }
377    else {
378        if( d == 448) {
379            ad();
380            if( d!= 59)w ();
381            K=B(K);
382        }
383        else if( d == 400) {
384            ad();
385            *(int*) j=B(*(int*) j);
386        }
387        else if( d!= 59)w ();
388        ad();
389    }
390}
391
392void ab (int j) {
393    int m;
394    while( d == 256|d!=-1&!j) {
395        if( d == 256) {
396            ad();
397            while( d!= 59) {
398                if( j) {
399                    G=G +4;
400                    *(int*) d=-G;
401                }
402                else {
403                    *(int*) d=v;
404                    v=v +4;
405                }
406                ad();
407                if( d == 44)ad()	;
408            }
409            ad();
410        }
411        else {
412            A(*(int*)(d +4));
413            *(int*) d=q;
414            ad();
415            ad();
416            m= 8;
417            while( d!= 41) {
418                *(int*) d=m;
419                m= m +4;
420                ad();
421                if( d == 44)ad();
422            }
423            ad();
424            K=G=0;
425            ae( 15042901);
426            m= s(60545,0);
427            I(0);
428            A(K);
429            ae( 50121);
430            *(int*) m= G;
431        }
432    }
433}
434
435int run(int g, int e) {
436    return (*(int(*)()) *(int*) (P + 592))(g, e);
437}
438
439int main(int g, int e) {
440    int result;
441    Q = stdin;
442    if (g-- > 1) {
443        e = e + 4;
444        Q = fopen(*(int*) e, "r");
445        if (!Q) {
446            fprintf(stderr, "otcc-ansi.c: could not open file %s\n", *(int*) e);
447            return -2;
448        }
449    }
450    D = strcpy(R = calloc(1, 99999), " int if else while break return for define main ") + 48;
451    v = calloc(1, 99999);
452    q = ac = calloc(1, 99999);
453    P = calloc(1, 99999);
454    o();
455    ad();
456    ab(0);
457    if (mprotect(ac & (~ 4095), (99999 + 4095) & (~ 4095), 7)) {
458        printf("Mprotect failed. %d\n", errno);
459        return -1;
460    }
461    fprintf(stderr, "otcc-ansi.c: About to execute compiled code:\n");
462    result = run(g, e);
463    fprintf(stderr, "atcc-ansi.c: result: %d\n", result);
464    return result;
465}
466
467