LyoKKiogbWFjIF9fc3RhcnQgZm9yIHB5dGhvbi13aXRoLXNoYXJlZC1saWJyYXJ5LgoqKgoqKiBQYXJ0aWFsbHkgc3RvbGVuIGZyb20gTVcgU3RhcnR1cC5jLCB3aGljaCBpcwoqKglDb3B5cmlnaHQgqSAxOTkzIG1ldHJvd2Vya3MgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoqLwoKI2luY2x1ZGUgPHNldGptcC5oPgoKI2lmZGVmIFBSRV9DVzgKZXh0ZXJuIGptcF9idWYgX19wcm9ncmFtX2V4aXQ7CQkJLyoJZXhpdCgpIGRvZXMgYSBsb25nam1wKCkgdG8gaGVyZQkJKi8KZXh0ZXJuIHZvaWQgKCpfX2F0ZXhpdF9ob29rKSh2b2lkKTsJCS8qCWF0ZXhpdCgpICBzZXRzIHRoaXMgdXAgaWYgaXQgaXMgZXZlciBjYWxsZWQJKi8KZXh0ZXJuIHZvaWQgKCpfX19hdGV4aXRfaG9vaykodm9pZCk7CS8qCV9hdGV4aXQoKSBzZXRzIHRoaXMgdXAgaWYgaXQgaXMgZXZlciBjYWxsZWQJKi8KZXh0ZXJuIGludCBfX2Fib3J0aW5nOwkJCQkJLyoJYWJvcnQoKSBzZXRzIHRoaXMgYW5kIGxvbmdqbXBzIHRvIF9fcHJvZ3JhbV9leGl0CSovCiNlbmRpZgoKLyoKICoJY2xlYXJfc3RhY2tmcmFtZV9iYWNrbGluawktCXNldCAwKFNQKSB0byAwCiAqCiAqLwoKc3RhdGljIGFzbSB2b2lkIGNsZWFyX3N0YWNrZnJhbWVfYmFja2xpbmsodm9pZCkKewoJCWxpCQlyMywwCgkJc3R3CQlyMywwKFNQKQoJCWJscgp9Cgp2b2lkIF9fc3RhcnQodm9pZCkKewoJY2hhciAqYXJndiA9IDA7CgkKI2lmZGVmIFBSRV9DVzgKCWlmIChzZXRqbXAoX19wcm9ncmFtX2V4aXQpID09IDApIHsJLy8Jc2V0IHVwIGptcF9idWYgZm9yIGV4aXQoKQoJCW1haW4oMCwgJmFyZ3YpOwkJCQkvLwljYWxsIG1haW4oYXJnYywgYXJndikKCQlpZiAoX19hdGV4aXRfaG9vaykKCQkJX19hdGV4aXRfaG9vaygpOwkJCS8vCWNhbGwgYXRleGl0KCkgcHJvY3MKCX0KCWlmICghX19hYm9ydGluZykgewoJCWlmIChfX19hdGV4aXRfaG9vaykKCQkJX19fYXRleGl0X2hvb2soKTsJCQkvLwljYWxsIF9hdGV4aXQoKSBwcm9jcwoJfQovLwlFeGl0VG9TaGVsbCgpOwojZWxzZQoJY2xlYXJfc3RhY2tmcmFtZV9iYWNrbGluaygpOwoJbWFpbigwLCAmYXJndik7CglleGl0KDApOwojZW5kaWYKfQo=