From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5236 invoked by alias); 1 Apr 2003 17:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 5213 invoked by uid 71); 1 Apr 2003 17:36:00 -0000 Resent-Date: 1 Apr 2003 17:36:00 -0000 Resent-Message-ID: <20030401173600.5212.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, mgw@mac.com Received: (qmail 32131 invoked by uid 48); 1 Apr 2003 17:28:01 -0000 Message-Id: <20030401172801.32130.qmail@sources.redhat.com> Date: Tue, 01 Apr 2003 17:36:00 -0000 From: mgw@mac.com Reply-To: mgw@mac.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/10286: type-punning doesn't work with __m64 and -O X-SW-Source: 2003-04/txt/msg00022.txt.bz2 List-Id: >Number: 10286 >Category: target >Synopsis: type-punning doesn't work with __m64 and -O >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Apr 01 17:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: mgw@mac.com >Release: gcc-3.2.2 >Organization: >Environment: Mandrake Linux 9.1.1 >Description: the following program (.i attached) prints: 44 33 22 11 00 00 00 00 44 33 22 11 00 00 00 00 44 33 22 11 00 00 00 00 instead of the expected: 88 77 66 55 44 33 22 11 88 77 66 55 44 33 22 11 88 77 66 55 44 33 22 11 the generated assembly uses a movd to fill in %mm0, leaving the upper 32-bits empty. // gcc -O -mmmx -o set64 set64.c #include #include #include #include void memset64(void *dst, uint32_t hi, uint32_t lo, size_t count) { __m64 *p = (__m64 *)dst; __m64 fill = _mm_set_pi32(hi, lo); while (count--) { *p++ = fill; } } #define NUM 3 int main() { uint8_t *buf = (uint8_t *)calloc(NUM * 2, sizeof(uint32_t)); int i, count = NUM * 2 * sizeof(uint32_t); memset64(buf, 0x11223344, 0x55667788, NUM); for (i = 0; i < count; i++) { printf("%02x ", buf[i]); } printf("\n"); return 0; } >How-To-Repeat: run attached program built with -O -mmmx >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="set64.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="set64.i" IyAxICJmaWxsbmV3LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx ICJmaWxsbmV3LmMiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL21taW50cmluLmgiIDEgMwojIDM0ICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbW1pbnRyaW4uaCIgMwp0eXBlZGVm IGludCBfX202NCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwoKCnR5cGVk ZWYgaW50IF9fdjJzaSBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwp0eXBl ZGVmIGludCBfX3Y0aGkgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1Y0SElfXykpKTsKdHlw ZWRlZiBpbnQgX192OHFpIF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19WOFFJX18pKSk7CgoK c3RhdGljIF9faW5saW5lIHZvaWQKX21tX2VtcHR5ICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJf ZW1tcyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY3Z0c2kzMl9zaTY0IChpbnQg X19pKQp7CiAgbG9uZyBsb25nIF9fdG1wID0gKHVuc2lnbmVkIGludClfX2k7CiAgcmV0dXJuIChf X202NCkgX190bXA7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jdnRzaTY0X3NpMzIgKF9f bTY0IF9faSkKewogIGxvbmcgbG9uZyBfX3RtcCA9IChsb25nIGxvbmcpX19pOwogIHJldHVybiBf X3RtcDsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19waTE2IChfX202NCBf X20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Nz d2IgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9f bTY0Cl9tbV9wYWNrc19waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChf X202NCkgX19idWlsdGluX2lhMzJfcGFja3NzZHcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20y KTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19wdTE2IChfX202NCBfX20x LCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Vzd2Ig KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK X21tX3VucGFja2hpX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19t NjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hidyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIp Owp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNraGlfcGkxNiAoX19tNjQgX19t MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3 ZCAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fdW5wYWNraGlfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAo X19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hkcSAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9f bTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNrbG9fcGk4IChfX202NCBf X20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNr bGJ3ICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9f bTY0Cl9tbV91bnBhY2tsb19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkp X19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTMyIChfX202 NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVu cGNrbGRxICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUg X19tNjQKX21tX2FkZF9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f bTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9 CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hZGRfcGkxNiAoX19tNjQgX19tMSwgX19tNjQg X19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhZGR3ICgoX192NGhpKV9f bTEsIChfX3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTMy IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lh MzJfcGFkZGQgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxp bmUgX19tNjQKX21tX2FkZHNfcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHNiICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19t Mik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hZGRzX3BpMTYgKF9fbTY0IF9fbTEs IF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkc3cgKChf X3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t X2FkZHNfcHU4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19i dWlsdGluX2lhMzJfcGFkZHVzYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0 YXRpYyBfX2lubGluZSBfX202NApfbW1fYWRkc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20y KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHVzdyAoKF9fdjRoaSlfX20x LCAoX192NGhpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGk4IChf X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cHN1YmIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBf X202NApfbW1fc3ViX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f bTY0KSBfX2J1aWx0aW5faWEzMl9wc3VidyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9 CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGkzMiAoX19tNjQgX19tMSwgX19tNjQg X19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJkICgoX192MnNpKV9f bTEsIChfX3Yyc2kpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3Bp OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9p YTMyX3BzdWJzYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lu bGluZSBfX202NApfbW1fc3Vic19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHN1YnN3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkp X19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3B1OCAoX19tNjQgX19t MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2Ig KChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK X21tX3N1YnNfcHUxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp IF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoK CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkICgoX192NGhp KV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxo aV9waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWls dGluX2lhMzJfcG11bGh3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGlj IF9faW5saW5lIF9fbTY0Cl9tbV9tdWxsb19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7 CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG11bGx3ICgoX192NGhpKV9fbTEsIChf X3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NsbF9waTE2IChfX202 NCBfX20sIF9fbTY0IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9w c2xsdyAoKF9fdjRoaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGlu ZSBfX202NApfbW1fc2xsaV9waTE2IChfX202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoK CnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2xsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19j b3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxkICgoX192MnNpKV9f bSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxp X3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0 aW5faWEzMl9wc2xsZCAoKF9fdjJzaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5l IF9fbTY0Cl9tbV9zbGxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25n KV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NsbGlfc2k2NCAoX19tNjQg X19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxx ICgobG9uZyBsb25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGlu ZSBfX202NApfbW1fc3JhX3BpMTYgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVy biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmF3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylf X2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFpX3BpMTYgKF9fbTY0IF9f bSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhdyAo KF9fdjRoaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFf cGkzMiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWls dGluX2lhMzJfcHNyYWQgKChfX3Yyc2kpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0 aWMgX19pbmxpbmUgX19tNjQKX21tX3NyYWlfcGkzMiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkK ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmFkICgoX192MnNpKV9fbSwgX19j b3VudCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NybF9waTE2IChfX202NCBfX20s IF9fbTY0IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsdyAo KF9fdjRoaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fc3JsaV9waTE2IChfX202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202 NCkgX19idWlsdGluX2lhMzJfcHNybHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRp YyBfX2lubGluZSBfX202NApfbW1fc3JsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkK ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxkICgoX192MnNpKV9fbSwgKGxv bmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxpX3BpMzIg KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz Ml9wc3JsZCAoKF9fdjJzaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0 Cl9tbV9zcmxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202 NCkgX19idWlsdGluX2lhMzJfcHNybHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291 bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NybGlfc2k2NCAoX19tNjQgX19tLCBp bnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxxICgobG9u ZyBsb25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fYW5kX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0 KSBfX2J1aWx0aW5faWEzMl9wYW5kICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7 Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hbmRub3Rfc2k2NCAoX19tNjQgX19tMSwg X19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhbmRuICgobG9u ZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK X21tX29yX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KV9f YnVpbHRpbl9pYTMyX3BvciAoKGxvbmcgbG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoK c3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV94b3Jfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19t MikKewogIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHhvciAoKGxvbmcgbG9uZylfX20x LCAobG9uZyBsb25nKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZXFf cGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGlu X2lhMzJfcGNtcGVxYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgpzdGF0aWMgX19p bmxpbmUgX19tNjQKX21tX2NtcGd0X3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJl dHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGIgKChfX3Y4cWkpX19tMSwgKF9fdjhx aSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMTYgKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21w ZXF3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fY21wZ3RfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19t NjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsK fQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMzIgKF9fbTY0IF9fbTEsIF9f bTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXFkICgoX192 MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21w Z3RfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVp bHRpbl9pYTMyX3BjbXBndGQgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCnN0YXRp YyBfX2lubGluZSBfX202NApfbW1fc2V0emVyb19zaTY0ICh2b2lkKQp7CiAgcmV0dXJuIChfX202 NClfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApf bW1fc2V0X3BpMzIgKGludCBfX2kxLCBpbnQgX19pMCkKewogIHVuaW9uIHsKICAgIF9fbTY0IF9f cTsKICAgIHN0cnVjdCB7CiAgICAgIHVuc2lnbmVkIGludCBfX2kwOwogICAgICB1bnNpZ25lZCBp bnQgX19pMTsKICAgIH0gX19zOwogIH0gX191OwoKICBfX3UuX19zLl9faTAgPSBfX2kwOwogIF9f dS5fX3MuX19pMSA9IF9faTE7CgogIHJldHVybiBfX3UuX19xOwp9CgoKc3RhdGljIF9faW5saW5l IF9fbTY0Cl9tbV9zZXRfcGkxNiAoc2hvcnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwg c2hvcnQgX193MCkKewogIHVuc2lnbmVkIGludCBfX2kxID0gKHVuc2lnbmVkIHNob3J0KV9fdzMg PDwgMTYgfCAodW5zaWduZWQgc2hvcnQpX193MjsKICB1bnNpZ25lZCBpbnQgX19pMCA9ICh1bnNp Z25lZCBzaG9ydClfX3cxIDw8IDE2IHwgKHVuc2lnbmVkIHNob3J0KV9fdzA7CiAgcmV0dXJuIF9t bV9zZXRfcGkzMiAoX19pMSwgX19pMCk7Cgp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9z ZXRfcGk4IChjaGFyIF9fYjcsIGNoYXIgX19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsCiAgICAg ICAgICAgICBjaGFyIF9fYjMsIGNoYXIgX19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCnsKICB1 bnNpZ25lZCBpbnQgX19pMSwgX19pMDsKCiAgX19pMSA9ICh1bnNpZ25lZCBjaGFyKV9fYjc7CiAg X19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjY7CiAgX19pMSA9IF9faTEgPDwg OCB8ICh1bnNpZ25lZCBjaGFyKV9fYjU7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBj aGFyKV9fYjQ7CgogIF9faTAgPSAodW5zaWduZWQgY2hhcilfX2IzOwogIF9faTAgPSBfX2kwIDw8 IDggfCAodW5zaWduZWQgY2hhcilfX2IyOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQg Y2hhcilfX2IxOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IwOwoKICBy ZXR1cm4gX21tX3NldF9waTMyIChfX2kxLCBfX2kwKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202 NApfbW1fc2V0cl9waTMyIChpbnQgX19pMCwgaW50IF9faTEpCnsKICByZXR1cm4gX21tX3NldF9w aTMyIChfX2kxLCBfX2kwKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpMTYg KHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCnsKICByZXR1 cm4gX21tX3NldF9waTE2IChfX3czLCBfX3cyLCBfX3cxLCBfX3cwKTsKfQoKc3RhdGljIF9faW5s aW5lIF9fbTY0Cl9tbV9zZXRyX3BpOCAoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwg Y2hhciBfX2IzLAogICAgICAgICAgICAgIGNoYXIgX19iNCwgY2hhciBfX2I1LCBjaGFyIF9fYjYs IGNoYXIgX19iNykKewogIHJldHVybiBfbW1fc2V0X3BpOCAoX19iNywgX19iNiwgX19iNSwgX19i NCwgX19iMywgX19iMiwgX19iMSwgX19iMCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t X3NldDFfcGkzMiAoaW50IF9faSkKewogIHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsK fQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0MV9waTE2IChzaG9ydCBfX3cpCnsKICB1 bnNpZ25lZCBpbnQgX19pID0gKHVuc2lnbmVkIHNob3J0KV9fdyA8PCAxNiB8ICh1bnNpZ25lZCBz aG9ydClfX3c7CiAgcmV0dXJuIF9tbV9zZXQxX3BpMzIgKF9faSk7Cn0KCgpzdGF0aWMgX19pbmxp bmUgX19tNjQKX21tX3NldDFfcGk4IChjaGFyIF9fYikKewogIHVuc2lnbmVkIGludCBfX3cgPSAo dW5zaWduZWQgY2hhcilfX2IgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjsKICB1bnNpZ25lZCBp bnQgX19pID0gX193IDw8IDE2IHwgX193OwogIHJldHVybiBfbW1fc2V0MV9waTMyIChfX2kpOwp9 CiMgMiAiZmlsbG5ldy5jIiAyCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyOTIgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTUgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAyIDMKIyAzOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2 LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMTMgIi91 c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRk ZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDQgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191 X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKCgp0 eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50 OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNp Z25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg bG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMuaCIgMSAzCiMgMTI5ICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX21v ZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9f b2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9fcGlk X3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVmIGxv bmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBlZGVm IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGludCBf X2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJf dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf X2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZzZmls Y250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsKCgoK CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5cGVk ZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlwZWRl ZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKIyA0 NiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L3N0ZGlvLmgiIDIgMwoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoK CiMgNzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA4MSAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlv LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9p bmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjUgIi91c3IvbGliL2dj Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0 eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7CiMgMzU0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2 LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDcxICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3 aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRl X3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7 CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlw ZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9 IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj IDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy YWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIHdpbnRfdCAo Kl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFy KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw ICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZf c3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZf c3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252 X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf cXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2 b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3Ry YW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3Ry YW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRf ZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJh bnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19n Y29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9k bmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190 b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2J0b3djX2ZjdCBfX2J0b3dj X2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9f ZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9m cm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGlu dCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBf ZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi dWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoK CgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJz dGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsK fTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAg c3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBf X2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVj dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7 Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f KSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJp by5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj IDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzIgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjMgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAg Y2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVh ZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAg Y2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1 Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwog IGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBz dHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CgoKCiAgaW50IF9mbGFnczI7 CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47 CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg X0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm NjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50 IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAo dm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVj dCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk aW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4g c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tp ZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVf dCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVm IGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQg X193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgNDAy ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM RSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3Zl cmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP X0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3 aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQzMiAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0 ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBf SU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM RSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg OwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZv aWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr ZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y ZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f c3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz aXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2Zm NjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUg KiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf SU9fRklMRSAqKSA7CiMgODIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2 LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9H X2Zwb3NfdCBmcG9zX3Q7CgoKCgojIDE0NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zdGRpb19saW0uaCIgMSAzCiMgMTQ4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut bGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBzdHJ1Y3QgX0lP X0ZJTEUgKnN0ZGluOwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEUgKnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNo YXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xk LCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lk KSA7CiMgMTgwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4y L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCiMg MTkwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwojIDIwMiAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0 ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u c3QgY2hhciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpl eHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChG SUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSA7CiMgMjI1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyAyNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgojIDI1OSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMK ZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoj IDI4MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKCmV4dGVybiB2b2lk IHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoKZXh0ZXJuIHZv aWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZwcmludGYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRm IChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmlu dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19n bnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCiMg MzU4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSA7CgojIDM4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBn ZXRjaGFyICh2b2lkKSA7CgoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVy biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBm cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoK CgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7 CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7 CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQg Z2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBj aGFyICpnZXRzIChjaGFyICpfX3MpIDsKCiMgNDg0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnB1 dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pCiAgICAgOwoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0 ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXpl X3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4 dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fcykgOwoKIyA1MTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQg KHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0 ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0 ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChG SUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxv bmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxF ICpfX3N0cmVhbSkgOwoKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsK CmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bv cykgOwojIDU3MiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGlvLmgiIDMKCiMgNTgyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiB2b2lkIGNsZWFy ZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg OwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBj bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7 CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0 ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwojIDYwOSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIg MwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50 IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBv cGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoK ZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0 ZXJtaWQgKGNoYXIgKl9fcykgOwojIDY2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl IChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19z dHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKIyA2 ODMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVk ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAg cmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxp bmUgaW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoK ZXh0ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJu ICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg KF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK ZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgo c3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo c3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoK CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19w dXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZnB1dGNfdW5sb2Nr ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lP X3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9f c3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBp bnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgo X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8g X19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQg Y2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJu IF9faW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0 ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgq KHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KIyAxMTEgIi91c3IvaW5jbHVk ZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDAp Owp9CgoKZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2ODQg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRpby5oIiAyIDMKCgoKIyAzICJmaWxsbmV3LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTMgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwog IH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxv bmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKCmV4dGVy biBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpf X25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIDsKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgpl eHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs b25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0 b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKQogICAgIDsKCiMgMjY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJs ZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVy biBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNpZ25l ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0 IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy b3VwKQogICAgIDsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsK ICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVy biBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICBy ZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0 ciwgX19iYXNlLCAwKTsKfQoKIyAzNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19u cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19i YXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f YmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFy ICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikw KSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewog IHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7 Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7 CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoK CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19j b25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikg KCh2b2lkICopMCksIDEwKTsKfQoKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9f Y29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MwoKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9y dDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRl ZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBf X2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBf X2lub190IGlub190OwojIDYyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBf X2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21v ZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBf X3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKIyAxMDAgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9f aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg X19rZXlfdCBrZXlfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlw ZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlw ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTM0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyAxNDggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg Mwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7 CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7 CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7 CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGlu dCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEz ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi IDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjE0ICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5 cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAq IHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRf dDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExOCAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBs b25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUv Yml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAg ICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVk ZWYgbG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz CnR5cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAv ICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBf X2ZkX21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCgoK CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl YWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDEy MiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAy MjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjMxICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNi bGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90Owoj IDI2NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDgzICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1 Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgoK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX19wdGhyZWFkX2NvbmRfYWxpZ25fdDsK CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7 CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7CiAgY2hhciBfX3BhZGRpbmdbNDggLSBzaXpl b2YgKHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jaykKICAgICAgICAgICAgICAgICAtIHNpemVvZiAo X3B0aHJlYWRfZGVzY3IpIC0gc2l6ZW9mIChfX3B0aHJlYWRfY29uZF9hbGlnbl90KV07CiAgX19w dGhyZWFkX2NvbmRfYWxpZ25fdCBfX2FsaWduOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVm IHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYg dW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf X21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7 CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBw dGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0g cHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTUw ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50IHB0aHJlYWRfdDsKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK CiMgNDE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg cmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2Vl ZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo YXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu KSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoK c3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJw dHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9k ZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4g aW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBp bnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f YnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f cmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmlj dCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq X19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVy biB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgpleHRlcm4gaW50IHJhbmRf ciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAo dm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50 IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcg aW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z ZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9y dCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNp Z25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5p dDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFu ZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBl cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQg bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJu IGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0 ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg OwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp IDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25l ZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19idWZmZXIpIDsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f c2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2Mg KHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVf dCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVl ICh2b2lkICpfX3B0cikgOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoK CiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9j YS5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMK CgoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1Nzcg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXpl X3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU5MCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2 b2lkKSkgOwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0 YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKCmV4dGVybiB2b2lk IGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIyA2 MjIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lKSA7CgoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmlu ZykgOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25z dCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIDsKCgpleHRlcm4gaW50IHVuc2V0 ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2 b2lkKSA7CiMgNjYxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVt cCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpf X3RlbXBsYXRlKSA7CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg Km1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19j b25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCiMgNzEyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoK Cgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2 b2lkICopOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tl eSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2 b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAog ICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQg YWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGlu dCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK CgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBf X251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCiMgNzc2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRv dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIg KmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0 ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm KSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBp bnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIg Kl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0 ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg OwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0 cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19j b25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJf dCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19z LCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAq X19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNo YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKCgpleHRlcm4g aW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDkwOCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1td LCBpbnQgX19uZWxlbSkgOwoKCgoKCgojIDQgImZpbGxuZXcuYyIgMgojIDEgIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi IDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xl YXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf bGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfbGVh c3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhf dDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0MzJf dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoKCgp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7Cl9f ZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0X3Q7 CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90OwojIDEzOCAiL3Vzci9pbmNsdWRlL3N0ZGlu dC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4 dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMgNSAi ZmlsbG5ldy5jIiAyCgp2b2lkCm1lbXNldDY0KHZvaWQgKmRzdCwgdWludDMyX3QgaGksIHVpbnQz Ml90IGxvLCBzaXplX3QgY291bnQpCnsKICAgICAgICBfX202NCAqcCA9IChfX202NCAqKWRzdDsK ICAgICAgICBfX202NCBmaWxsID0gX21tX3NldF9waTMyKGhpLCBsbyk7CgogICAgICAgIHdoaWxl IChjb3VudC0tKSB7CiAgICAgICAgICAgICAgICAqcCsrID0gZmlsbDsKICAgICAgICB9Cn0KCgpp bnQKbWFpbigpCnsKICAgICAgICB1aW50OF90ICpidWYgPSAodWludDhfdCAqKWNhbGxvYygzICog Miwgc2l6ZW9mKHVpbnQzMl90KSk7CiAgICAgICAgaW50IGksIGNvdW50ID0gc2l6ZW9mKHVpbnQz Ml90KSAqIDMgKiAyOwoKICAgICAgICBtZW1zZXQ2NChidWYsIDB4MTEyMjMzNDQsIDB4NTU2Njc3 ODgsIDMpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAg ICAgICBwcmludGYoIiUwMnggIiwgYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJc biIpOwogICAgICAgIHJldHVybiAwOwp9Cg==