/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class SyncTask {
static final byte[] PADDING
= new byte[]{Byte.
MIN_VALUE,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0,
(byte) 0}; static final int S11 = 7;
static final int S12 = 12;
static final int S13 = 17;
static final int S14 = 22;
static final int S21 = 5;
static final int S22 = 9;
static final int S23 = 14;
static final int S24 = 20;
static final int S31 = 4;
static final int S32 = 11;
static final int S33 = 16;
static final int S34 = 23;
static final int S41 = 6;
static final int S42 = 10;
static final int S43 = 15;
static final int S44 = 21;
private byte[] buffer = new byte[64];
private long[] count = new long[2];
private byte[] digest = new byte[16];
private long[] state = new long[4];
syncinit();
syncupdate(inbuf.getBytes(), inbuf.length());
syncfinal();
this.digestHexStr = "";
for (int i = 0; i < 16; i++) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(this.digestHexStr);
stringBuilder.append(byteHEX(this.digest[i]));
this.digestHexStr = stringBuilder.toString();
}
return this.digestHexStr;
}
public void compute() {
syncinit();
}
private void syncinit() {
this.count[0] = 0;
this.count[1] = 0;
this.state[0] = 1665475329;
this.state[1] = 4023233417L;
this.state[2] = 2561989886L;
this.state[3] = 271733878;
}
/* renamed from: F */
private long m3F(long x, long y, long z) {
return (x & y) | ((x ^ -1) & z);
}
/* renamed from: G */
private long m4G(long x, long y, long z) {
return (x & z) | (y & (z ^ -1));
}
/* renamed from: H */
private long m5H(long x, long y, long z) {
return (x ^ y) ^ z;
}
/* renamed from: I */
private long m6I(long x, long y, long z) {
return y ^ (x | (z ^ -1));
}
private long FF(long a, long b, long c, long d, long x, long s, long ac) {
long j = s;
long a2 = a + ((m3F(b, c, d) + x) + ac);
return ((long) ((((int) a2) << ((int) j)) | (((int) a2) >>> ((int) (32 - j))))) + b;
}
private long GG(long a, long b, long c, long d, long x, long s, long ac) {
long j = s;
long a2 = a + ((m4G(b, c, d) + x) + ac);
return ((long) ((((int) a2) << ((int) j)) | (((int) a2) >>> ((int) (32 - j))))) + b;
}
private long HH(long a, long b, long c, long d, long x, long s, long ac) {
long j = s;
long a2 = a + ((m5H(b, c, d) + x) + ac);
return ((long) ((((int) a2) << ((int) j)) | (((int) a2) >>> ((int) (32 - j))))) + b;
}
private long II(long a, long b, long c, long d, long x, long s, long ac) {
long j = s;
long a2 = a + ((m6I(b, c, d) + x) + ac);
return ((long) ((((int) a2) << ((int) j)) | (((int) a2) >>> ((int) (32 - j))))) + b;
}
private void syncupdate(byte[] inbuf, int inputLen) {
int i;
int i2 = inputLen;
byte[] block = new byte[64];
int index = ((int) (this.count[0] >>> 3)) & 63;
long[] jArr = this.count;
long j = jArr[0] + ((long) (i2 << 3));
jArr[0] = j;
if (j < ((long) (i2 << 3))) {
jArr = this.count;
jArr[1] = jArr[1] + 1;
}
jArr = this.count;
jArr[1] = jArr[1] + ((long) (i2 >>> 29));
int partLen = 64 - index;
if (i2 >= partLen) {
syncMemcopy(this.buffer, inbuf, index, 0, partLen);
syncTransform(this.buffer);
int i3 = partLen;
while (true) {
i = i3;
if (i + 63 >= i2) {
break;
}
syncMemcopy(block, inbuf, 0, i, 64);
syncTransform(block);
i3 = i + 64;
}
index = 0;
} else {
i = 0;
}
syncMemcopy(this.buffer, inbuf, index, i, i2 - i);
}
private void syncfinal() {
byte[] bits = new byte[8];
Encode(bits, this.count, 8);
int index = ((int) (this.count[0] >>> 3)) & 63;
syncupdate(PADDING, index < 56 ? 56 - index : 120 - index);
syncupdate(bits, 8);
Encode(this.digest, this.state, 16);
}
private void syncMemcopy(byte[] output, byte[] input, int outpos, int inpos, int len) {
for (int i = 0; i < len; i++) {
output[outpos + i] = input[inpos + i];
}
}
private void syncTransform(byte[] block) {
long a = this.state[0];
long b = this.state[1];
long c = this.state[2];
long d = this.state[3];
long[] x = new long[16];
Decode(x, block, 64);
long[] x2 = x;
a = FF(a, b, c, d, x[0], 7, 3614090360L);
d = FF(d, a, b, c, x2[1], 12, 3905402710L);
c = FF(c, d, a, b, x2[2], 17, 606105819);
b = FF(b, c, d, a, x2[3], 22, 3250441966L);
a = FF(a, b, c, d, x2[4], 7, 4118548399L);
d = FF(d, a, b, c, x2[5], 12, 1200080426);
c = FF(c, d, a, b, x2[6], 17, 2821735955L);
b = FF(b, c, d, a, x2[7], 22, 4249261313L);
a = FF(a, b, c, d, x2[8], 7, 1770035416);
d = FF(d, a, b, c, x2[9], 12, 2336552879L);
c = FF(c, d, a, b, x2[10], 17, 4294925233L);
b = FF(b, c, d, a, x2[11], 22, 2304563134L);
a = FF(a, b, c, d, x2[12], 7, 1804603682);
d = FF(d, a, b, c, x2[13], 12, 4254626195L);
c = FF(c, d, a, b, x2[14], 17, 2792965006L);
b = FF(b, c, d, a, x2[15], 22, 1236535329);
a = GG(a, b, c, d, x2[1], 5, 4129170786L);
d = GG(d, a, b, c, x2[6], 9, 3225465664L);
c = GG(c, d, a, b, x2[11], 14, 643717713);
b = GG(b, c, d, a, x2[0], 20, 3921069994L);
a = GG(a, b, c, d, x2[5], 5, 3593408605L);
d = GG(d, a, b, c, x2[10], 9, 38016083);
c = GG(c, d, a, b, x2[15], 14, 3634488961L);
b = GG(b, c, d, a, x2[4], 20, 3889429448L);
a = GG(a, b, c, d, x2[9], 5, 568446438);
d = GG(d, a, b, c, x2[14], 9, 3275163606L);
c = GG(c, d, a, b, x2[3], 14, 4107603335L);
b = GG(b, c, d, a, x2[8], 20, 1163531501);
a = GG(a, b, c, d, x2[13], 5, 2850285829L);
d = GG(d, a, b, c, x2[2], 9, 4243563512L);
c = GG(c, d, a, b, x2[7], 14, 1735328473);
b = GG(b, c, d, a, x2[12], 20, 2368359562L);
a = HH(a, b, c, d, x2[5], 4, 4294588738L);
d = HH(d, a, b, c, x2[8], 11, 2272392833L);
c = HH(c, d, a, b, x2[11], 16, 1839030562);
b = HH(b, c, d, a, x2[14], 23, 4259657740L);
a = HH(a, b, c, d, x2[1], 4, 2763975236L);
d = HH(d, a, b, c, x2[4], 11, 1272893353);
c = HH(c, d, a, b, x2[7], 16, 4139469664L);
b = HH(b, c, d, a, x2[10], 23, 3200236656L);
a = HH(a, b, c, d, x2[13], 4, 681279174);
d = HH(d, a, b, c, x2[0], 11, 3936430074L);
c = HH(c, d, a, b, x2[3], 16, 3572445317L);
b = HH(b, c, d, a, x2[6], 23, 76029189);
a = HH(a, b, c, d, x2[9], 4, 3654602809L);
d = HH(d, a, b, c, x2[12], 11, 3873151461L);
c = HH(c, d, a, b, x2[15], 16, 530742520);
b = HH(b, c, d, a, x2[2], 23, 3299628645L);
a = II(a, b, c, d, x2[0], 6, 4096336452L);
d = II(d, a, b, c, x2[7], 10, 1126891415);
c = II(c, d, a, b, x2[14], 15, 2878612391L);
b = II(b, c, d, a, x2[5], 21, 4237533241L);
a = II(a, b, c, d, x2[12], 6, 1700485571);
d = II(d, a, b, c, x2[3], 10, 2399980690L);
c = II(c, d, a, b, x2[10], 15, 4293915773L);
b = II(b, c, d, a, x2[1], 21, 2240044497L);
a = II(a, b, c, d, x2[8], 6, 1873313359);
d = II(d, a, b, c, x2[15], 10, 4264355552L);
c = II(c, d, a, b, x2[6], 15, 2734768916L);
b = II(b, c, d, a, x2[13], 21, 1309151649);
a = II(a, b, c, d, x2[4], 6, 4149444226L);
d = II(d, a, b, c, x2[11], 10, 3174756917L);
c = II(c, d, a, b, x2[2], 15, 718787259);
long b2 = II(b, c, d, a, x2[9], 21, 3951481745L);
long[] jArr = this.state;
jArr[0] = jArr[0] + a;
jArr = this.state;
jArr[1] = jArr[1] + b2;
jArr = this.state;
jArr[2] = jArr[2] + c;
jArr = this.state;
jArr[3] = jArr[3] + d;
}
private void Encode(byte[] output, long[] input, int len) {
int i = 0;
for (int j = 0; j < len; j += 4) {
output[j] = (byte) ((int) (input[i] & 255));
output[j + 1] = (byte) ((int) ((input[i] >>> 8) & 255));
output[j + 2] = (byte) ((int) ((input[i] >>> 16) & 255));
output[j + 3] = (byte) ((int) ((input[i] >>> 24) & 255));
i++;
}
}
private void Decode(long[] output, byte[] input, int len) {
int i = 0;
for (int j = 0; j < len; j += 4) {
output[i] = ((b2iu(input[j]) | (b2iu(input[j + 1]) << 8)) | (b2iu(input[j + 2]) << 16)) | (b2iu(input[j + 3]) << 24);
i++;
}
}
public static long b2iu(byte b) {
return b < (byte) 0 ? (long) (b & 255) : (long) b;
}
public static String byteHEX
(byte ib
) { char[] Digit = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
return new String(new char[]{Digit
[(ib
>>> 4) & 15], Digit
[ib
& 15]}); }
public static boolean syncNow2() {
return true;
}
public static void main
(String[] args
) { System.
out.
println(new SyncTask
().
sync("048181227f19").
substring(0,
8).
toLowerCase()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBTeW5jVGFzayB7CiAgICBzdGF0aWMgZmluYWwgYnl0ZVtdIFBBRERJTkcgPSBuZXcgYnl0ZVtde0J5dGUuTUlOX1ZBTFVFLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwLCAoYnl0ZSkgMCwgKGJ5dGUpIDAsIChieXRlKSAwfTsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzExID0gNzsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzEyID0gMTI7CiAgICBzdGF0aWMgZmluYWwgaW50IFMxMyA9IDE3OwogICAgc3RhdGljIGZpbmFsIGludCBTMTQgPSAyMjsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzIxID0gNTsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzIyID0gOTsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzIzID0gMTQ7CiAgICBzdGF0aWMgZmluYWwgaW50IFMyNCA9IDIwOwogICAgc3RhdGljIGZpbmFsIGludCBTMzEgPSA0OwogICAgc3RhdGljIGZpbmFsIGludCBTMzIgPSAxMTsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzMzID0gMTY7CiAgICBzdGF0aWMgZmluYWwgaW50IFMzNCA9IDIzOwogICAgc3RhdGljIGZpbmFsIGludCBTNDEgPSA2OwogICAgc3RhdGljIGZpbmFsIGludCBTNDIgPSAxMDsKICAgIHN0YXRpYyBmaW5hbCBpbnQgUzQzID0gMTU7CiAgICBzdGF0aWMgZmluYWwgaW50IFM0NCA9IDIxOwogICAgcHJpdmF0ZSBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbNjRdOwogICAgcHJpdmF0ZSBsb25nW10gY291bnQgPSBuZXcgbG9uZ1syXTsKICAgIHByaXZhdGUgYnl0ZVtdIGRpZ2VzdCA9IG5ldyBieXRlWzE2XTsKICAgIHB1YmxpYyBTdHJpbmcgZGlnZXN0SGV4U3RyOwogICAgcHJpdmF0ZSBsb25nW10gc3RhdGUgPSBuZXcgbG9uZ1s0XTsKCiAgICBwdWJsaWMgU3RyaW5nIHN5bmMoU3RyaW5nIGluYnVmKSB7CiAgICAgICAgc3luY2luaXQoKTsKICAgICAgICBzeW5jdXBkYXRlKGluYnVmLmdldEJ5dGVzKCksIGluYnVmLmxlbmd0aCgpKTsKICAgICAgICBzeW5jZmluYWwoKTsKICAgICAgICB0aGlzLmRpZ2VzdEhleFN0ciA9ICIiOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0aGlzLmRpZ2VzdEhleFN0cik7CiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJ5dGVIRVgodGhpcy5kaWdlc3RbaV0pKTsKICAgICAgICAgICAgdGhpcy5kaWdlc3RIZXhTdHIgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEhleFN0cjsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBjb21wdXRlKCkgewogICAgICAgIHN5bmNpbml0KCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHN5bmNpbml0KCkgewogICAgICAgIHRoaXMuY291bnRbMF0gPSAwOwogICAgICAgIHRoaXMuY291bnRbMV0gPSAwOwogICAgICAgIHRoaXMuc3RhdGVbMF0gPSAxNjY1NDc1MzI5OwogICAgICAgIHRoaXMuc3RhdGVbMV0gPSA0MDIzMjMzNDE3TDsKICAgICAgICB0aGlzLnN0YXRlWzJdID0gMjU2MTk4OTg4Nkw7CiAgICAgICAgdGhpcy5zdGF0ZVszXSA9IDI3MTczMzg3ODsKICAgIH0KCiAgICAvKiByZW5hbWVkIGZyb206IEYgKi8KICAgIHByaXZhdGUgbG9uZyBtM0YobG9uZyB4LCBsb25nIHksIGxvbmcgeikgewogICAgICAgIHJldHVybiAoeCAmIHkpIHwgKCh4IF4gLTEpICYgeik7CiAgICB9CgogICAgLyogcmVuYW1lZCBmcm9tOiBHICovCiAgICBwcml2YXRlIGxvbmcgbTRHKGxvbmcgeCwgbG9uZyB5LCBsb25nIHopIHsKICAgICAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKHogXiAtMSkpOwogICAgfQoKICAgIC8qIHJlbmFtZWQgZnJvbTogSCAqLwogICAgcHJpdmF0ZSBsb25nIG01SChsb25nIHgsIGxvbmcgeSwgbG9uZyB6KSB7CiAgICAgICAgcmV0dXJuICh4IF4geSkgXiB6OwogICAgfQoKICAgIC8qIHJlbmFtZWQgZnJvbTogSSAqLwogICAgcHJpdmF0ZSBsb25nIG02SShsb25nIHgsIGxvbmcgeSwgbG9uZyB6KSB7CiAgICAgICAgcmV0dXJuIHkgXiAoeCB8ICh6IF4gLTEpKTsKICAgIH0KCiAgICBwcml2YXRlIGxvbmcgRkYobG9uZyBhLCBsb25nIGIsIGxvbmcgYywgbG9uZyBkLCBsb25nIHgsIGxvbmcgcywgbG9uZyBhYykgewogICAgICAgIGxvbmcgaiA9IHM7CiAgICAgICAgbG9uZyBhMiA9IGEgKyAoKG0zRihiLCBjLCBkKSArIHgpICsgYWMpOwogICAgICAgIHJldHVybiAoKGxvbmcpICgoKChpbnQpIGEyKSA8PCAoKGludCkgaikpIHwgKCgoaW50KSBhMikgPj4+ICgoaW50KSAoMzIgLSBqKSkpKSkgKyBiOwogICAgfQoKICAgIHByaXZhdGUgbG9uZyBHRyhsb25nIGEsIGxvbmcgYiwgbG9uZyBjLCBsb25nIGQsIGxvbmcgeCwgbG9uZyBzLCBsb25nIGFjKSB7CiAgICAgICAgbG9uZyBqID0gczsKICAgICAgICBsb25nIGEyID0gYSArICgobTRHKGIsIGMsIGQpICsgeCkgKyBhYyk7CiAgICAgICAgcmV0dXJuICgobG9uZykgKCgoKGludCkgYTIpIDw8ICgoaW50KSBqKSkgfCAoKChpbnQpIGEyKSA+Pj4gKChpbnQpICgzMiAtIGopKSkpKSArIGI7CiAgICB9CgogICAgcHJpdmF0ZSBsb25nIEhIKGxvbmcgYSwgbG9uZyBiLCBsb25nIGMsIGxvbmcgZCwgbG9uZyB4LCBsb25nIHMsIGxvbmcgYWMpIHsKICAgICAgICBsb25nIGogPSBzOwogICAgICAgIGxvbmcgYTIgPSBhICsgKChtNUgoYiwgYywgZCkgKyB4KSArIGFjKTsKICAgICAgICByZXR1cm4gKChsb25nKSAoKCgoaW50KSBhMikgPDwgKChpbnQpIGopKSB8ICgoKGludCkgYTIpID4+PiAoKGludCkgKDMyIC0gaikpKSkpICsgYjsKICAgIH0KCiAgICBwcml2YXRlIGxvbmcgSUkobG9uZyBhLCBsb25nIGIsIGxvbmcgYywgbG9uZyBkLCBsb25nIHgsIGxvbmcgcywgbG9uZyBhYykgewogICAgICAgIGxvbmcgaiA9IHM7CiAgICAgICAgbG9uZyBhMiA9IGEgKyAoKG02SShiLCBjLCBkKSArIHgpICsgYWMpOwogICAgICAgIHJldHVybiAoKGxvbmcpICgoKChpbnQpIGEyKSA8PCAoKGludCkgaikpIHwgKCgoaW50KSBhMikgPj4+ICgoaW50KSAoMzIgLSBqKSkpKSkgKyBiOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzeW5jdXBkYXRlKGJ5dGVbXSBpbmJ1ZiwgaW50IGlucHV0TGVuKSB7CiAgICAgICAgaW50IGk7CiAgICAgICAgaW50IGkyID0gaW5wdXRMZW47CiAgICAgICAgYnl0ZVtdIGJsb2NrID0gbmV3IGJ5dGVbNjRdOwogICAgICAgIGludCBpbmRleCA9ICgoaW50KSAodGhpcy5jb3VudFswXSA+Pj4gMykpICYgNjM7CiAgICAgICAgbG9uZ1tdIGpBcnIgPSB0aGlzLmNvdW50OwogICAgICAgIGxvbmcgaiA9IGpBcnJbMF0gKyAoKGxvbmcpIChpMiA8PCAzKSk7CiAgICAgICAgakFyclswXSA9IGo7CiAgICAgICAgaWYgKGogPCAoKGxvbmcpIChpMiA8PCAzKSkpIHsKICAgICAgICAgICAgakFyciA9IHRoaXMuY291bnQ7CiAgICAgICAgICAgIGpBcnJbMV0gPSBqQXJyWzFdICsgMTsKICAgICAgICB9CiAgICAgICAgakFyciA9IHRoaXMuY291bnQ7CiAgICAgICAgakFyclsxXSA9IGpBcnJbMV0gKyAoKGxvbmcpIChpMiA+Pj4gMjkpKTsKICAgICAgICBpbnQgcGFydExlbiA9IDY0IC0gaW5kZXg7CiAgICAgICAgaWYgKGkyID49IHBhcnRMZW4pIHsKICAgICAgICAgICAgc3luY01lbWNvcHkodGhpcy5idWZmZXIsIGluYnVmLCBpbmRleCwgMCwgcGFydExlbik7CiAgICAgICAgICAgIHN5bmNUcmFuc2Zvcm0odGhpcy5idWZmZXIpOwogICAgICAgICAgICBpbnQgaTMgPSBwYXJ0TGVuOwogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgaSA9IGkzOwogICAgICAgICAgICAgICAgaWYgKGkgKyA2MyA+PSBpMikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3luY01lbWNvcHkoYmxvY2ssIGluYnVmLCAwLCBpLCA2NCk7CiAgICAgICAgICAgICAgICBzeW5jVHJhbnNmb3JtKGJsb2NrKTsKICAgICAgICAgICAgICAgIGkzID0gaSArIDY0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluZGV4ID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpID0gMDsKICAgICAgICB9CiAgICAgICAgc3luY01lbWNvcHkodGhpcy5idWZmZXIsIGluYnVmLCBpbmRleCwgaSwgaTIgLSBpKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc3luY2ZpbmFsKCkgewogICAgICAgIGJ5dGVbXSBiaXRzID0gbmV3IGJ5dGVbOF07CiAgICAgICAgRW5jb2RlKGJpdHMsIHRoaXMuY291bnQsIDgpOwogICAgICAgIGludCBpbmRleCA9ICgoaW50KSAodGhpcy5jb3VudFswXSA+Pj4gMykpICYgNjM7CiAgICAgICAgc3luY3VwZGF0ZShQQURESU5HLCBpbmRleCA8IDU2ID8gNTYgLSBpbmRleCA6IDEyMCAtIGluZGV4KTsKICAgICAgICBzeW5jdXBkYXRlKGJpdHMsIDgpOwogICAgICAgIEVuY29kZSh0aGlzLmRpZ2VzdCwgdGhpcy5zdGF0ZSwgMTYpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzeW5jTWVtY29weShieXRlW10gb3V0cHV0LCBieXRlW10gaW5wdXQsIGludCBvdXRwb3MsIGludCBpbnBvcywgaW50IGxlbikgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgb3V0cHV0W291dHBvcyArIGldID0gaW5wdXRbaW5wb3MgKyBpXTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHN5bmNUcmFuc2Zvcm0oYnl0ZVtdIGJsb2NrKSB7CiAgICAgICAgbG9uZyBhID0gdGhpcy5zdGF0ZVswXTsKICAgICAgICBsb25nIGIgPSB0aGlzLnN0YXRlWzFdOwogICAgICAgIGxvbmcgYyA9IHRoaXMuc3RhdGVbMl07CiAgICAgICAgbG9uZyBkID0gdGhpcy5zdGF0ZVszXTsKICAgICAgICBsb25nW10geCA9IG5ldyBsb25nWzE2XTsKICAgICAgICBEZWNvZGUoeCwgYmxvY2ssIDY0KTsKICAgICAgICBsb25nW10geDIgPSB4OwogICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCB4WzBdLCA3LCAzNjE0MDkwMzYwTCk7CiAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIHgyWzFdLCAxMiwgMzkwNTQwMjcxMEwpOwogICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCB4MlsyXSwgMTcsIDYwNjEwNTgxOSk7CiAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIHgyWzNdLCAyMiwgMzI1MDQ0MTk2NkwpOwogICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCB4Mls0XSwgNywgNDExODU0ODM5OUwpOwogICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCB4Mls1XSwgMTIsIDEyMDAwODA0MjYpOwogICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCB4Mls2XSwgMTcsIDI4MjE3MzU5NTVMKTsKICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgeDJbN10sIDIyLCA0MjQ5MjYxMzEzTCk7CiAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIHgyWzhdLCA3LCAxNzcwMDM1NDE2KTsKICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgeDJbOV0sIDEyLCAyMzM2NTUyODc5TCk7CiAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIHgyWzEwXSwgMTcsIDQyOTQ5MjUyMzNMKTsKICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgeDJbMTFdLCAyMiwgMjMwNDU2MzEzNEwpOwogICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCB4MlsxMl0sIDcsIDE4MDQ2MDM2ODIpOwogICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCB4MlsxM10sIDEyLCA0MjU0NjI2MTk1TCk7CiAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIHgyWzE0XSwgMTcsIDI3OTI5NjUwMDZMKTsKICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgeDJbMTVdLCAyMiwgMTIzNjUzNTMyOSk7CiAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIHgyWzFdLCA1LCA0MTI5MTcwNzg2TCk7CiAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIHgyWzZdLCA5LCAzMjI1NDY1NjY0TCk7CiAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIHgyWzExXSwgMTQsIDY0MzcxNzcxMyk7CiAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIHgyWzBdLCAyMCwgMzkyMTA2OTk5NEwpOwogICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCB4Mls1XSwgNSwgMzU5MzQwODYwNUwpOwogICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCB4MlsxMF0sIDksIDM4MDE2MDgzKTsKICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgeDJbMTVdLCAxNCwgMzYzNDQ4ODk2MUwpOwogICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCB4Mls0XSwgMjAsIDM4ODk0Mjk0NDhMKTsKICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgeDJbOV0sIDUsIDU2ODQ0NjQzOCk7CiAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIHgyWzE0XSwgOSwgMzI3NTE2MzYwNkwpOwogICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCB4MlszXSwgMTQsIDQxMDc2MDMzMzVMKTsKICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgeDJbOF0sIDIwLCAxMTYzNTMxNTAxKTsKICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgeDJbMTNdLCA1LCAyODUwMjg1ODI5TCk7CiAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIHgyWzJdLCA5LCA0MjQzNTYzNTEyTCk7CiAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIHgyWzddLCAxNCwgMTczNTMyODQ3Myk7CiAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIHgyWzEyXSwgMjAsIDIzNjgzNTk1NjJMKTsKICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgeDJbNV0sIDQsIDQyOTQ1ODg3MzhMKTsKICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgeDJbOF0sIDExLCAyMjcyMzkyODMzTCk7CiAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIHgyWzExXSwgMTYsIDE4MzkwMzA1NjIpOwogICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCB4MlsxNF0sIDIzLCA0MjU5NjU3NzQwTCk7CiAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIHgyWzFdLCA0LCAyNzYzOTc1MjM2TCk7CiAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIHgyWzRdLCAxMSwgMTI3Mjg5MzM1Myk7CiAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIHgyWzddLCAxNiwgNDEzOTQ2OTY2NEwpOwogICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCB4MlsxMF0sIDIzLCAzMjAwMjM2NjU2TCk7CiAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIHgyWzEzXSwgNCwgNjgxMjc5MTc0KTsKICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgeDJbMF0sIDExLCAzOTM2NDMwMDc0TCk7CiAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIHgyWzNdLCAxNiwgMzU3MjQ0NTMxN0wpOwogICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCB4Mls2XSwgMjMsIDc2MDI5MTg5KTsKICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgeDJbOV0sIDQsIDM2NTQ2MDI4MDlMKTsKICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgeDJbMTJdLCAxMSwgMzg3MzE1MTQ2MUwpOwogICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCB4MlsxNV0sIDE2LCA1MzA3NDI1MjApOwogICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCB4MlsyXSwgMjMsIDMyOTk2Mjg2NDVMKTsKICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgeDJbMF0sIDYsIDQwOTYzMzY0NTJMKTsKICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgeDJbN10sIDEwLCAxMTI2ODkxNDE1KTsKICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgeDJbMTRdLCAxNSwgMjg3ODYxMjM5MUwpOwogICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCB4Mls1XSwgMjEsIDQyMzc1MzMyNDFMKTsKICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgeDJbMTJdLCA2LCAxNzAwNDg1NTcxKTsKICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgeDJbM10sIDEwLCAyMzk5OTgwNjkwTCk7CiAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIHgyWzEwXSwgMTUsIDQyOTM5MTU3NzNMKTsKICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgeDJbMV0sIDIxLCAyMjQwMDQ0NDk3TCk7CiAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIHgyWzhdLCA2LCAxODczMzEzMzU5KTsKICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgeDJbMTVdLCAxMCwgNDI2NDM1NTU1MkwpOwogICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCB4Mls2XSwgMTUsIDI3MzQ3Njg5MTZMKTsKICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgeDJbMTNdLCAyMSwgMTMwOTE1MTY0OSk7CiAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIHgyWzRdLCA2LCA0MTQ5NDQ0MjI2TCk7CiAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIHgyWzExXSwgMTAsIDMxNzQ3NTY5MTdMKTsKICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgeDJbMl0sIDE1LCA3MTg3ODcyNTkpOwogICAgICAgIGxvbmcgYjIgPSBJSShiLCBjLCBkLCBhLCB4Mls5XSwgMjEsIDM5NTE0ODE3NDVMKTsKICAgICAgICBsb25nW10gakFyciA9IHRoaXMuc3RhdGU7CiAgICAgICAgakFyclswXSA9IGpBcnJbMF0gKyBhOwogICAgICAgIGpBcnIgPSB0aGlzLnN0YXRlOwogICAgICAgIGpBcnJbMV0gPSBqQXJyWzFdICsgYjI7CiAgICAgICAgakFyciA9IHRoaXMuc3RhdGU7CiAgICAgICAgakFyclsyXSA9IGpBcnJbMl0gKyBjOwogICAgICAgIGpBcnIgPSB0aGlzLnN0YXRlOwogICAgICAgIGpBcnJbM10gPSBqQXJyWzNdICsgZDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgRW5jb2RlKGJ5dGVbXSBvdXRwdXQsIGxvbmdbXSBpbnB1dCwgaW50IGxlbikgewogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbjsgaiArPSA0KSB7CiAgICAgICAgICAgIG91dHB1dFtqXSA9IChieXRlKSAoKGludCkgKGlucHV0W2ldICYgMjU1KSk7CiAgICAgICAgICAgIG91dHB1dFtqICsgMV0gPSAoYnl0ZSkgKChpbnQpICgoaW5wdXRbaV0gPj4+IDgpICYgMjU1KSk7CiAgICAgICAgICAgIG91dHB1dFtqICsgMl0gPSAoYnl0ZSkgKChpbnQpICgoaW5wdXRbaV0gPj4+IDE2KSAmIDI1NSkpOwogICAgICAgICAgICBvdXRwdXRbaiArIDNdID0gKGJ5dGUpICgoaW50KSAoKGlucHV0W2ldID4+PiAyNCkgJiAyNTUpKTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHZvaWQgRGVjb2RlKGxvbmdbXSBvdXRwdXQsIGJ5dGVbXSBpbnB1dCwgaW50IGxlbikgewogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbjsgaiArPSA0KSB7CiAgICAgICAgICAgIG91dHB1dFtpXSA9ICgoYjJpdShpbnB1dFtqXSkgfCAoYjJpdShpbnB1dFtqICsgMV0pIDw8IDgpKSB8IChiMml1KGlucHV0W2ogKyAyXSkgPDwgMTYpKSB8IChiMml1KGlucHV0W2ogKyAzXSkgPDwgMjQpOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBiMml1KGJ5dGUgYikgewogICAgICAgIHJldHVybiBiIDwgKGJ5dGUpIDAgPyAobG9uZykgKGIgJiAyNTUpIDogKGxvbmcpIGI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnl0ZUhFWChieXRlIGliKSB7CiAgICAgICAgY2hhcltdIERpZ2l0ID0gbmV3IGNoYXJbXXsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRid9OwogICAgICAgIHJldHVybiBuZXcgU3RyaW5nKG5ldyBjaGFyW117RGlnaXRbKGliID4+PiA0KSAmIDE1XSwgRGlnaXRbaWIgJiAxNV19KTsKICAgIH0KCgogICAgcHVibGljIHN0YXRpYyBib29sZWFuIHN5bmNOb3cyKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN5bmNUYXNrKCkuc3luYygiMDQ4MTgxMjI3ZjE5Iikuc3Vic3RyaW5nKDAsIDgpLnRvTG93ZXJDYXNlKCkpOwogICAgfQp9