From mboxrd@z Thu Jan 1 00:00:00 1970 From: mojza@seznam.cz To: gcc-gnats@gcc.gnu.org Subject: c/4726: Cannot compile 8139too.c from Linux kernel 2.4.13 Date: Mon, 29 Oct 2001 02:46:00 -0000 Message-id: <20011029103944.7416.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00642.html List-Id: >Number: 4726 >Category: c >Synopsis: Cannot compile 8139too.c from Linux kernel 2.4.13 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Oct 29 02:46:04 PST 2001 >Closed-Date: >Last-Modified: >Originator: Mojza >Release: 3.0.1 >Organization: >Environment: # gcc -v Reading specs from /usr/lib/gcc-lib/i386-pld-linux/3.0.1/specs Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --enable-shared --enable-threads=posix --enable-haifa --enable-languages=c,c++,f77,gcov,java,objc --enable-long-long --enable-namespaces --enable-multilib --with-gnu-as --with-gnu-ld --with-system-zlib --with-slibdir=/lib --without-x i386-pld-linux Thread model: posix gcc version 3.0.1 >Description: 8139too.c: In function `netdev_ethtool_ioctl': 8139too.c:2432: Unrecognizable insn: (insn/i 609 1066 1063 (parallel[ (set (reg:SI 6 ebp) (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0, %0") ("=&r") 0[ (reg/v:SI 1 edx [165]) (mem:SI (plus:SI (reg/f:SI 6 ebp) (const_int -352 [0xfffffea0])) 0) (mem/s:SI (plus:SI (reg:SI 0 eax [173]) (const_int 12 [0xc])) 0) ] [ (asm_input:SI ("1")) (asm_input:SI ("g")) (asm_input:SI ("g")) ] ("/usr/src/linux/include/asm/uaccess.h") 558)) (set (reg/v:SI 1 edx [165]) (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0, %0") ("=r") 1[ (reg/v:SI 1 edx [165]) (mem:SI (plus:SI (reg/f:SI 6 ebp) (const_int -352 [0xfffffea0])) 0) (mem/s:SI (plus:SI (reg:SI 0 eax [173]) (const_int 12 [0xc])) 0) ] [ (asm_input:SI ("1")) (asm_input:SI ("g")) (asm_input:SI ("g")) ] ("/usr/src/linux/include/asm/uaccess.h") 558)) (clobber (reg:QI 19 dirflag)) (clobber (reg:QI 18 fpsr)) (clobber (reg:QI 17 flags)) ] ) -1 (insn_list 595 (insn_list 602 (nil))) (nil)) 8139too.c:2432: Internal compiler error in reload_cse_simplify_operands, at relo ad1.c:8355 >How-To-Repeat: gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i586 -c -o 8139too.o 8139too.c >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/msword; name="8139too.preprocessed.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="8139too.preprocessed.c" IyAxNDUgIjgxMzl0b28uYyIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZp Zy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIiAx CiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMgojIDE0NiAiODEz OXRvby5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMQoj IDEwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9tb2R1bGUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv c3BpbmxvY2suaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmln LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDIKIyA1 NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIgogIHR5cGVkZWYgc3Ry dWN0IHsgfSBzcGlubG9ja190OwojIDEyMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z cGlubG9jay5oIgogIHR5cGVkZWYgc3RydWN0IHsgfSByd2xvY2tfdDsKIyAxMiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvbGlzdC5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3ByZWZldGNoLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9wcmVmZXRj aC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAxCiMgMTAg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL3ZtODYuaCIgMQojIDY4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2Fz bS92bTg2LmgiCnN0cnVjdCB2bTg2X3JlZ3MgewoKCgogICAgICAgIGxvbmcgZWJ4OwogICAgICAg IGxvbmcgZWN4OwogICAgICAgIGxvbmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwogICAgICAgIGxv bmcgZWRpOwogICAgICAgIGxvbmcgZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAgICAgIGxvbmcg X19udWxsX2RzOwogICAgICAgIGxvbmcgX19udWxsX2VzOwogICAgICAgIGxvbmcgX19udWxsX2Zz OwogICAgICAgIGxvbmcgX19udWxsX2dzOwogICAgICAgIGxvbmcgb3JpZ19lYXg7CiAgICAgICAg bG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwogICAgICAgIGxvbmcg ZWZsYWdzOwogICAgICAgIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3Nz aDsKCgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7Cn07CgpzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3Qg ewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19tYXBbOF07Cn07CgpzdHJ1Y3Qgdm04Nl9zdHJ1Y3Qg ewogICAgICAgIHN0cnVjdCB2bTg2X3JlZ3MgcmVnczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKICAgICAgICB1bnNpZ25l ZCBsb25nIGNwdV90eXBlOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2 ZWN0b3JlZDsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3Jl ZDsKfTsKCgoKCgoKc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0IHsKICAgICAgICB1bnNpZ25l ZCBsb25nIGZvcmNlX3JldHVybl9mb3JfcGljOjE7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2bTg2 ZGJnX2FjdGl2ZToxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdm04NmRiZ19URnBlbmRpZzoxOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkOjI4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXNf dm04NnB1czoxOwogICAgICAgIHVuc2lnbmVkIGNoYXIgdm04NmRiZ19pbnR4eHRhYlszMl07Cn07 CgpzdHJ1Y3Qgdm04NnBsdXNfc3RydWN0IHsKICAgICAgICBzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVl bl9iaXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKICAgICAgICBzdHJ1Y3Qg cmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHJldmVjdG9y ZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHZtODZwbHVzX2luZm9f c3RydWN0IHZtODZwbHVzOwp9OwojIDE0NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdm04 Ni5oIgpzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyB7CgoKCiAgICAgICAgbG9uZyBlYng7CiAgICAg ICAgbG9uZyBlY3g7CiAgICAgICAgbG9uZyBlZHg7CiAgICAgICAgbG9uZyBlc2k7CiAgICAgICAg bG9uZyBlZGk7CiAgICAgICAgbG9uZyBlYnA7CiAgICAgICAgbG9uZyBlYXg7CiAgICAgICAgbG9u ZyBfX251bGxfZHM7CiAgICAgICAgbG9uZyBfX251bGxfZXM7CiAgICAgICAgbG9uZyBvcmlnX2Vh eDsKICAgICAgICBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAg ICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc3MsIF9fc3NoOwoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9f ZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKfTsKCnN0cnVjdCBrZXJuZWxf dm04Nl9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CiMgMTg0 ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS92bTg2LmgiCiAgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAgICAgICAgdW5z aWduZWQgbG9uZyBjcHVfdHlwZTsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50 X3JldmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVj dG9yZWQ7CiAgICAgICAgc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0IHZtODZwbHVzOwogICAg ICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzMzI7CiMgMjAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS92bTg2LmgiCn07Cgp2b2lkIGhhbmRsZV92bTg2X2ZhdWx0KHN0cnVjdCBrZXJuZWxfdm04 Nl9yZWdzICosIGxvbmcpOwppbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZf cmVncyAqLCBsb25nLCBpbnQpOwojIDExICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9j ZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL21hdGhfZW11LmgiIDEK CgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDEKIyAxOCAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIgpzdHJ1Y3QgX2ZwcmVnIHsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBleHBvbmVudDsKfTsKCnN0cnVjdCBfZnB4cmVnIHsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzaWduaWZpY2FuZFs0XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwp9OwoKc3RydWN0IF94bW1yZWcgewogICAgICAg IHVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKfTsKCnN0cnVjdCBfZnBzdGF0ZSB7CgogICAgICAg IHVuc2lnbmVkIGxvbmcgY3c7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdzsKICAgICAgICB1bnNp Z25lZCBsb25nIHRhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlwb2ZmOwogICAgICAgIHVuc2ln bmVkIGxvbmcgY3NzZWw7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhb2ZmOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZGF0YXNlbDsKICAgICAgICBzdHJ1Y3QgX2ZwcmVnIF9zdFs4XTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbWFnaWM7CgoK ICAgICAgICB1bnNpZ25lZCBsb25nIF9meHNyX2Vudls2XTsKICAgICAgICB1bnNpZ25lZCBsb25n IG14Y3NyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ7CiAgICAgICAgc3RydWN0IF9m cHhyZWcgX2Z4c3Jfc3RbOF07CiAgICAgICAgc3RydWN0IF94bW1yZWcgX3htbVs4XTsKICAgICAg ICB1bnNpZ25lZCBsb25nIHBhZGRpbmdbNTZdOwp9OwoKCgpzdHJ1Y3Qgc2lnY29udGV4dCB7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZz LCBfX2ZzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWRpOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJwOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJ4OwogICAgICAgIHVuc2lnbmVk IGxvbmcgZWR4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWN4OwogICAgICAgIHVuc2lnbmVkIGxv bmcgZWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZXJyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IGNzLCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVzcF9hdF9zaWduYWw7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwog ICAgICAgIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBv bGRtYXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvYXNtL21hdGhfZW11LmgiIDIKCmludCByZXN0b3JlX2kzODdfc29mdCh2b2lkICpz Mzg3LCBzdHJ1Y3QgX2Zwc3RhdGUgKmJ1Zik7CmludCBzYXZlX2kzODdfc29mdCh2b2lkICpzMzg3 LCBzdHJ1Y3QgX2Zwc3RhdGUgKiBidWYpOwoKCgoKCnN0cnVjdCBpbmZvIHsKICAgICAgICBsb25n IF9fX29yaWdfZWlwOwogICAgICAgIGxvbmcgX19fZWJ4OwogICAgICAgIGxvbmcgX19fZWN4Owog ICAgICAgIGxvbmcgX19fZWR4OwogICAgICAgIGxvbmcgX19fZXNpOwogICAgICAgIGxvbmcgX19f ZWRpOwogICAgICAgIGxvbmcgX19fZWJwOwogICAgICAgIGxvbmcgX19fZWF4OwogICAgICAgIGxv bmcgX19fZHM7CiAgICAgICAgbG9uZyBfX19lczsKICAgICAgICBsb25nIF9fX29yaWdfZWF4Owog ICAgICAgIGxvbmcgX19fZWlwOwogICAgICAgIGxvbmcgX19fY3M7CiAgICAgICAgbG9uZyBfX19l ZmxhZ3M7CiAgICAgICAgbG9uZyBfX19lc3A7CiAgICAgICAgbG9uZyBfX19zczsKICAgICAgICBs b25nIF9fX3ZtODZfZXM7CiAgICAgICAgbG9uZyBfX192bTg2X2RzOwogICAgICAgIGxvbmcgX19f dm04Nl9mczsKICAgICAgICBsb25nIF9fX3ZtODZfZ3M7Cn07CiMgMTIgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vc2VnbWVudC5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nv ci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMTIgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Bh Z2UuaCIgMgojIDQ1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wYWdlLmgiCnR5cGVkZWYg c3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGVfbG93OyB9IHB0ZV90Owp0eXBlZGVmIHN0cnVjdCB7 IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90Owp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxv bmcgcGdkOyB9IHBnZF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJv dDsgfSBwZ3Byb3RfdDsKIyAxMDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIK c3RhdGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCnsKICAg ICAgICBpbnQgb3JkZXI7CgogICAgICAgIHNpemUgPSAoc2l6ZS0xKSA+PiAoMTIgLTEpOwogICAg ICAgIG9yZGVyID0gLTE7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgc2l6ZSA+Pj0gMTsK ICAgICAgICAgICAgICAgIG9yZGVyKys7CiAgICAgICAgfSB3aGlsZSAoc2l6ZSk7CiAgICAgICAg cmV0dXJuIG9yZGVyOwp9CiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nv ci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMQoKCgp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CgoKCgoKCnR5cGVkZWYgX19zaWduZWRfXyBjaGFy IF9fczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OwoKdHlwZWRlZiBfX3NpZ25lZF9fIHNo b3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OwoKdHlwZWRlZiBfX3NpZ25l ZF9fIGludCBfX3MzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CgoKdHlwZWRlZiBfX3Np Z25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7 CgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAz MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMgoKdHlwZWRlZiBzaWduZWQg Y2hhciBzODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwoKdHlwZWRlZiBzaWduZWQgc2hvcnQg czE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKCnR5cGVkZWYgc2lnbmVkIGludCBzMzI7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKCnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7 CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKIyA1MSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9hc20vdHlwZXMuaCIKdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKCnR5cGVkZWYgdTY0IGRt YTY0X2FkZHJfdDsKIyAxNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDEKIyAxNiAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2NhY2hlLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5o IiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQoKCgoKCgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9jYWNoZS5oIiAyCiMgNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jYWNoZS5o IiAyCiMgMTggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE5ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvdGhyZWFkcy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGhyZWFkcy5o IiAyCiMgMjAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMzMg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgY3B1aW5mb194 ODYgewogICAgICAgIF9fdTggeDg2OwogICAgICAgIF9fdTggeDg2X3ZlbmRvcjsKICAgICAgICBf X3U4IHg4Nl9tb2RlbDsKICAgICAgICBfX3U4IHg4Nl9tYXNrOwogICAgICAgIGNoYXIgd3Bfd29y a3Nfb2s7CiAgICAgICAgY2hhciBobHRfd29ya3Nfb2s7CiAgICAgICAgY2hhciBoYXJkX21hdGg7 CiAgICAgICAgY2hhciByZnU7CiAgICAgICAgaW50IGNwdWlkX2xldmVsOwogICAgICAgIF9fdTMy IHg4Nl9jYXBhYmlsaXR5WzRdOwogICAgICAgIGNoYXIgeDg2X3ZlbmRvcl9pZFsxNl07CiAgICAg ICAgY2hhciB4ODZfbW9kZWxfaWRbNjRdOwogICAgICAgIGludCB4ODZfY2FjaGVfc2l6ZTsKCiAg ICAgICAgaW50IGZkaXZfYnVnOwogICAgICAgIGludCBmMDBmX2J1ZzsKICAgICAgICBpbnQgY29t YV9idWc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAgICAgICAgdW5z aWduZWQgbG9uZyAqcGdkX3F1aWNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgKnBtZF9xdWljazsK ICAgICAgICB1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBw Z3RhYmxlX2NhY2hlX3N6Owp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkp KSkpKTsKIyA3MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVy biBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKZXh0ZXJuIHN0cnVjdCB0c3Nfc3Ry dWN0IGluaXRfdHNzWzFdOwojIDk0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNz b3IuaCIKZXh0ZXJuIGNoYXIgaWdub3JlX2lycTEzOwoKZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1 KHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0 IGNwdWluZm9feDg2ICopOwpleHRlcm4gdm9pZCBkb2RneV90c2Modm9pZCk7CiMgMTI0ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RhdGljIGlubGluZSB2b2lkIGNw dWlkKGludCBvcCwgaW50ICplYXgsIGludCAqZWJ4LCBpbnQgKmVjeCwgaW50ICplZHgpCnsKICAg ICAgICBfX2FzbV9fKCJjcHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoKmVheCksCiAgICAg ICAgICAgICAgICAgICI9YiIgKCplYngpLAogICAgICAgICAgICAgICAgICAiPWMiICgqZWN4KSwK ICAgICAgICAgICAgICAgICAgIj1kIiAoKmVkeCkKICAgICAgICAgICAgICAgIDogIjAiIChvcCkp Owp9CgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50 IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheDsKCiAgICAgICAgX19hc21fXygiY3B1aWQi CiAgICAgICAgICAgICAgICA6ICI9YSIgKGVheCkKICAgICAgICAgICAgICAgIDogIjAiIChvcCkK ICAgICAgICAgICAgICAgIDogImJ4IiwgImN4IiwgImR4Iik7CiAgICAgICAgcmV0dXJuIGVheDsK fQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKQp7 CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWJ4OwoKICAgICAgICBfX2FzbV9fKCJjcHVpZCIK ICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1iIiAoZWJ4KQogICAgICAgICAgICAgICAg OiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiY3giLCAiZHgiICk7CiAgICAgICAgcmV0dXJu IGVieDsKfQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50 IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWN4OwoKICAgICAgICBfX2FzbV9fKCJj cHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1jIiAoZWN4KQogICAgICAgICAg ICAgICAgOiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiYngiLCAiZHgiICk7CiAgICAgICAg cmV0dXJuIGVjeDsKfQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWdu ZWQgaW50IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWR4OwoKICAgICAgICBfX2Fz bV9fKCJjcHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1kIiAoZWR4KQogICAg ICAgICAgICAgICAgOiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiYngiLCAiY3giKTsKICAg ICAgICByZXR1cm4gZWR4Owp9CiMgMTk5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9j ZXNzb3IuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NyNF9mZWF0dXJlczsKCnN0YXRpYyBp bmxpbmUgdm9pZCBzZXRfaW5fY3I0ICh1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBtbXVf Y3I0X2ZlYXR1cmVzIHw9IG1hc2s7CiAgICAgICAgX19hc21fXygibW92bCAlJWNyNCwlJWVheFxu XHQiCiAgICAgICAgICAgICAgICAib3JsICUwLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJt b3ZsICUlZWF4LCUlY3I0XG4iCiAgICAgICAgICAgICAgICA6IDogImlyZyIgKG1hc2spCiAgICAg ICAgICAgICAgICA6ImF4Iik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbl9jcjQgKHVu c2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIG1tdV9jcjRfZmVhdHVyZXMgJj0gfm1hc2s7CiAg ICAgICAgX19hc21fXygibW92bCAlJWNyNCwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAiYW5k bCAlMCwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAibW92bCAlJWVheCwlJWNyNFxuIgogICAg ICAgICAgICAgICAgOiA6ICJpcmciICh+bWFzaykKICAgICAgICAgICAgICAgIDoiYXgiKTsKfQoj IDI1NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVybiBpbnQg TUNBX2J1czsKCgoKZXh0ZXJuIHVuc2lnbmVkIGludCBtYWNoaW5lX2lkOwpleHRlcm4gdW5zaWdu ZWQgaW50IG1hY2hpbmVfc3VibW9kZWxfaWQ7CmV4dGVybiB1bnNpZ25lZCBpbnQgQklPU19yZXZp c2lvbjsKZXh0ZXJuIHVuc2lnbmVkIGludCBtY2FfcGVudGl1bV9mbGFnOwojIDI4MiAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVj dCB7CiAgICAgICAgbG9uZyBjd2Q7CiAgICAgICAgbG9uZyBzd2Q7CiAgICAgICAgbG9uZyB0d2Q7 CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBmY3M7CiAgICAgICAgbG9uZyBmb287CiAg ICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBzdF9zcGFjZVsyMF07CiAgICAgICAgbG9uZyBz dGF0dXM7Cn07CgpzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBjd2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3dkOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHR3ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmb3A7CiAgICAgICAgbG9uZyBmaXA7CiAg ICAgICAgbG9uZyBmY3M7CiAgICAgICAgbG9uZyBmb287CiAgICAgICAgbG9uZyBmb3M7CiAgICAg ICAgbG9uZyBteGNzcjsKICAgICAgICBsb25nIHJlc2VydmVkOwogICAgICAgIGxvbmcgc3Rfc3Bh Y2VbMzJdOwogICAgICAgIGxvbmcgeG1tX3NwYWNlWzMyXTsKICAgICAgICBsb25nIHBhZGRpbmdb NTZdOwp9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKCnN0cnVjdCBpMzg3X3NvZnRf c3RydWN0IHsKICAgICAgICBsb25nIGN3ZDsKICAgICAgICBsb25nIHN3ZDsKICAgICAgICBsb25n IHR3ZDsKICAgICAgICBsb25nIGZpcDsKICAgICAgICBsb25nIGZjczsKICAgICAgICBsb25nIGZv bzsKICAgICAgICBsb25nIGZvczsKICAgICAgICBsb25nIHN0X3NwYWNlWzIwXTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGZ0b3AsIGNoYW5nZWQsIGxvb2thaGVhZCwgbm9fdXBkYXRlLCBybSwgYWxp bWl0OwogICAgICAgIHN0cnVjdCBpbmZvICppbmZvOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZW50 cnlfZWlwOwp9OwoKdW5pb24gaTM4N191bmlvbiB7CiAgICAgICAgc3RydWN0IGkzODdfZnNhdmVf c3RydWN0IGZzYXZlOwogICAgICAgIHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgZnhzYXZlOwog ICAgICAgIHN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHNvZnQ7Cn07Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZWc7Cn0gbW1fc2VnbWVudF90OwoKc3RydWN0IHRzc19z dHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIHNob3J0IGJhY2tfbGluayxfX2JsaDsKICAgICAgICB1 bnNpZ25lZCBsb25nIGVzcDA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MwLF9fc3MwaDsKICAg ICAgICB1bnNpZ25lZCBsb25nIGVzcDE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MxLF9fc3Mx aDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDI7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3My LF9fc3MyaDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fY3IzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZWlwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZWF4LGVjeCxlZHgsZWJ4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZWJwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZWRpOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3No OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGxkdCwgX19sZHRoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYWNlLCBi aXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpb19iaXRtYXBbMzIgKzFdOwoKCgogICAgICAg IHVuc2lnbmVkIGxvbmcgX19jYWNoZWxpbmVfZmlsbGVyWzVdOwp9OwoKc3RydWN0IHRocmVhZF9z dHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwMDsKICAgICAgICB1bnNpZ25lZCBsb25n IGVpcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGZz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZ3M7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVidWdy ZWdbOF07CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyLCB0cmFwX25vLCBlcnJvcl9jb2RlOwoK ICAgICAgICB1bmlvbiBpMzg3X3VuaW9uIGkzODc7CgogICAgICAgIHN0cnVjdCB2bTg2X3N0cnVj dCAqIHZtODZfaW5mbzsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAgICAg ICAgdW5zaWduZWQgbG9uZyB2ODZmbGFncywgdjg2bWFzaywgdjg2bW9kZSwgc2F2ZWRfZXNwMDsK CiAgICAgICAgaW50IGlvcGVybTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlvX2JpdG1hcFszMiAr MV07Cn07CiMgNDI0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3Ry dWN0IHRhc2tfc3RydWN0OwpzdHJ1Y3QgbW1fc3RydWN0OwoKCmV4dGVybiB2b2lkIHJlbGVhc2Vf dGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCgoKZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFk KGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKCgpl eHRlcm4gdm9pZCBjb3B5X3NlZ21lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1t X3N0cnVjdCAqIG1tKTsKZXh0ZXJuIHZvaWQgcmVsZWFzZV9zZWdtZW50cyhzdHJ1Y3QgbW1fc3Ry dWN0ICogbW0pOwoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9w YyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCkKewogICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGxv bmcgKil0LT5lc3ApWzNdOwp9Cgp1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19z dHJ1Y3QgKnApOwojIDQ1OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi CnN0cnVjdCBtaWNyb2NvZGUgewogICAgICAgIHVuc2lnbmVkIGludCBoZHJ2ZXI7CiAgICAgICAg dW5zaWduZWQgaW50IHJldjsKICAgICAgICB1bnNpZ25lZCBpbnQgZGF0ZTsKICAgICAgICB1bnNp Z25lZCBpbnQgc2lnOwogICAgICAgIHVuc2lnbmVkIGludCBja3N1bTsKICAgICAgICB1bnNpZ25l ZCBpbnQgbGRydmVyOwogICAgICAgIHVuc2lnbmVkIGludCBwZjsKICAgICAgICB1bnNpZ25lZCBp bnQgcmVzZXJ2ZWRbNV07CiAgICAgICAgdW5zaWduZWQgaW50IGJpdHNbNTAwXTsKfTsKCgoKCgpz dGF0aWMgaW5saW5lIHZvaWQgcmVwX25vcCh2b2lkKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18oInJlcDtub3AiKTsKfQojIDE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3By ZWZldGNoLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9jYWNoZS5oIiAxCiMg MTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMgojIDQzICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBw cmVmZXRjaChjb25zdCB2b2lkICp4KSB7O30KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRj aHcoY29uc3Qgdm9pZCAqeCkgezt9CiMgNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9s aXN0LmgiIDIKIyAxOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0cnVj dCBsaXN0X2hlYWQgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2Owp9Owoj IDM3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIF9faW5saW5l X18gdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKiBuZXcsCiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCAqIHByZXYsCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCnsKICAg ICAgICBuZXh0LT5wcmV2ID0gbmV3OwogICAgICAgIG5ldy0+bmV4dCA9IG5leHQ7CiAgICAgICAg bmV3LT5wcmV2ID0gcHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3Owp9CiMgNTUgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxp c3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewog ICAgICAgIF9fbGlzdF9hZGQobmV3LCBoZWFkLCBoZWFkLT5uZXh0KTsKfQojIDY4ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0 X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkK ewogICAgICAgIF9fbGlzdF9hZGQobmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKfQojIDgwICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBf X2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCnsKICAgICAgICBuZXh0LT5wcmV2 ID0gcHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKfQoKCgoKCgpzdGF0aWMgX19pbmxp bmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAgICAgX19s aXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwp9CgoKCgoKc3RhdGljIF9faW5saW5l X18gdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAgICAg X19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwogICAgICAgIGRvIHsgKGVudHJ5 KS0+bmV4dCA9IChlbnRyeSk7IChlbnRyeSktPnByZXYgPSAoZW50cnkpOyB9IHdoaWxlICgwKTsK fQoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQg KmhlYWQpCnsKICAgICAgICByZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOwp9CgoKCgoKCnN0YXRp YyBfX2lubGluZV9fIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3Ry dWN0IGxpc3RfaGVhZCAqaGVhZCkKewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0g bGlzdC0+bmV4dDsKCiAgICAgICAgaWYgKGZpcnN0ICE9IGxpc3QpIHsKICAgICAgICAgICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgKmxhc3QgPSBsaXN0LT5wcmV2OwogICAgICAgICAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCAqYXQgPSBoZWFkLT5uZXh0OwoKICAgICAgICAgICAgICAgIGZpcnN0LT5w cmV2ID0gaGVhZDsKICAgICAgICAgICAgICAgIGhlYWQtPm5leHQgPSBmaXJzdDsKCiAgICAgICAg ICAgICAgICBsYXN0LT5uZXh0ID0gYXQ7CiAgICAgICAgICAgICAgICBhdC0+cHJldiA9IGxhc3Q7 CiAgICAgICAgfQp9CiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgi IDIKIyAyNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2Fz bS9hdG9taWMuaCIgMgojIDIyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIK dHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIyA1MyAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIHZv aWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCnsKICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJhZGRsICUxLCUwIgogICAgICAgICAgICAgICAg OiI9bSIgKHYtPmNvdW50ZXIpCiAgICAgICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291 bnRlcikpOwp9CiMgNjkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0 aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMSwlMCIK ICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJpciIg KGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKfQojIDg3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2Fz bS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50 IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJzdWJsICUyLCUwOyBzZXRlICUx IgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAg ICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICBy ZXR1cm4gYzsKfQojIDEwNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0 YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKewogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiIgImluY2wgJTAiCiAgICAgICAg ICAgICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50 ZXIpKTsKfQojIDEyMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRp YyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiIgImRlY2wgJTAiCiAgICAgICAgICAg ICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIp KTsKfQojIDEzNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRpYyBf X2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQp7CiAgICAgICAg dW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAg ICAgICAgICIiICJkZWNsICUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNv dW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpIDogIm1l bW9yeSIpOwogICAgICAgIHJldHVybiBjICE9IDA7Cn0KIyAxNTcgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRf dGVzdChhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiaW5jbCAlMDsgc2V0ZSAlMSIK ICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAg ICAgICA6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAhPSAw Owp9CiMgMTc4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9f aW5saW5lX18gaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQp7CiAg ICAgICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAg ICAgICAgICAgICAgICIiICJhZGRsICUyLCUwOyBzZXRzICUxIgogICAgICAgICAgICAgICAgOiI9 bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0i ICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYzsKfQojIDI2ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIiAyCgoKc3RydWN0IGV4Y2VwdGlvbl90 YWJsZV9lbnRyeTsKCgpzdHJ1Y3Qga2VybmVsX3N5bQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2 YWx1ZTsKICAgICAgICBjaGFyIG5hbWVbNjBdOwp9OwoKc3RydWN0IG1vZHVsZV9zeW1ib2wKewog ICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKfTsK CnN0cnVjdCBtb2R1bGVfcmVmCnsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpkZXA7CiAgICAgICAg c3RydWN0IG1vZHVsZSAqcmVmOwogICAgICAgIHN0cnVjdCBtb2R1bGVfcmVmICpuZXh0X3JlZjsK fTsKCgpzdHJ1Y3QgbW9kdWxlX3BlcnNpc3Q7CgpzdHJ1Y3QgbW9kdWxlCnsKICAgICAgICB1bnNp Z25lZCBsb25nIHNpemVfb2Zfc3RydWN0OwogICAgICAgIHN0cnVjdCBtb2R1bGUgKm5leHQ7CiAg ICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CgogICAg ICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAgYXRvbWljX3QgdXNlY291bnQ7CiAg ICAgICAgICAgICAgICBsb25nIHBhZDsKICAgICAgICB9IHVjOwoKICAgICAgICB1bnNpZ25lZCBs b25nIGZsYWdzOwoKICAgICAgICB1bnNpZ25lZCBuc3ltczsKICAgICAgICB1bnNpZ25lZCBuZGVw czsKCiAgICAgICAgc3RydWN0IG1vZHVsZV9zeW1ib2wgKnN5bXM7CiAgICAgICAgc3RydWN0IG1v ZHVsZV9yZWYgKmRlcHM7CiAgICAgICAgc3RydWN0IG1vZHVsZV9yZWYgKnJlZnM7CiAgICAgICAg aW50ICgqaW5pdCkodm9pZCk7CiAgICAgICAgdm9pZCAoKmNsZWFudXApKHZvaWQpOwogICAgICAg IGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4X3RhYmxlX3N0YXJ0OwogICAg ICAgIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4X3RhYmxlX2VuZDsKCgoK CgoKICAgICAgICBjb25zdCBzdHJ1Y3QgbW9kdWxlX3BlcnNpc3QgKnBlcnNpc3Rfc3RhcnQ7CiAg ICAgICAgY29uc3Qgc3RydWN0IG1vZHVsZV9wZXJzaXN0ICpwZXJzaXN0X2VuZDsKICAgICAgICBp bnQgKCpjYW5fdW5sb2FkKSh2b2lkKTsKICAgICAgICBpbnQgcnVuc2l6ZTsKICAgICAgICBjb25z dCBjaGFyICprYWxsc3ltc19zdGFydDsKICAgICAgICBjb25zdCBjaGFyICprYWxsc3ltc19lbmQ7 CiAgICAgICAgY29uc3QgY2hhciAqYXJjaGRhdGFfc3RhcnQ7CiAgICAgICAgY29uc3QgY2hhciAq YXJjaGRhdGFfZW5kOwogICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9kYXRhOwp9OwoKc3RydWN0 IG1vZHVsZV9pbmZvCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgbG9uZyB1 c2Vjb3VudDsKfTsKIyAxODMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgi CmV4dGVybiB2b2lkIGludGVyX21vZHVsZV9yZWdpc3Rlcihjb25zdCBjaGFyICosIHN0cnVjdCBt b2R1bGUgKiwgY29uc3Qgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0 ZXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29u c3QgY2hhciAqKTsKZXh0ZXJuIGNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXRfcmVxdWVzdChj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIGludGVyX21vZHVsZV9wdXQo Y29uc3QgY2hhciAqKTsKCnN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnkgewogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBjb25zdCBjaGFyICppbV9uYW1lOwogICAgICAgIHN0 cnVjdCBtb2R1bGUgKm93bmVyOwogICAgICAgIGNvbnN0IHZvaWQgKnVzZXJkYXRhOwp9OwoKZXh0 ZXJuIGludCB0cnlfaW5jX21vZF9jb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOwojIDMyNSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKZXh0ZXJuIHN0cnVjdCBtb2R1bGUg Km1vZHVsZV9saXN0OwojIDE0NyAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2tlcm5lbC5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wbGQtbGludXgvMy4wLjEvaW5j bHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wbGQtbGludXgv My4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251 Y192YV9saXN0OwojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBsZC1saW51eC8zLjAuMS9p bmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAxMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bGlua2FnZS5oIiAyCiMgMTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgMTMgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9jb25maWcuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlw ZXMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDUg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgojIDM2ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiCnR5cGVkZWYgc3RydWN0IHsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZkc19iaXRzIFsoMTAyNC8oOCAqIHNpemVvZih1bnNpZ25l ZCBsb25nKSkpXTsKfSBfX2tlcm5lbF9mZF9zZXQ7CgoKdHlwZWRlZiB2b2lkICgqX19rZXJuZWxf c2lnaGFuZGxlcl90KShpbnQpOwoKCnR5cGVkZWYgaW50IF9fa2VybmVsX2tleV90OwoKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIiAxCiMgMTAgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg X19rZXJuZWxfZGV2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2tlcm5lbF9pbm9fdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgX19rZXJuZWxfbmxpbmtfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX29mZl90Owp0eXBlZGVm IGludCBfX2tlcm5lbF9waWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9pcGNf cGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfdWlkX3Q7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVs X3NpemVfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfc3NpemVfdDsKdHlwZWRlZiBpbnQgX19rZXJu ZWxfcHRyZGlmZl90Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfdGltZV90Owp0eXBlZGVmIGxvbmcg X19rZXJuZWxfc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5lbF9jbG9ja190Owp0eXBl ZGVmIGludCBfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNoYXIgKiBfX2tlcm5lbF9jYWRkcl90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZDE2X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgX19rZXJuZWxfZ2lkMTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxf dWlkMzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfZ2lkMzJfdDsKCnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IF9fa2VybmVsX29sZF9naWRfdDsKCgp0eXBlZGVmIGxvbmcgbG9uZyBfX2tlcm5lbF9sb2ZmX3Q7 CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgICAgICBpbnQgdmFsWzJdOwoKCgp9IF9fa2VybmVsX2Zz aWRfdDsKIyA0NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAy CiMgOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiIDIKCgoKdHlwZWRlZiBfX2tlcm5lbF9mZF9zZXQgZmRfc2V0Owp0 eXBlZGVmIF9fa2VybmVsX2Rldl90IGRldl90Owp0eXBlZGVmIF9fa2VybmVsX2lub190IGlub190 Owp0eXBlZGVmIF9fa2VybmVsX21vZGVfdCBtb2RlX3Q7CnR5cGVkZWYgX19rZXJuZWxfbmxpbmtf dCBubGlua190Owp0eXBlZGVmIF9fa2VybmVsX29mZl90IG9mZl90Owp0eXBlZGVmIF9fa2VybmVs X3BpZF90IHBpZF90Owp0eXBlZGVmIF9fa2VybmVsX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBf X2tlcm5lbF9rZXlfdCBrZXlfdDsKdHlwZWRlZiBfX2tlcm5lbF9zdXNlY29uZHNfdCBzdXNlY29u ZHNfdDsKCgp0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxf Z2lkMzJfdCBnaWRfdDsKdHlwZWRlZiBfX2tlcm5lbF91aWQxNl90IHVpZDE2X3Q7CnR5cGVkZWYg X19rZXJuZWxfZ2lkMTZfdCBnaWQxNl90OwoKCgp0eXBlZGVmIF9fa2VybmVsX29sZF91aWRfdCBv bGRfdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfb2xkX2dpZF90IG9sZF9naWRfdDsKIyA0NSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIgp0eXBlZGVmIF9fa2VybmVsX2xvZmZf dCBsb2ZmX3Q7CiMgNTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIKdHlw ZWRlZiBfX2tlcm5lbF9zaXplX3Qgc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9zc2l6ZV90 IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fa2VybmVsX3B0cmRpZmZfdCBwdHJkaWZmX3Q7CgoKCgp0 eXBlZGVmIF9fa2VybmVsX3RpbWVfdCB0aW1lX3Q7CgoKCgp0eXBlZGVmIF9fa2VybmVsX2Nsb2Nr X3QgY2xvY2tfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25n OwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg dXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dWxvbmc7CgoKCgp0eXBlZGVmIF9fdTggdV9pbnQ4X3Q7CnR5cGVkZWYgX19zOCBpbnQ4X3Q7CnR5 cGVkZWYgX191MTYgdV9pbnQxNl90Owp0eXBlZGVmIF9fczE2IGludDE2X3Q7CnR5cGVkZWYgX191 MzIgdV9pbnQzMl90Owp0eXBlZGVmIF9fczMyIGludDMyX3Q7CgoKCnR5cGVkZWYgX191OCB1aW50 OF90Owp0eXBlZGVmIF9fdTE2IHVpbnQxNl90Owp0eXBlZGVmIF9fdTMyIHVpbnQzMl90OwoKCnR5 cGVkZWYgX191NjQgdWludDY0X3Q7CnR5cGVkZWYgX191NjQgdV9pbnQ2NF90Owp0eXBlZGVmIF9f czY0IGludDY0X3Q7CiMgMTIzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgi CnN0cnVjdCB1c3RhdCB7CiAgICAgICAgX19rZXJuZWxfZGFkZHJfdCBmX3RmcmVlOwogICAgICAg IF9fa2VybmVsX2lub190IGZfdGlub2RlOwogICAgICAgIGNoYXIgZl9mbmFtZVs2XTsKICAgICAg ICBjaGFyIGZfZnBhY2tbNl07Cn07CiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv a2VybmVsLmgiIDIKIyA0OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIK c3RydWN0IGNvbXBsZXRpb247CgpleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpwYW5pY19u b3RpZmllcl9saXN0OwogICAgICAgICAgIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqIGZtdCwgLi4u KQogICAgICAgIF9fYXR0cmlidXRlX18gKChub3JldHVybiwgZm9ybWF0IChwcmludGYsIDEsIDIp KSk7CiAgICAgICAgICAgdm9pZCBkb19leGl0KGxvbmcgZXJyb3JfY29kZSkKICAgICAgICBfX2F0 dHJpYnV0ZV9fKChub3JldHVybikpOwogICAgICAgICAgIHZvaWQgY29tcGxldGVfYW5kX2V4aXQo c3RydWN0IGNvbXBsZXRpb24gKiwgbG9uZykKICAgICAgICBfX2F0dHJpYnV0ZV9fKChub3JldHVy bikpOwpleHRlcm4gaW50IGFicyhpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBzaW1wbGVfc3Ry dG91bChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gbG9uZyBzaW1w bGVfc3RydG9sKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2ln bmVkIGludCk7CmV4dGVybiBsb25nIGxvbmcgc2ltcGxlX3N0cnRvbGwoY29uc3QgY2hhciAqLGNo YXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0 IGNoYXIgKiBmbXQsIC4uLik7CmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBj aGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IHNucHJpbnRmKGNoYXIgKiBidWYsIHNpemVfdCBz aXplLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CmV4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKmJ1 Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKCmV4dGVybiBp bnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCiAgICAgICAgX19hdHRy aWJ1dGVfXyAoKGZvcm1hdCAoc2NhbmYsMiwzKSkpOwpleHRlcm4gaW50IHZzc2NhbmYoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwoKZXh0ZXJuIGludCBnZXRfb3B0aW9uKGNo YXIgKipzdHIsIGludCAqcGludCk7CmV4dGVybiBjaGFyICpnZXRfb3B0aW9ucyhjaGFyICpzdHIs IGludCBuaW50cywgaW50ICppbnRzKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1wYXJz ZShjaGFyICpwdHIsIGNoYXIgKipyZXRwdHIpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfbG9jayh2 b2lkKTsKZXh0ZXJuIHZvaWQgZGV2X3Byb2JlX3VubG9jayh2b2lkKTsKCmV4dGVybiBpbnQgc2Vz c2lvbl9vZl9wZ3JwKGludCBwZ3JwKTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgaW50 IHByaW50ayhjb25zdCBjaGFyICogZm10LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZv cm1hdCAocHJpbnRmLCAxLCAyKSkpOwoKZXh0ZXJuIGludCBjb25zb2xlX2xvZ2xldmVsOwoKc3Rh dGljIGlubGluZSB2b2lkIGNvbnNvbGVfc2lsZW50KHZvaWQpCnsKICAgICAgICBjb25zb2xlX2xv Z2xldmVsID0gMDsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfdmVyYm9zZSh2b2lkKQp7 CiAgICAgICAgaWYgKGNvbnNvbGVfbG9nbGV2ZWwpCiAgICAgICAgICAgICAgICBjb25zb2xlX2xv Z2xldmVsID0gMTU7Cn0KCmV4dGVybiB2b2lkIGJ1c3Rfc3BpbmxvY2tzKGludCB5ZXMpOwpleHRl cm4gaW50IG9vcHNfaW5fcHJvZ3Jlc3M7CgpleHRlcm4gaW50IHRhaW50ZWQ7CmV4dGVybiBjb25z dCBjaGFyICpwcmludF90YWludGVkKHZvaWQpOwojIDE2MCAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9rZXJuZWwuaCIKc3RydWN0IHN5c2luZm8gewogICAgICAgIGxvbmcgdXB0aW1lOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZHNbM107CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3Rh bHJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVyYW07CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzaGFyZWRyYW07CiAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJyYW07CiAgICAgICAgdW5z aWduZWQgbG9uZyB0b3RhbHN3YXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVlc3dhcDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBwcm9jczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CiAg ICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVl aGlnaDsKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CiAgICAgICAgY2hhciBfZlsyMC0y KnNpemVvZihsb25nKS1zaXplb2YoaW50KV07Cn07CiMgMTQ4ICI4MTM5dG9vLmMiIDIKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIiAxCiMgMjc2ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3BjaS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv cGNpX2lkcy5oIiAxCiMgMjc3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIiAy CiMgMjk5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDMwMCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyAzMDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIiAxCiMgMTUgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvaW9wb3J0LmgiCnN0cnVjdCByZXNvdXJjZSB7CiAgICAgICAg Y29uc3QgY2hhciAqbmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwg KnNpYmxpbmcsICpjaGlsZDsKfTsKCnN0cnVjdCByZXNvdXJjZV9saXN0IHsKICAgICAgICBzdHJ1 Y3QgcmVzb3VyY2VfbGlzdCAqbmV4dDsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKICAg ICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2Owp9OwojIDgzICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L2lvcG9ydC5oIgpleHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZTsK ZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZTsKCmV4dGVybiBpbnQgZ2V0X3Jl c291cmNlX2xpc3Qoc3RydWN0IHJlc291cmNlICosIGNoYXIgKmJ1ZiwgaW50IHNpemUpOwoKZXh0 ZXJuIGludCBjaGVja19yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHVuc2lnbmVkIGxv bmcsIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gaW50IHJlcXVlc3RfcmVzb3VyY2Uoc3RydWN0IHJl c291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldyk7CmV4dGVybiBpbnQgcmVsZWFzZV9y ZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKm5ldyk7CmV4dGVybiBpbnQgYWxsb2NhdGVfcmVzb3Vy Y2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwg dW5zaWduZWQgbG9uZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYWxpZ25m X2RhdGEpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKiBfX3JlcXVlc3RfcmVnaW9uKHN0 cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNv bnN0IGNoYXIgKm5hbWUpOwoKCgoKCgoKZXh0ZXJuIGludCBfX2NoZWNrX3JlZ2lvbihzdHJ1Y3Qg cmVzb3VyY2UgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIF9f cmVsZWFzZV9yZWdpb24oc3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk IGxvbmcpOwoKCgoKCmV4dGVybiB2b2lkIGF1dG9pcnFfc2V0dXAoaW50IHdhaXR0aW1lKTsKZXh0 ZXJuIGludCBhdXRvaXJxX3JlcG9ydChpbnQgd2FpdHRpbWUpOwojIDMwMiAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvbGlzdC5oIiAxCiMgMzAzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxCgoKCiMgMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9hc20vZXJybm8uaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvZXJybm8uaCIgMgojIDMwNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9wY2kuaCIgMgoKCmVudW0gcGNpX21tYXBfc3RhdGUgewogICAgICAgIHBjaV9tbWFwX2lvLAog ICAgICAgIHBjaV9tbWFwX21lbQp9OwojIDMzNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9wY2kuaCIKc3RydWN0IHBjaV9kZXYgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFs X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsKICAgICAgICBzdHJ1Y3Qg cGNpX2J1cyAqYnVzOwogICAgICAgIHN0cnVjdCBwY2lfYnVzICpzdWJvcmRpbmF0ZTsKCiAgICAg ICAgdm9pZCAqc3lzZGF0YTsKICAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NlbnQ7 CgogICAgICAgIHVuc2lnbmVkIGludCBkZXZmbjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZW5k b3I7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHN1YnN5c3RlbV92ZW5kb3I7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX2Rldmlj ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgY2xhc3M7CiAgICAgICAgdTggaGRyX3R5cGU7CiAgICAg ICAgdTggcm9tX2Jhc2VfcmVnOwoKICAgICAgICBzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyOwog ICAgICAgIHZvaWQgKmRyaXZlcl9kYXRhOwogICAgICAgIHU2NCBkbWFfbWFzazsKCgoKCgogICAg ICAgIHUzMiBjdXJyZW50X3N0YXRlOwoKCgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZW5kb3Jf Y29tcGF0aWJsZVs0XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfY29tcGF0aWJsZVs0 XTsKCgoKCgogICAgICAgIHVuc2lnbmVkIGludCBpcnE7CiAgICAgICAgc3RydWN0IHJlc291cmNl IHJlc291cmNlWzEyXTsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgZG1hX3Jlc291cmNlWzJdOwog ICAgICAgIHN0cnVjdCByZXNvdXJjZSBpcnFfcmVzb3VyY2VbMl07CgogICAgICAgIGNoYXIgbmFt ZVs4MF07CiAgICAgICAgY2hhciBzbG90X25hbWVbOF07CiAgICAgICAgaW50IGFjdGl2ZTsKICAg ICAgICBpbnQgcm87CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnczsKCiAgICAgICAgaW50ICgq cHJlcGFyZSkoc3RydWN0IHBjaV9kZXYgKmRldik7CiAgICAgICAgaW50ICgqYWN0aXZhdGUpKHN0 cnVjdCBwY2lfZGV2ICpkZXYpOwogICAgICAgIGludCAoKmRlYWN0aXZhdGUpKHN0cnVjdCBwY2lf ZGV2ICpkZXYpOwp9OwojIDQwNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9wY2kuaCIK c3RydWN0IHBjaV9idXMgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKICAgICAgICBz dHJ1Y3QgcGNpX2J1cyAqcGFyZW50OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogICAgICAgIHN0cnVjdCBwY2lfZGV2 ICpzZWxmOwogICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2VbNF07CgogICAgICAgIHN0 cnVjdCBwY2lfb3BzICpvcHM7CiAgICAgICAgdm9pZCAqc3lzZGF0YTsKICAgICAgICBzdHJ1Y3Qg cHJvY19kaXJfZW50cnkgKnByb2NkaXI7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgbnVtYmVyOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFyeTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNlY29u ZGFyeTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHN1Ym9yZGluYXRlOwoKICAgICAgICBjaGFyIG5h bWVbNDhdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHZlbmRvcjsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBkZXZpY2U7CiAgICAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHBucHZlcjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHByb2R1Y3R2ZXI7CiAgICAgICAg dW5zaWduZWQgY2hhciBjaGVja3N1bTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZDE7Cn07CgoK CmV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBjaV9yb290X2J1c2VzOwpleHRlcm4gc3RydWN0IGxp c3RfaGVhZCBwY2lfZGV2aWNlczsKIyA0NTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv cGNpLmgiCnN0cnVjdCBwY2lfb3BzIHsKICAgICAgICBpbnQgKCpyZWFkX2J5dGUpKHN0cnVjdCBw Y2lfZGV2ICosIGludCB3aGVyZSwgdTggKnZhbCk7CiAgICAgICAgaW50ICgqcmVhZF93b3JkKShz dHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHUxNiAqdmFsKTsKICAgICAgICBpbnQgKCpyZWFk X2R3b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHUzMiAqdmFsKTsKICAgICAgICBp bnQgKCp3cml0ZV9ieXRlKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHU4IHZhbCk7CiAg ICAgICAgaW50ICgqd3JpdGVfd29yZCkoc3RydWN0IHBjaV9kZXYgKiwgaW50IHdoZXJlLCB1MTYg dmFsKTsKICAgICAgICBpbnQgKCp3cml0ZV9kd29yZCkoc3RydWN0IHBjaV9kZXYgKiwgaW50IHdo ZXJlLCB1MzIgdmFsKTsKfTsKCnN0cnVjdCBwYnVzX3NldF9yYW5nZXNfZGF0YQp7CiAgICAgICAg aW50IGZvdW5kX3ZnYTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlvX3N0YXJ0LCBpb19lbmQ7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9lbmQ7Cn07CgpzdHJ1Y3QgcGNpX2Rl dmljZV9pZCB7CiAgICAgICAgdW5zaWduZWQgaW50IHZlbmRvciwgZGV2aWNlOwogICAgICAgIHVu c2lnbmVkIGludCBzdWJ2ZW5kb3IsIHN1YmRldmljZTsKICAgICAgICB1bnNpZ25lZCBpbnQgY2xh c3MsIGNsYXNzX21hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsKfTsKCnN0 cnVjdCBwY2lfZHJpdmVyIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAgICAgICAg Y2hhciAqbmFtZTsKICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfdGFibGU7 CiAgICAgICAgaW50ICgqcHJvYmUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qg cGNpX2RldmljZV9pZCAqaWQpOwogICAgICAgIHZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgcGNpX2Rl diAqZGV2KTsKICAgICAgICBpbnQgKCpzYXZlX3N0YXRlKSAoc3RydWN0IHBjaV9kZXYgKmRldiwg dTMyIHN0YXRlKTsKICAgICAgICBpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1 MzIgc3RhdGUpOwogICAgICAgIGludCAoKnJlc3VtZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwog ICAgICAgIGludCAoKmVuYWJsZV93YWtlKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRl LCBpbnQgZW5hYmxlKTsKfTsKIyA0OTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGNp LmgiCnZvaWQgcGNpYmlvc19pbml0KHZvaWQpOwp2b2lkIHBjaWJpb3NfZml4dXBfYnVzKHN0cnVj dCBwY2lfYnVzICopOwppbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICop OwpjaGFyICpwY2liaW9zX3NldHVwIChjaGFyICpzdHIpOwoKCnZvaWQgcGNpYmlvc19hbGlnbl9y ZXNvdXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nKTsKdm9pZCBw Y2liaW9zX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2Ug KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKiwgaW50KTsK dm9pZCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgaW50IGlycSk7CnZvaWQg cGNpYmlvc19maXh1cF9wYnVzX3JhbmdlcyhzdHJ1Y3QgcGNpX2J1cyAqLCBzdHJ1Y3QgcGJ1c19z ZXRfcmFuZ2VzX2RhdGEgKik7CgoKCmludCBwY2liaW9zX3ByZXNlbnQodm9pZCk7CmludCBwY2li aW9zX3JlYWRfY29uZmlnX2J5dGUgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRl dl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwg dW5zaWduZWQgY2hhciAqdmFsKTsKaW50IHBjaWJpb3NfcmVhZF9jb25maWdfd29yZCAodW5zaWdu ZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBzaG9ydCAqdmFsKTsKaW50IHBj aWJpb3NfcmVhZF9jb25maWdfZHdvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFy IGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hl cmUsIHVuc2lnbmVkIGludCAqdmFsKTsKaW50IHBjaWJpb3Nfd3JpdGVfY29uZmlnX2J5dGUgKHVu c2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIGNoYXIgdmFsKTsKaW50 IHBjaWJpb3Nfd3JpdGVfY29uZmlnX3dvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBj aGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg d2hlcmUsIHVuc2lnbmVkIHNob3J0IHZhbCk7CmludCBwY2liaW9zX3dyaXRlX2NvbmZpZ19kd29y ZCAodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIGludCB2YWwp OwppbnQgcGNpYmlvc19maW5kX2NsYXNzICh1bnNpZ25lZCBpbnQgY2xhc3NfY29kZSwgdW5zaWdu ZWQgc2hvcnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywgdW5zaWduZWQgY2hhciAqZGV2X2Zu KTsKaW50IHBjaWJpb3NfZmluZF9kZXZpY2UgKHVuc2lnbmVkIHNob3J0IHZlbmRvciwgdW5zaWdu ZWQgc2hvcnQgZGV2X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg aW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKmRldl9mbik7CgoKCnZvaWQgcGNpX2luaXQodm9pZCk7CmludCBwY2lfYnVzX2V4 aXN0cyhjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbnIpOwpzdHJ1Y3QgcGNpX2J1 cyAqcGNpX3NjYW5fYnVzKGludCBidXMsIHN0cnVjdCBwY2lfb3BzICpvcHMsIHZvaWQgKnN5c2Rh dGEpOwpzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FsbG9jX3ByaW1hcnlfYnVzKGludCBidXMpOwpzdHJ1 Y3QgcGNpX2RldiAqcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2RldiAqdGVtcCk7CmludCBwY2lf cHJvY19hdHRhY2hfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwppbnQgcGNpX3Byb2NfZGV0 YWNoX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKdm9pZCBwY2lfbmFtZV9kZXZpY2Uoc3Ry dWN0IHBjaV9kZXYgKmRldik7CmNoYXIgKnBjaV9jbGFzc19uYW1lKHUzMiBjbGFzcyk7CnZvaWQg cGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCk7CnN0cnVjdCByZXNv dXJjZSAqcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYs IHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9k ZXYgKmRldik7CmludCBwY2lfZ2V0X2ludGVycnVwdF9waW4oc3RydWN0IHBjaV9kZXYgKmRldiwg c3RydWN0IHBjaV9kZXYgKipicmlkZ2UpOwoKCgpzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2 aWNlICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1 Y3QgcGNpX2RldiAqZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zdWJzeXMgKHVuc2ln bmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzc192ZW5kb3IsIHVuc2lnbmVkIGludCBzc19kZXZp Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2 ICpmcm9tKTsKc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2NsYXNzICh1bnNpZ25lZCBpbnQgY2xh c3MsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKc3RydWN0IHBjaV9kZXYgKnBjaV9maW5k X3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CmludCBwY2lfZmlu ZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKCmludCBwY2lfcmVh ZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4ICp2YWwpOwpp bnQgcGNpX3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1 MTYgKnZhbCk7CmludCBwY2lfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwg aW50IHdoZXJlLCB1MzIgKnZhbCk7CmludCBwY2lfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBj aV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCB2YWwpOwppbnQgcGNpX3dyaXRlX2NvbmZpZ193b3Jk KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2IHZhbCk7CmludCBwY2lfd3JpdGVf Y29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyIHZhbCk7Cgpp bnQgcGNpX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CnZvaWQgcGNpX2Rpc2Fi bGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp2b2lkIHBjaV9zZXRfbWFzdGVyKHN0cnVj dCBwY2lfZGV2ICpkZXYpOwppbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2 LCB1NjQgbWFzayk7CmludCBwY2lfZGFjX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2 LCB1NjQgbWFzayk7CmludCBwY2lfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYs IGludCBpKTsKCgppbnQgcGNpX3NhdmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyICpi dWZmZXIpOwppbnQgcGNpX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyICpi dWZmZXIpOwppbnQgcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQg c3RhdGUpOwppbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0 ZSwgaW50IGVuYWJsZSk7CgoKCmludCBwY2lfY2xhaW1fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYg KiwgaW50KTsKdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwp2b2lk IHBkZXZfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKdm9pZCBwZGV2X3NvcnRfcmVz b3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCByZXNvdXJjZV9saXN0ICosIHUzMik7CnVu c2lnbmVkIGxvbmcgcGNpX2JyaWRnZV9jaGVja19pbyhzdHJ1Y3QgcGNpX2RldiAqKTsKdm9pZCBw Y2lfZml4dXBfaXJxcyh1OCAoKikoc3RydWN0IHBjaV9kZXYgKiwgdTggKiksCiAgICAgICAgICAg ICAgICAgICAgaW50ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCwgdTgpKTsKCmludCBwY2lfcmVx dWVzdF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICosIGNoYXIgKik7CnZvaWQgcGNpX3JlbGVhc2Vf cmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqKTsKCgppbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1 Y3QgcGNpX2RyaXZlciAqKTsKdm9pZCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9k cml2ZXIgKik7CnZvaWQgcGNpX2luc2VydF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0 IHBjaV9idXMgKik7CnZvaWQgcGNpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CnN0 cnVjdCBwY2lfZHJpdmVyICpwY2lfZGV2X2RyaXZlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqKTsK Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0 IHBjaV9kZXZpY2VfaWQgKmlkcywgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldik7CgoKc3RydWN0 IHBjaV9wb29sICpwY2lfcG9vbF9jcmVhdGUgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwY2lf ZGV2ICpkZXYsCiAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXpl X3QgYWxsb2NhdGlvbiwgaW50IGZsYWdzKTsKdm9pZCBwY2lfcG9vbF9kZXN0cm95IChzdHJ1Y3Qg cGNpX3Bvb2wgKnBvb2wpOwoKdm9pZCAqcGNpX3Bvb2xfYWxsb2MgKHN0cnVjdCBwY2lfcG9vbCAq cG9vbCwgaW50IGZsYWdzLCBkbWFfYWRkcl90ICpoYW5kbGUpOwp2b2lkIHBjaV9wb29sX2ZyZWUg KHN0cnVjdCBwY2lfcG9vbCAqcG9vbCwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgYWRkcik7CgoK CgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIgMQoKCgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2FzbS9wY2kuaCIgMgojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wY2ku aCIKZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKHZvaWQpOwoK CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydDsKCgoKdm9pZCBwY2liaW9zX3Nl dF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CnZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2Ff aXJxKGludCBpcnEpOwoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBl cy5oIiAxCiMgMzAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbGFiLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9zbGFiLmgiCnR5cGVkZWYgc3RydWN0IGttZW1fY2FjaGVfcyBrbWVtX2Nh Y2hlX3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMQoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3NjaGVkLmgiIDIKCmV4dGVybiB1bnNpZ25lZCBsb25nIGV2ZW50OwoKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9iaW5mbXRzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3B0cmFj ZS5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcHRyYWNlLmgiCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAyNiAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9hc20vcHRyYWNlLmgiCnN0cnVjdCBwdF9yZWdzIHsKICAgICAgICBsb25nIGVi eDsKICAgICAgICBsb25nIGVjeDsKICAgICAgICBsb25nIGVkeDsKICAgICAgICBsb25nIGVzaTsK ICAgICAgICBsb25nIGVkaTsKICAgICAgICBsb25nIGVicDsKICAgICAgICBsb25nIGVheDsKICAg ICAgICBpbnQgeGRzOwogICAgICAgIGludCB4ZXM7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAg ICAgICBsb25nIGVpcDsKICAgICAgICBpbnQgeGNzOwogICAgICAgIGxvbmcgZWZsYWdzOwogICAg ICAgIGxvbmcgZXNwOwogICAgICAgIGludCB4c3M7Cn07CiMgNjAgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL3B0cmFjZS5oIgpleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3Mg Kik7CiMgMjUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcHRyYWNlLmgiIDIKIyA1ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdHlwZXMuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxp dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMQojIDkgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMg MTEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0Lmgi IDEKIyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bGlzdC5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDE2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEK IyAxOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvd2FpdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vz c29yLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKIyAz MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0cnVjdCBfX3dhaXRfcXVl dWUgewogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKCiAgICAgICAgc3RydWN0IHRhc2tfc3Ry dWN0ICogdGFzazsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsKCgoKCn07CnR5 cGVkZWYgc3RydWN0IF9fd2FpdF9xdWV1ZSB3YWl0X3F1ZXVlX3Q7CiMgNzcgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIgpzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQgewogICAg ICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsK CgoKCn07CnR5cGVkZWYgc3RydWN0IF9fd2FpdF9xdWV1ZV9oZWFkIHdhaXRfcXVldWVfaGVhZF90 OwojIDE1NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9oZWFkKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoKCgog ICAgICAgIHEtPmxvY2sgPSAoc3BpbmxvY2tfdCkgeyB9OwogICAgICAgIGRvIHsgKCZxLT50YXNr X2xpc3QpLT5uZXh0ID0gKCZxLT50YXNrX2xpc3QpOyAoJnEtPnRhc2tfbGlzdCktPnByZXYgPSAo JnEtPnRhc2tfbGlzdCk7IH0gd2hpbGUgKDApOwoKCgoKfQoKc3RhdGljIGlubGluZSB2b2lkIGlu aXRfd2FpdHF1ZXVlX2VudHJ5KHdhaXRfcXVldWVfdCAqcSwgc3RydWN0IHRhc2tfc3RydWN0ICpw KQp7CgoKCgogICAgICAgIHEtPmZsYWdzID0gMDsKICAgICAgICBxLT50YXNrID0gcDsKCgoKfQoK c3RhdGljIGlubGluZSBpbnQgd2FpdHF1ZXVlX2FjdGl2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkK ewoKCgoKCgogICAgICAgIHJldHVybiAhbGlzdF9lbXB0eSgmcS0+dGFza19saXN0KTsKfQoKc3Rh dGljIGlubGluZSB2b2lkIF9fYWRkX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQs IHdhaXRfcXVldWVfdCAqbmV3KQp7CiMgMjAzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3dhaXQuaCIKICAgICAgICBsaXN0X2FkZCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNrX2xp c3QpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19hZGRfd2FpdF9xdWV1ZV90YWlsKHdhaXRf cXVldWVfaGVhZF90ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3YWl0X3F1ZXVlX3QgKm5ldykKewojIDIyMCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC93YWl0LmgiCiAgICAgICAgbGlzdF9hZGRfdGFpbCgmbmV3LT50YXNrX2xpc3Qs ICZoZWFkLT50YXNrX2xpc3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfd2FpdF9x dWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0X3F1ZXVlX3QgKm9sZCkKewoKCgoKCiAg ICAgICAgbGlzdF9kZWwoJm9sZC0+dGFza19saXN0KTsKfQojIDEzICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R5 cGVzLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC92ZnMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zdGF0 ZnMuaCIgMgoKdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QgZnNpZF90OwoKCgpzdHJ1Y3Qgc3RhdGZz IHsKICAgICAgICBsb25nIGZfdHlwZTsKICAgICAgICBsb25nIGZfYnNpemU7CiAgICAgICAgbG9u ZyBmX2Jsb2NrczsKICAgICAgICBsb25nIGZfYmZyZWU7CiAgICAgICAgbG9uZyBmX2JhdmFpbDsK ICAgICAgICBsb25nIGZfZmlsZXM7CiAgICAgICAgbG9uZyBmX2ZmcmVlOwogICAgICAgIF9fa2Vy bmVsX2ZzaWRfdCBmX2ZzaWQ7CiAgICAgICAgbG9uZyBmX25hbWVsZW47CiAgICAgICAgbG9uZyBm X3NwYXJlWzZdOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdmZzLmgiIDIK IyAxNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9uZXQuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L25ldC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgi IDEKIyAyMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZXQuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL3NvY2tldC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vc29ja2lvcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc29ja2V0 LmgiIDIKIyA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zb2NraW9zLmgiIDEKIyAyMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zb2NraW9zLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vc29ja2lvcy5oIiAxCiMgMjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc29j a2lvcy5oIiAyCiMgOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWlvLmgiIDEKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3Vpby5oIiAyCiMgMTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWlv LmgiCnN0cnVjdCBpb3ZlYwp7CiAgICAgICAgdm9pZCAqaW92X2Jhc2U7CiAgICAgICAgX19rZXJu ZWxfc2l6ZV90IGlvdl9sZW47Cn07CiMgOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z b2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQoj IDEwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCgp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IHNhX2ZhbWlseV90OwoKCgoKCnN0cnVjdCBzb2NrYWRkciB7CiAgICAgICAg c2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgICAgIGNoYXIgc2FfZGF0YVsxNF07Cn07CgpzdHJ1 Y3QgbGluZ2VyIHsKICAgICAgICBpbnQgbF9vbm9mZjsKICAgICAgICBpbnQgbF9saW5nZXI7Cn07 CgoKCgoKCgpzdHJ1Y3QgbXNnaGRyIHsKICAgICAgICB2b2lkICogbXNnX25hbWU7CiAgICAgICAg aW50IG1zZ19uYW1lbGVuOwogICAgICAgIHN0cnVjdCBpb3ZlYyAqIG1zZ19pb3Y7CiAgICAgICAg X19rZXJuZWxfc2l6ZV90IG1zZ19pb3ZsZW47CiAgICAgICAgdm9pZCAqIG1zZ19jb250cm9sOwog ICAgICAgIF9fa2VybmVsX3NpemVfdCBtc2dfY29udHJvbGxlbjsKICAgICAgICB1bnNpZ25lZCBt c2dfZmxhZ3M7Cn07CgoKCgoKCgpzdHJ1Y3QgY21zZ2hkciB7CiAgICAgICAgX19rZXJuZWxfc2l6 ZV90IGNtc2dfbGVuOwogICAgICAgIGludCBjbXNnX2xldmVsOwogICAgICAgIGludCBjbXNnX3R5 cGU7Cn07CiMgMTAyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIgpzdGF0 aWMgaW5saW5lIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19r ZXJuZWxfc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQp7CiAgICAgICAgc3RydWN0IGNtc2do ZHIgKiBfX3B0cjsKCiAgICAgICAgX19wdHIgPSAoc3RydWN0IGNtc2doZHIqKSgoKHVuc2lnbmVk IGNoYXIgKikgX19jbXNnKSArICggKChfX2Ntc2ctPmNtc2dfbGVuKStzaXplb2YobG9uZyktMSkg JiB+KHNpemVvZihsb25nKS0xKSApKTsKICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpKChjaGFy KikoX19wdHIrMSkgLSAoY2hhciAqKSBfX2N0bCkgPiBfX3NpemUpCiAgICAgICAgICAgICAgICBy ZXR1cm4gKHN0cnVjdCBjbXNnaGRyICopMDsKCiAgICAgICAgcmV0dXJuIF9fcHRyOwp9CgpzdGF0 aWMgaW5saW5lIHN0cnVjdCBjbXNnaGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9f bXNnLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQp7CiAgICAgICAgcmV0dXJuIF9fY21zZ19ueHRo ZHIoX19tc2ctPm1zZ19jb250cm9sLCBfX21zZy0+bXNnX2NvbnRyb2xsZW4sIF9fY21zZyk7Cn0K CgoKCgoKCnN0cnVjdCB1Y3JlZCB7CiAgICAgICAgX191MzIgcGlkOwogICAgICAgIF9fdTMyIHVp ZDsKICAgICAgICBfX3UzMiBnaWQ7Cn07CiMgMjQ1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3NvY2tldC5oIgpleHRlcm4gaW50IG1lbWNweV9mcm9taW92ZWModW5zaWduZWQgY2hhciAq a2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBtZW1jcHlfZnJv bWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKZXh0ZXJuIGlu dCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVu LCBpbnQgKmNzdW1wKTsKCmV4dGVybiBpbnQgdmVyaWZ5X2lvdmVjKHN0cnVjdCBtc2doZHIgKm0s IHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNzLCBpbnQgbW9kZSk7CmV4dGVybiBpbnQg bWVtY3B5X3RvaW92ZWMoc3RydWN0IGlvdmVjICp2LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50 IGxlbik7CmV4dGVybiB2b2lkIG1lbWNweV90b2tlcm5lbGlvdmVjKHN0cnVjdCBpb3ZlYyAqaW92 LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVybiBpbnQgbW92ZV9hZGRyX3Rv X3VzZXIodm9pZCAqa2FkZHIsIGludCBrbGVuLCB2b2lkICp1YWRkciwgaW50ICp1bGVuKTsKZXh0 ZXJuIGludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQgKnVhZGRyLCBpbnQgdWxlbiwgdm9pZCAq a2FkZHIpOwpleHRlcm4gaW50IHB1dF9jbXNnKHN0cnVjdCBtc2doZHIqLCBpbnQgbGV2ZWwsIGlu dCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKIyAyMyAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9uZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5o IiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0LmgiIDIKCnN0cnVjdCBw b2xsX3RhYmxlX3N0cnVjdDsKIyA0OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZXQu aCIKdHlwZWRlZiBlbnVtIHsKICBTU19GUkVFID0gMCwKICBTU19VTkNPTk5FQ1RFRCwKICBTU19D T05ORUNUSU5HLAogIFNTX0NPTk5FQ1RFRCwKICBTU19ESVNDT05ORUNUSU5HCn0gc29ja2V0X3N0 YXRlOwojIDY1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25ldC5oIgpzdHJ1Y3Qgc29j a2V0CnsKICAgICAgICBzb2NrZXRfc3RhdGUgc3RhdGU7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7CiAgICAgICAgc3RydWN0IHByb3RvX29wcyAqb3BzOwogICAgICAgIHN0cnVjdCBpbm9k ZSAqaW5vZGU7CiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19saXN0OwogICAg ICAgIHN0cnVjdCBmaWxlICpmaWxlOwogICAgICAgIHN0cnVjdCBzb2NrICpzazsKICAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwoKICAgICAgICBzaG9ydCB0eXBlOwogICAgICAgIHVuc2ln bmVkIGNoYXIgcGFzc2NyZWQ7Cn07CgoKCnN0cnVjdCBzY21fY29va2llOwpzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3Q7CnN0cnVjdCBwYWdlOwoKc3RydWN0IHByb3RvX29wcyB7CiAgaW50IGZhbWlseTsK CiAgaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBzb2NrZXQgKnNvY2spOwogIGludCAoKmJpbmQpIChz dHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVteWFkZHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc29ja2FkZHJfbGVuKTsKICBpbnQgKCpjb25uZWN0KSAoc3RydWN0 IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1c2VydmFkZHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpOwogIGludCAoKnNvY2tldHBh aXIpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrMSwgc3RydWN0IHNvY2tldCAqc29jazIpOwogIGludCAo KmFjY2VwdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIGludCAoKmdldG5hbWUpIChzdHJ1 Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICp1c29ja2FkZHJfbGVuLCBpbnQgcGVlcik7CiAgdW5zaWduZWQgaW50ICgq cG9sbCkgKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcG9s bF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogIGludCAoKmlvY3RsKSAoc3RydWN0IHNvY2tldCAqc29j aywgdW5zaWduZWQgaW50IGNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgYXJnKTsKICBpbnQgKCpsaXN0ZW4pIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVuKTsK ICBpbnQgKCpzaHV0ZG93bikgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAgaW50 ICgqc2V0c29ja29wdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvcHR2YWwsIGludCBvcHRsZW4pOwog IGludCAoKmdldHNvY2tvcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBv cHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3B0dmFsLCBpbnQgKm9wdGxl bik7CiAgaW50ICgqc2VuZG1zZykgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIg Km0sIGludCB0b3RhbF9sZW4sIHN0cnVjdCBzY21fY29va2llICpzY20pOwogIGludCAoKnJlY3Zt c2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgdG90YWxfbGVu LCBpbnQgZmxhZ3MsIHN0cnVjdCBzY21fY29va2llICpzY20pOwogIGludCAoKm1tYXApIChzdHJ1 Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICogdm1hKTsKICBzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1 Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cn07Cgpz dHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseQp7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBpbnQg KCpjcmVhdGUpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCk7CgoKICAgICAgICBz aG9ydCBhdXRoZW50aWNhdGlvbjsKICAgICAgICBzaG9ydCBlbmNyeXB0aW9uOwogICAgICAgIHNo b3J0IGVuY3J5cHRfbmV0Owp9OwoKc3RydWN0IG5ldF9wcm90bwp7CiAgICAgICAgY29uc3QgY2hh ciAqbmFtZTsKICAgICAgICB2b2lkICgqaW5pdF9mdW5jKShzdHJ1Y3QgbmV0X3Byb3RvICopOwp9 OwoKZXh0ZXJuIGludCBzb2NrX3dha2VfYXN5bmMoc3RydWN0IHNvY2tldCAqc2ssIGludCBob3cs IGludCBiYW5kKTsKZXh0ZXJuIGludCBzb2NrX3JlZ2lzdGVyKHN0cnVjdCBuZXRfcHJvdG9fZmFt aWx5ICpmYW0pOwpleHRlcm4gaW50IHNvY2tfdW5yZWdpc3RlcihpbnQgZmFtaWx5KTsKZXh0ZXJu IHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCk7CmV4dGVybiBpbnQgc29ja19jcmVhdGUo aW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90bywgc3RydWN0IHNvY2tldCAqKik7CmV4dGVy biB2b2lkIHNvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICopOwpleHRlcm4gaW50IHNvY2tfc2Vu ZG1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGludCBsZW4pOwpleHRlcm4g aW50IHNvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGludCBs ZW4sIGludCBmbGFncyk7CmV4dGVybiBpbnQgc29ja19yZWFkdl93cml0ZXYoaW50IHR5cGUsIHN0 cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKiBpb3YsIGxvbmcgY291bnQsIGxv bmcgc2l6ZSk7CgpleHRlcm4gaW50IG5ldF9yYXRlbGltaXQodm9pZCk7CmV4dGVybiB1bnNpZ25l ZCBsb25nIG5ldF9yYW5kb20odm9pZCk7CmV4dGVybiB2b2lkIG5ldF9zcmFuZG9tKHVuc2lnbmVk IGxvbmcpOwojIDE2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIiAxCiMgNjcgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgva2Rldl90LmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQga2Rldl90 OwojIDc2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIgpleHRlcm4gY29u c3QgY2hhciAqIGtkZXZuYW1lKGtkZXZfdCk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg aW50IGtkZXZfdF90b19ucihrZGV2X3QgZGV2KSB7CiAgICAgICAgcmV0dXJuICgoKHVuc2lnbmVk IGludCkgKChkZXYpID4+IDgpKTw8OCkgfCAoKHVuc2lnbmVkIGludCkgKChkZXYpICYgKCgxVSA8 PCA4KSAtIDEpKSk7Cn0KCnN0YXRpYyBpbmxpbmUga2Rldl90IHRvX2tkZXZfdChpbnQgZGV2KQp7 CiAgICAgICAgaW50IG1ham9yLCBtaW5vcjsKIyA5OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9rZGV2X3QuaCIKICAgICAgICBtYWpvciA9IChkZXYgPj4gOCk7CiAgICAgICAgbWlub3Ig PSAoZGV2ICYgMHhmZik7CgogICAgICAgIHJldHVybiAoKChtYWpvcikgPDwgOCkgfCAobWlub3Ip KTsKfQojIDE3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2FzbS9pb2N0bC5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9pb2N0bC5oIiAyCiMgMTggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTkgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvZGNhY2hlLmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2F0 b21pYy5oIiAxCiMgNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW91bnQuaCIgMQojIDE5ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L21vdW50LmgiCnN0cnVjdCB2ZnNtb3VudAp7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBtbnRfaGFzaDsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udF9w YXJlbnQ7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqbW50X21vdW50cG9pbnQ7CiAgICAgICAgc3Ry dWN0IGRlbnRyeSAqbW50X3Jvb3Q7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICptbnRfc2I7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgbW50X2NoaWxkOwogICAgICAgIGF0b21pY190IG1udF9jb3VudDsKICAgICAgICBpbnQg bW50X2ZsYWdzOwogICAgICAgIGNoYXIgKm1udF9kZXZuYW1lOwogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgbW50X2xpc3Q7Cn07CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0 KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYgKG1udCkKICAgICAgICAgICAgICAg IGF0b21pY19pbmMoJm1udC0+bW50X2NvdW50KTsKICAgICAgICByZXR1cm4gbW50Owp9CgpleHRl cm4gdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CgpzdGF0aWMgaW5saW5lIHZv aWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYgKG1udCkgewogICAg ICAgICAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1udC0+bW50X2NvdW50KSkKICAg ICAgICAgICAgICAgICAgICAgICAgX19tbnRwdXQobW50KTsKICAgICAgICB9Cn0KIyA4ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAyCiMgMjQgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0cnVjdCBxc3RyIHsKICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICogbmFtZTsKICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHVuc2ln bmVkIGludCBoYXNoOwp9OwoKc3RydWN0IGRlbnRyeV9zdGF0X3QgewogICAgICAgIGludCBucl9k ZW50cnk7CiAgICAgICAgaW50IG5yX3VudXNlZDsKICAgICAgICBpbnQgYWdlX2xpbWl0OwogICAg ICAgIGludCB3YW50X3BhZ2VzOwogICAgICAgIGludCBkdW1teVsyXTsKfTsKZXh0ZXJuIHN0cnVj dCBkZW50cnlfc3RhdF90IGRlbnRyeV9zdGF0OwoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB1bnNp Z25lZCBsb25nIHBhcnRpYWxfbmFtZV9oYXNoKHVuc2lnbmVkIGxvbmcgYywgdW5zaWduZWQgbG9u ZyBwcmV2aGFzaCkKewogICAgICAgIHJldHVybiAocHJldmhhc2ggKyAoYyA8PCA0KSArIChjID4+ IDQpKSAqIDExOwp9CgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBlbmRfbmFtZV9o YXNoKHVuc2lnbmVkIGxvbmcgaGFzaCkKewogICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KSBo YXNoOwp9CgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGZ1bGxfbmFtZV9oYXNoKGNv bnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgdW5z aWduZWQgbG9uZyBoYXNoID0gMDsKICAgICAgICB3aGlsZSAobGVuLS0pCiAgICAgICAgICAgICAg ICBoYXNoID0gcGFydGlhbF9uYW1lX2hhc2goKm5hbWUrKywgaGFzaCk7CiAgICAgICAgcmV0dXJu IGVuZF9uYW1lX2hhc2goaGFzaCk7Cn0KCgoKc3RydWN0IGRlbnRyeSB7CiAgICAgICAgYXRvbWlj X3QgZF9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgZF9mbGFnczsKICAgICAgICBzdHJ1Y3Qg aW5vZGUgKiBkX2lub2RlOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiBkX3BhcmVudDsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGRfaGFzaDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1 OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9jaGlsZDsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGRfc3ViZGlyczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRfYWxpYXM7CiAgICAgICAg aW50IGRfbW91bnRlZDsKICAgICAgICBzdHJ1Y3QgcXN0ciBkX25hbWU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBkX3RpbWU7CiAgICAgICAgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOwog ICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqIGRfc2I7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk X3Zmc19mbGFnczsKICAgICAgICB2b2lkICogZF9mc2RhdGE7CiAgICAgICAgdW5zaWduZWQgY2hh ciBkX2luYW1lWzE2XTsKfTsKCnN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50 ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiAgICAgICAgaW50ICgqZF9o YXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKICAgICAgICBpbnQgKCpkX2Nv bXBhcmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwog ICAgICAgIGludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIHZvaWQgKCpk X3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgdm9pZCAoKmRfaXB1dCkoc3RydWN0 IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7Cn07CiMgMTI3ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2RjYWNoZS5oIgpleHRlcm4gc3BpbmxvY2tfdCBkY2FjaGVfbG9jazsKIyAxNDYg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCnsKICAgICAgICAodm9pZCkoJmRj YWNoZV9sb2NrKTsKICAgICAgICBsaXN0X2RlbCgmZGVudHJ5LT5kX2hhc2gpOwogICAgICAgIGRv IHsgKCZkZW50cnktPmRfaGFzaCktPm5leHQgPSAoJmRlbnRyeS0+ZF9oYXNoKTsgKCZkZW50cnkt PmRfaGFzaCktPnByZXYgPSAoJmRlbnRyeS0+ZF9oYXNoKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg ZG8geyB9IHdoaWxlKDApOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZG5hbWVfZXh0ZXJuYWwo c3RydWN0IGRlbnRyeSAqZCkKewogICAgICAgIHJldHVybiBkLT5kX25hbWUubmFtZSAhPSBkLT5k X2luYW1lOwp9CgoKCgpleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwg c3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopOwoK CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0 cnVjdCBxc3RyICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9i bG9jayAqKTsKZXh0ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0IGRlbnRyeSAq KTsKZXh0ZXJuIGludCBkX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqKTsKCgpzdHJ1Y3Qgem9u ZV9zdHJ1Y3Q7CgpleHRlcm4gaW50IHNocmlua19kY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQg aW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfZGNhY2hlKGludCk7CgoKZXh0ZXJuIGludCBzaHJpbmtf aWNhY2hlX21lbW9yeShpbnQsIGludCk7CmV4dGVybiB2b2lkIHBydW5lX2ljYWNoZShpbnQpOwoK CmV4dGVybiBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKCgpl eHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Nfcm9vdChzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0 ZXJuIHZvaWQgZF9nZW5vY2lkZShzdHJ1Y3QgZGVudHJ5ICopOwoKZXh0ZXJuIHN0cnVjdCBkZW50 cnkgKmRfZmluZF9hbGlhcyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfcHJ1bmVfYWxp YXNlcyhzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50cyhzdHJ1Y3Qg ZGVudHJ5ICopOwoKCgoKZXh0ZXJuIHZvaWQgZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqKTsKIyAy MTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgZF9hZGQoc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9k ZSkKewogICAgICAgIGRfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKICAgICAgICBkX3JlaGFz aChlbnRyeSk7Cn0KCgpleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qg ZGVudHJ5ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29rdXAoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgcXN0ciAqKTsKCgpleHRlcm4gaW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoKZXh0ZXJuIGNoYXIgKiBfX2RfcGF0aChzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAgICAgICAgc3RydWN0 IHZmc21vdW50ICosIGNoYXIgKiwgaW50KTsKIyAyNDMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkZW50cnkgKiBkZ2V0KHN0 cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIGlmIChkZW50cnkpIHsKICAgICAgICAgICAg ICAgIGlmICghKCgmZGVudHJ5LT5kX2NvdW50KS0+Y291bnRlcikpCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKICAgICAgICAg ICAgICAgIGF0b21pY19pbmMoJmRlbnRyeS0+ZF9jb3VudCk7CiAgICAgICAgfQogICAgICAgIHJl dHVybiBkZW50cnk7Cn0KCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZGdldF9sb2NrZWQoc3RydWN0 IGRlbnRyeSAqKTsKIyAyNjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZGNhY2hlLmgi CnN0YXRpYyBfX2lubGluZV9fIGludCBkX3VuaGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkK ewogICAgICAgIHJldHVybiBsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFzaCk7Cn0KCmV4dGVybiB2 b2lkIGRwdXQoc3RydWN0IGRlbnRyeSAqKTsKCnN0YXRpYyBfX2lubGluZV9fIGludCBkX21vdW50 cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgcmV0dXJuIGRlbnRyeS0+ZF9t b3VudGVkOwp9CgpleHRlcm4gc3RydWN0IHZmc21vdW50ICpsb29rdXBfbW50KHN0cnVjdCB2ZnNt b3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICopOwojIDIwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMQoK CgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc3RhdC5oIiAxCgoKCnN0cnVjdCBf X29sZF9rZXJuZWxfc3RhdCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogICAgICAg IHVuc2lnbmVkIHNob3J0IHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0 X3VpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc3RfcmRldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Cn07CgpzdHJ1Y3Qgc3RhdCB7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc3RfZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3Vp ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3RfcmRldjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzdF9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3Rf bXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAgICB1 bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsK fTsKCgoKCnN0cnVjdCBzdGF0NjQgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKICAg ICAgICB1bnNpZ25lZCBjaGFyIF9fcGFkMFsxMF07CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9f c3RfaW5vOwoKICAgICAgICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKICAgICAgICB1bnNpZ25lZCBp bnQgc3Rfbmxpbms7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwogICAgICAgIHVuc2ln bmVkIGxvbmcgc3RfZ2lkOwoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogICAgICAg IHVuc2lnbmVkIGNoYXIgX19wYWQzWzEwXTsKCiAgICAgICAgbG9uZyBsb25nIHN0X3NpemU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0 X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNDsKCiAgICAgICAgdW5zaWduZWQg bG9uZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNTsKCiAgICAgICAgdW5z aWduZWQgbG9uZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNjsKCiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNzsK CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKfTsKIyA3ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMgojIDIxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEK IyAyMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDIzICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmlu Zy5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIg MQojIDkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKCgoKCgpleHRlcm4gY2hhciAqIF9fX3N0cnRvazsK ZXh0ZXJuIGNoYXIgKiBzdHJwYnJrKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4g Y2hhciAqIHN0cnRvayhjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKiBzdHJzZXAo Y2hhciAqKixjb25zdCBjaGFyICopOwpleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25z dCBjaGFyICosY29uc3QgY2hhciAqKTsKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv YXNtL3N0cmluZy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIgMgojIDMz ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSBjaGFy ICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKewppbnQgZDAsIGQxLCBkMjsK X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgInN0 b3NiXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiIgog ICAgICAgIDogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgIDoiMCIg KHNyYyksIjEiIChkZXN0KSA6ICJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5s aW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyxzaXplX3QgY291 bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAi MTpcdGRlY2wgJTJcblx0IgogICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgImxvZHNiXG5cdCIK ICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAg ICJqbmUgMWJcblx0IgogICAgICAgICJyZXBcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAg ICIyOiIKICAgICAgICA6ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmMiIChkMiksICI9JmEi IChkMykKICAgICAgICA6IjAiIChzcmMpLCIxIiAoZGVzdCksIjIiIChjb3VudCkgOiAibWVtb3J5 Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBjaGFyICogc3RyY2F0KGNoYXIgKiBk ZXN0LGNvbnN0IGNoYXIgKiBzcmMpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9s YXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAg ImRlY2wgJTFcbiIKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0Igog ICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWIiCiAgICAgICAgOiAi PSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAi MCIgKHNyYyksICIxIiAoZGVzdCksICIyIiAoMCksICIzIiAoMHhmZmZmZmZmZik6Im1lbW9yeSIp OwpyZXR1cm4gZGVzdDsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cm5jYXQoY2hhciAqIGRl c3QsY29uc3QgY2hhciAqIHNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxu XHQiCiAgICAgICAgImRlY2wgJTFcblx0IgogICAgICAgICJtb3ZsICU4LCUzXG4iCiAgICAgICAg IjE6XHRkZWNsICUzXG5cdCIKICAgICAgICAianMgMmZcblx0IgogICAgICAgICJsb2RzYlxuXHQi CiAgICAgICAgInN0b3NiXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAg ICAiam5lIDFiXG4iCiAgICAgICAgIjI6XHR4b3JsICUyLCUyXG5cdCIKICAgICAgICAic3Rvc2Ii CiAgICAgICAgOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMp CiAgICAgICAgOiAiMCIgKHNyYyksIjEiIChkZXN0KSwiMiIgKDApLCIzIiAoMHhmZmZmZmZmZiks ICJnIiAoY291bnQpCiAgICAgICAgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGlj IGlubGluZSBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCnsKaW50 IGQwLCBkMTsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAg ICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJqbmUgMmZcblx0 IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAg ICAgICJ4b3JsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAiam1wIDNmXG4iCiAgICAgICAgIjI6 XHRzYmJsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAib3JiICQxLCUlYWxcbiIKICAgICAgICAi MzoiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAg ICAgICAgICAgICAgICA6IjEiIChjcyksIjIiIChjdCkpOwpyZXR1cm4gX19yZXM7Cn0KCgpzdGF0 aWMgaW5saW5lIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6 ZV90IGNvdW50KQp7CnJlZ2lzdGVyIGludCBfX3JlczsKaW50IGQwLCBkMSwgZDI7Cl9fYXNtX18g X192b2xhdGlsZV9fKAogICAgICAgICIxOlx0ZGVjbCAlM1xuXHQiCiAgICAgICAgImpzIDJmXG5c dCIKICAgICAgICAibG9kc2Jcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImpuZSAz ZlxuXHQiCiAgICAgICAgInRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYlxuIgog ICAgICAgICIyOlx0eG9ybCAlJWVheCwlJWVheFxuXHQiCiAgICAgICAgImptcCA0ZlxuIgogICAg ICAgICIzOlx0c2JibCAlJWVheCwlJWVheFxuXHQiCiAgICAgICAgIm9yYiAkMSwlJWFsXG4iCiAg ICAgICAgIjQ6IgogICAgICAgICAgICAgICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDAp LCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpCiAgICAgICAgICAgICAgICAgICAgIDoiMSIgKGNzKSwi MiIgKGN0KSwiMyIgKGNvdW50KSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hh ciAqIHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCnsKaW50IGQwOwpyZWdpc3RlciBjaGFy ICogX19yZXM7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJtb3ZiICUlYWwsJSVhaFxu IgogICAgICAgICIxOlx0bG9kc2Jcblx0IgogICAgICAgICJjbXBiICUlYWgsJSVhbFxuXHQiCiAg ICAgICAgImplIDJmXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAi am5lIDFiXG5cdCIKICAgICAgICAibW92bCAkMSwlMVxuIgogICAgICAgICIyOlx0bW92bCAlMSwl MFxuXHQiCiAgICAgICAgImRlY2wgJTAiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQw KSA6ICIxIiAocyksIjAiIChjKSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hh ciAqIHN0cnJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKQp7CmludCBkMCwgZDE7CnJlZ2lzdGVy IGNoYXIgKiBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIm1vdmIgJSVhbCwl JWFoXG4iCiAgICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgImNtcGIgJSVhaCwlJWFsXG5c dCIKICAgICAgICAiam5lIDJmXG5cdCIKICAgICAgICAibGVhbCAtMSglJWVzaSksJTBcbiIKICAg ICAgICAiMjpcdHRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYiIKICAgICAgICA6 Ij1nIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZhIiAoZDEpIDoiMCIgKDApLCIxIiAocyksIjIi IChjKSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25z dCBjaGFyICogcykKewppbnQgZDA7CnJlZ2lzdGVyIGludCBfX3JlczsKX19hc21fXyBfX3ZvbGF0 aWxlX18oCiAgICAgICAgInJlcG5lXG5cdCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJu b3RsICUwXG5cdCIKICAgICAgICAiZGVjbCAlMCIKICAgICAgICA6Ij1jIiAoX19yZXMpLCAiPSZE IiAoZDApIDoiMSIgKHMpLCJhIiAoMCksICIwIiAoMHhmZmZmZmZmZikpOwpyZXR1cm4gX19yZXM7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqIF9fbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAq IGZyb20sIHNpemVfdCBuKQp7CmludCBkMCwgZDEsIGQyOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygK ICAgICAgICAicmVwIDsgbW92c2xcblx0IgogICAgICAgICJ0ZXN0YiAkMiwlYjRcblx0IgogICAg ICAgICJqZSAxZlxuXHQiCiAgICAgICAgIm1vdnN3XG4iCiAgICAgICAgIjE6XHR0ZXN0YiAkMSwl YjRcblx0IgogICAgICAgICJqZSAyZlxuXHQiCiAgICAgICAgIm1vdnNiXG4iCiAgICAgICAgIjI6 IgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKQogICAgICAgIDoi MCIgKG4vNCksICJxIiAobiksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pCiAgICAg ICAgOiAibWVtb3J5Iik7CnJldHVybiAodG8pOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICog X19jb25zdGFudF9tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4p CnsKICAgICAgICBzd2l0Y2ggKG4pIHsKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAg ICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKil0byA9ICooY29uc3QgdW5zaWduZWQg Y2hhciAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAg ICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAq KXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAg ICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZy b207CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXRvKSA9ICoo MisoY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAg ICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSA2Ogog ICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5z aWduZWQgbG9uZyAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQg c2hvcnQgKil0bykgPSAqKDIrKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopZnJvbSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAg ICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVk IGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcg Kil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAg ICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcg Kilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykg PSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAg ICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICop ZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAg IGNhc2UgMTY6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0g Kihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgKigx Kyh1bnNpZ25lZCBsb25nICopdG8pID0gKigxKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMiso Y29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDMr KHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDMrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAy MDoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0 IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2ln bmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAg ICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1 bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICooMysodW5zaWdu ZWQgbG9uZyAqKXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAg ICAgICAgICAgICAgICAgICAqKDQrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDQrKGNvbnN0IHVu c2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwog ICAgICAgIH0KCgoKCgoKCnsKICAgICAgICBpbnQgZDAsIGQxLCBkMjsKICAgICAgICBzd2l0Y2gg KG4gJSA0KSB7CiAgICAgICAgICAgICAgICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAi cmVwIDsgbW92c2wiICIiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIw IiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyBy ZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAi cmVwIDsgbW92c2wiICJcblx0bW92c2IiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIg KGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVt b3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDI6IF9fYXNtX18gX192b2xh dGlsZV9fKCAicmVwIDsgbW92c2wiICJcblx0bW92c3ciIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQx KSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJv bSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2Fz bV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IG1vdnNsIiAiXG5cdG1vdnN3XG5cdG1vdnNiIiA6ICI9 JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikgOiAiMCIgKG4vNCksIjEiICgobG9uZykg dG8pLCIyIiAoKGxvbmcpIGZyb20pIDogIm1lbW9yeSIpOzsgcmV0dXJuIHRvOwogICAgICAgIH0K fQoKCn0KIyAzMzUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N0cmluZy5oIgpleHRlcm4g dm9pZCBfX3N0cnVjdF9jcHlfYnVnICh2b2lkKTsKIyAzNDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL3N0cmluZy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKiBtZW1tb3ZlKHZvaWQgKiBkZXN0 LGNvbnN0IHZvaWQgKiBzcmMsIHNpemVfdCBuKQp7CmludCBkMCwgZDEsIGQyOwppZiAoZGVzdDxz cmMpCl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBcblx0IgogICAgICAgICJtb3Zz YiIKICAgICAgICA6ICI9JmMiIChkMCksICI9JlMiIChkMSksICI9JkQiIChkMikKICAgICAgICA6 IjAiIChuKSwiMSIgKHNyYyksIjIiIChkZXN0KQogICAgICAgIDogIm1lbW9yeSIpOwplbHNlCl9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJzdGRcblx0IgogICAgICAgICJyZXBcblx0Igog ICAgICAgICJtb3ZzYlxuXHQiCiAgICAgICAgImNsZCIKICAgICAgICA6ICI9JmMiIChkMCksICI9 JlMiIChkMSksICI9JkQiIChkMikKICAgICAgICA6IjAiIChuKSwKICAgICAgICAgIjEiIChuLTEr KGNvbnN0IGNoYXIgKilzcmMpLAogICAgICAgICAiMiIgKG4tMSsoY2hhciAqKWRlc3QpCiAgICAg ICAgOiJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIG1l bWNocihjb25zdCB2b2lkICogY3MsaW50IGMsc2l6ZV90IGNvdW50KQp7CmludCBkMDsKcmVnaXN0 ZXIgdm9pZCAqIF9fcmVzOwppZiAoIWNvdW50KQogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsK X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcG5lXG5cdCIKICAgICAgICAic2Nhc2Jc blx0IgogICAgICAgICJqZSAxZlxuXHQiCiAgICAgICAgIm1vdmwgJDEsJTBcbiIKICAgICAgICAi MTpcdGRlY2wgJTAiCiAgICAgICAgOiI9RCIgKF9fcmVzKSwgIj0mYyIgKGQwKSA6ICJhIiAoYyks IjAiIChjcyksIjEiIChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZCAqIF9fbWVtc2V0X2dlbmVyaWModm9pZCAqIHMsIGNoYXIgYyxzaXplX3QgY291bnQpCnsKaW50 IGQwLCBkMTsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAg InN0b3NiIgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAgIDoiYSIgKGMp LCIxIiAocyksIjAiIChjb3VudCkKICAgICAgICA6Im1lbW9yeSIpOwpyZXR1cm4gczsKfQojIDQw OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCAqIF9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgYywgc2l6ZV90 IGNvdW50KQp7CmludCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXAg OyBzdG9zbFxuXHQiCiAgICAgICAgInRlc3RiICQyLCViM1xuXHQiCiAgICAgICAgImplIDFmXG5c dCIKICAgICAgICAic3Rvc3dcbiIKICAgICAgICAiMTpcdHRlc3RiICQxLCViM1xuXHQiCiAgICAg ICAgImplIDJmXG5cdCIKICAgICAgICAic3Rvc2JcbiIKICAgICAgICAiMjoiCiAgICAgICAgOiAi PSZjIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyksICJxIiAoY291bnQpLCAiMCIg KGNvdW50LzQpLCAiMSIgKChsb25nKSBzKQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiAocyk7 Cn0KCgoKc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90 IGNvdW50KQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVf XygKICAgICAgICAibW92bCAlMiwlMFxuXHQiCiAgICAgICAgImptcCAyZlxuIgogICAgICAgICIx Olx0Y21wYiAkMCwoJTApXG5cdCIKICAgICAgICAiamUgM2Zcblx0IgogICAgICAgICJpbmNsICUw XG4iCiAgICAgICAgIjI6XHRkZWNsICUxXG5cdCIKICAgICAgICAiY21wbCAkLTEsJTFcblx0Igog ICAgICAgICJqbmUgMWJcbiIKICAgICAgICAiMzpcdHN1YmwgJTIsJTAiCiAgICAgICAgOiI9YSIg KF9fcmVzKSwgIj0mZCIgKGQwKQogICAgICAgIDoiYyIgKHMpLCIxIiAoY291bnQpKTsKcmV0dXJu IF9fcmVzOwp9CgoKCgpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBj aGFyICpjdCk7CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9jX2FuZF9jb3Vu dF9tZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgcGF0dGVybiwgc2l6ZV90IGNvdW50KQp7 CiAgICAgICAgc3dpdGNoIChjb3VudCkgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAg ICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopcyA9IHBhdHRlcm47CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAg ICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAg ICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAgICAg ICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXMpID0gcGF0dGVybjsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAg ICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXMgPSBwYXR0ZXJuOwogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CgoKCgoKCgp7CiAgICAgICAgaW50 IGQwLCBkMTsKICAgICAgICBzd2l0Y2ggKGNvdW50ICUgNCkgewogICAgICAgICAgICAgICAgY2Fz ZSAwOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiIiA6ICI9JmMiIChkMCks ICI9JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykg OiAibWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAxOiBfX2FzbV9fIF9f dm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3NiIiA6ICI9JmMiIChkMCksICI9JkQi IChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVt b3J5Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRp bGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3N3IiA6ICI9JmMiIChkMCksICI9JkQiIChkMSkg OiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5Iik7 IHJldHVybiBzOwogICAgICAgICAgICAgICAgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18o ICJyZXAgOyBzdG9zbCIgIlxuXHRzdG9zd1xuXHRzdG9zYiIgOiAiPSZjIiAoZDApLCAiPSZEIiAo ZDEpIDogImEiIChwYXR0ZXJuKSwiMCIgKGNvdW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1lbW9y eSIpOyByZXR1cm4gczsKICAgICAgICB9Cn0KCgp9CiMgNTE1ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSB2b2lkICogbWVtc2Nhbih2b2lkICogYWRk ciwgaW50IGMsIHNpemVfdCBzaXplKQp7CiAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAg ICAgcmV0dXJuIGFkZHI7CiAgICAgICAgX19hc21fXygicmVwbno7IHNjYXNiXG5cdCIKICAgICAg ICAgICAgICAgICJqbnogMWZcblx0IgogICAgICAgICAgICAgICAgImRlYyAlJWVkaVxuIgogICAg ICAgICAgICAgICAgIjE6IgogICAgICAgICAgICAgICAgOiAiPUQiIChhZGRyKSwgIj1jIiAoc2l6 ZSkKICAgICAgICAgICAgICAgIDogIjAiIChhZGRyKSwgIjEiIChzaXplKSwgImEiIChjKSk7CiAg ICAgICAgcmV0dXJuIGFkZHI7Cn0KIyAyNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z dHJpbmcuaCIgMgojIDQ2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIgpl eHRlcm4gaW50IHN0cm5pY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2tlcm5lbF9z aXplX3QpOwojIDc3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIgpleHRl cm4gaW50IF9fYnVpbHRpbl9tZW1jbXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5l bF9zaXplX3QpOwojIDI0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMg MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAyNiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vYml0b3BzLmgiIDEKCgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9j b25maWcuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAyCiMg MzYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVf XyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAgICAgImJ0c2wgJTEsJTAiCiAgICAg ICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAg ICAgIDoiSXIiIChucikpOwp9CiMgNTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9w cy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZv aWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJidHNsICUxLCUw IgogICAgICAgICAgICAgICAgOiI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAg ICAgICAgICAgICA6IklyIiAobnIpKTsKfQojIDcxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xh dGlsZSB2b2lkICogYWRkcikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAg ICAgICAgICAgICAgImJ0cmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRp bGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgOTAgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lk IF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiYnRjbCAlMSwlMCIKICAgICAgICAg ICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAg OiJJciIgKG5yKSk7Cn0KIyAxMDcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5o IgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk ICogYWRkcikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAg ICAgImJ0Y2wgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAq KSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgMTIzICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5k X3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRi aXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAgICAgImJ0 c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9 bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIp IDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAxNDMgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2Fu ZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBpbnQgb2xk Yml0OwoKICAgICAgICBfX2FzbV9fKAogICAgICAgICAgICAgICAgImJ0c2wgJTIsJTFcblx0c2Ji bCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxl IGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpKTsKICAgICAgICByZXR1 cm4gb2xkYml0Owp9CiMgMTYyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIK c3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxl IHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18oICIiCiAgICAgICAgICAgICAgICAiYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgog ICAgICAgICAgICAgICAgOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBh ZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0 dXJuIG9sZGJpdDsKfQojIDE4MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgi CnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygK ICAgICAgICAgICAgICAgICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAg ICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAg ICAgICAgICAgOiJJciIgKG5yKSk7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQoKCnN0YXRpYyBf X2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk ICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICAgICAgICAgImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAg ICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAg ICAgICAgICAgICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRi aXQ7Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMg X19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQg KiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxl X18oICIiCiAgICAgICAgICAgICAgICAiYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAg ICAgICAgICAgOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkK ICAgICAgICAgICAgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIG9s ZGJpdDsKfQojIDIzMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRp YyBfX2lubGluZV9fIGludCBjb25zdGFudF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxl IHZvaWQgKiBhZGRyKQp7CiAgICAgICAgcmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkgJiAoKChj b25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOwp9Cgpz dGF0aWMgX19pbmxpbmVfXyBpbnQgdmFyaWFibGVfdGVzdF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2 b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xh dGlsZV9fKAogICAgICAgICAgICAgICAgImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAg ICAgICAgICAgOiI9ciIgKG9sZGJpdCkKICAgICAgICAgICAgICAgIDoibSIgKCgqKHZvbGF0aWxl IGxvbmcgKikgYWRkcikpLCJJciIgKG5yKSk7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQojIDI2 MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9f IGludCBmaW5kX2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKQp7CiAg ICAgICAgaW50IGQwLCBkMSwgZDI7CiAgICAgICAgaW50IHJlczsKCiAgICAgICAgaWYgKCFzaXpl KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KAogICAgICAgICAgICAgICAgIm1vdmwgJC0xLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJ4 b3JsICUlZWR4LCUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICJyZXBlOyBzY2FzbFxuXHQiCiAg ICAgICAgICAgICAgICAiamUgMWZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgLTQoJSVlZGkp LCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJzdWJsICQ0LCUlZWRpXG5cdCIKICAgICAgICAg ICAgICAgICJic2ZsICUlZWF4LCUlZWR4XG4iCiAgICAgICAgICAgICAgICAiMTpcdHN1YmwgJSVl YngsJSVlZGlcblx0IgogICAgICAgICAgICAgICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAg ICAgICAgICAgImFkZGwgJSVlZGksJSVlZHgiCiAgICAgICAgICAgICAgICA6Ij1kIiAocmVzKSwg Ij0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgICAgICAgICAgOiIxIiAo KHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikpOwogICAgICAgIHJldHVy biByZXM7Cn0KCgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfemVyb19iaXQg KHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxv bmcgKiBwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKICAgICAg ICBpbnQgc2V0ID0gMCwgYml0ID0gb2Zmc2V0ICYgMzEsIHJlczsKCiAgICAgICAgaWYgKGJpdCkg ewoKCgogICAgICAgICAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMFxuXHQiCiAgICAgICAgICAg ICAgICAgICAgICAgICJqbmUgMWZcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92bCAk MzIsICUwXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgICAg ICAgICAgOiAiPXIiIChzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICh+KCpwID4+ IGJpdCkpKTsKICAgICAgICAgICAgICAgIGlmIChzZXQgPCAoMzIgLSBiaXQpKQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgICAgc2V0ID0g MzIgLSBiaXQ7CiAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgfQoKCgogICAgICAgIHJlcyA9 IGZpbmRfZmlyc3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gKHVuc2lnbmVkIGxvbmcg KikgYWRkcikpOwogICAgICAgIHJldHVybiAob2Zmc2V0ICsgc2V0ICsgcmVzKTsKfQoKCgoKCgoK c3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQp7 CiAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPXIiICh3b3Jk KQogICAgICAgICAgICAgICAgOiJyIiAofndvcmQpKTsKICAgICAgICByZXR1cm4gd29yZDsKfQoj IDM0MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGlu ZV9fIGludCBmZnMoaW50IHgpCnsKICAgICAgICBpbnQgcjsKCiAgICAgICAgX19hc21fXygiYnNm bCAlMSwlMFxuXHQiCiAgICAgICAgICAgICAgICAiam56IDFmXG5cdCIKICAgICAgICAgICAgICAg ICJtb3ZsICQtMSwlMFxuIgogICAgICAgICAgICAgICAgIjE6IiA6ICI9ciIgKHIpIDogImciICh4 KSk7CiAgICAgICAgcmV0dXJuIHIrMTsKfQojIDI3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIyA1MCAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgewogICAgICAg IGludCBucl9maWxlczsKICAgICAgICBpbnQgbnJfZnJlZV9maWxlczsKICAgICAgICBpbnQgbWF4 X2ZpbGVzOwp9OwpleHRlcm4gc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IGZpbGVzX3N0YXQ7Cgpz dHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CiAgICAgICAgaW50IG5yX2lub2RlczsKICAgICAgICBpbnQg bnJfdW51c2VkOwogICAgICAgIGludCBkdW1teVs1XTsKfTsKZXh0ZXJuIHN0cnVjdCBpbm9kZXNf c3RhdF90IGlub2Rlc19zdGF0OwoKZXh0ZXJuIGludCBsZWFzZXNfZW5hYmxlLCBkaXJfbm90aWZ5 X2VuYWJsZSwgbGVhc2VfYnJlYWtfdGltZTsKIyAxOTggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIg MQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDIKIyAzOSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vc3lzdGVtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgNiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9zZWdtZW50LmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0u aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYml0b3BzLmgiIDEKIyAxMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9iaXRvcHMuaCIKc3RhdGljIGlubGluZSBpbnQg Z2VuZXJpY19mZnMoaW50IHgpCnsKICAgICAgICBpbnQgciA9IDE7CgogICAgICAgIGlmICgheCkK ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICghKHggJiAweGZmZmYpKSB7CiAg ICAgICAgICAgICAgICB4ID4+PSAxNjsKICAgICAgICAgICAgICAgIHIgKz0gMTY7CiAgICAgICAg fQogICAgICAgIGlmICghKHggJiAweGZmKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gODsKICAg ICAgICAgICAgICAgIHIgKz0gODsKICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDB4ZikpIHsK ICAgICAgICAgICAgICAgIHggPj49IDQ7CiAgICAgICAgICAgICAgICByICs9IDQ7CiAgICAgICAg fQogICAgICAgIGlmICghKHggJiAzKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gMjsKICAgICAg ICAgICAgICAgIHIgKz0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDEpKSB7CiAgICAg ICAgICAgICAgICB4ID4+PSAxOwogICAgICAgICAgICAgICAgciArPSAxOwogICAgICAgIH0KICAg ICAgICByZXR1cm4gcjsKfQoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmlj X2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAo dyAmIDB4NTU1NTU1NTUpICsgKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CiAgICAgICAgcmVzID0g KHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKICAgICAgICBy ZXMgPSAocmVzICYgMHgwRjBGMEYwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYwRjBGMEYpOwogICAg ICAgIHJlcyA9IChyZXMgJiAweDAwRkYwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGMDBGRik7 CiAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwMDBGRkZGKSArICgocmVzID4+IDE2KSAmIDB4MDAw MEZGRkYpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQxNih1 bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NSkg KyAoKHcgPj4gMSkgJiAweDU1NTUpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDMzMzMpICsgKChy ZXMgPj4gMikgJiAweDMzMzMpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDBGMEYpICsgKChyZXMg Pj4gNCkgJiAweDBGMEYpOwogICAgICAgIHJldHVybiAocmVzICYgMHgwMEZGKSArICgocmVzID4+ IDgpICYgMHgwMEZGKTsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2VuZXJpY19od2Vp Z2h0OCh1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4 NTUpICsgKCh3ID4+IDEpICYgMHg1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMpICsgKChy ZXMgPj4gMikgJiAweDMzKTsKICAgICAgICByZXR1cm4gKHJlcyAmIDB4MEYpICsgKChyZXMgPj4g NCkgJiAweDBGKTsKfQoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIg MQojIDcwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIiAyCiMgOCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIKCgoKc3RydWN0IHRhc2tfc3RydWN0 OwpleHRlcm4gdm9pZCBfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVj dCB0YXNrX3N0cnVjdCAqbmV4dCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDYzICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIF9nZXRfYmFzZShjaGFyICogYWRkcikKewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19i YXNlOwogICAgICAgIF9fYXNtX18oIm1vdmIgJTMsJSVkaFxuXHQiCiAgICAgICAgICAgICAgICAi bW92YiAlMiwlJWRsXG5cdCIKICAgICAgICAgICAgICAgICJzaGxsICQxNiwlJWVkeFxuXHQiCiAg ICAgICAgICAgICAgICAibW92dyAlMSwlJWR4IgogICAgICAgICAgICAgICAgOiI9JmQiIChfX2Jh c2UpCiAgICAgICAgICAgICAgICA6Im0iICgqKChhZGRyKSsyKSksCiAgICAgICAgICAgICAgICAg Im0iICgqKChhZGRyKSs0KSksCiAgICAgICAgICAgICAgICAgIm0iICgqKChhZGRyKSs3KSkpOwog ICAgICAgIHJldHVybiBfX2Jhc2U7Cn0KIyAxMzAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2xpbWl0KHVuc2lnbmVk IGxvbmcgc2VnbWVudCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19saW1pdDsKICAgICAgICBf X2FzbV9fKCJsc2xsICUxLCUwIgogICAgICAgICAgICAgICAgOiI9ciIgKF9fbGltaXQpOiJyIiAo c2VnbWVudCkpOwogICAgICAgIHJldHVybiBfX2xpbWl0KzE7Cn0KCgoKCgoKCnN0cnVjdCBfX3hj aGdfZHVtbXkgeyB1bnNpZ25lZCBsb25nIGFbMTAwXTsgfTsKIyAxNTcgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQgKHVu c2lnbmVkIGxvbmcgbG9uZyAqIHB0ciwKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsb3cs IHVuc2lnbmVkIGludCBoaWdoKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAg ICAgICAgICAgICAgIlxuMTpcdCIKICAgICAgICAgICAgICAgICJtb3ZsICglMCksICUlZWF4XG5c dCIKICAgICAgICAgICAgICAgICJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCiAgICAgICAgICAgICAg ICAiY21weGNoZzhiICglMClcblx0IgogICAgICAgICAgICAgICAgImpueiAxYiIKICAgICAgICAg ICAgICAgIDoKICAgICAgICAgICAgICAgIDogIkQiKHB0ciksCiAgICAgICAgICAgICAgICAgICAg ICAgICJiIihsb3cpLAogICAgICAgICAgICAgICAgICAgICAgICAiYyIoaGlnaCkKICAgICAgICAg ICAgICAgIDogImF4IiwiZHgiLCJtZW1vcnkiKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIF9fc2V0 XzY0Yml0X2NvbnN0YW50ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1 ZSkKewogICAgICAgIF9fc2V0XzY0Yml0KHB0ciwodW5zaWduZWQgaW50KSh2YWx1ZSksICh1bnNp Z25lZCBpbnQpKCh2YWx1ZSk+PjMyVUxMKSk7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9fc2V0 XzY0Yml0X3ZhciAodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCnsKICAgICAgICBfX3NldF82NGJpdChwdHIs KigoKHVuc2lnbmVkIGludCopJih2YWx1ZSkpKzApLCAqKCgodW5zaWduZWQgaW50KikmKHZhbHVl KSkrMSkpOwp9CiMgMjAyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxl IHZvaWQgKiBwdHIsIGludCBzaXplKQp7CiAgICAgICAgc3dpdGNoIChzaXplKSB7CiAgICAgICAg ICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGls ZV9fKCJ4Y2hnYiAlYjAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9cSIg KHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNo Z19kdW1teSAqKShwdHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6Im1lbW9yeSIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o InhjaGd3ICV3MCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIiAoeCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im0iICgqKChzdHJ1Y3QgX194Y2hnX2R1 bW15ICopKHB0cikpKSwgIjAiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoi bWVtb3J5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNo Z2wgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIgKHgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19kdW1teSAq KShwdHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9y eSIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0 dXJuIHg7Cn0KIyAyMzYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5z aWduZWQgbG9uZyBvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBuZXcsIGludCBzaXplKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwcmV2Owog ICAgICAgIHN3aXRjaCAoc2l6ZSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKCIiICJjbXB4Y2hnYiAlYjEsJTIiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJldikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0 cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1l bW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgICAgY2FzZSAyOgogICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgImNtcHhjaGd3ICV3MSwlMiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1hIihwcmV2KQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicSIobmV3KSwgIm0iKCooKHN0cnVjdCBfX3hj aGdfZHVtbXkgKikocHRyKSkpLCAiMCIob2xkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAibWVtb3J5Iik7CiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICAg ICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiAiY21weGNo Z2wgJTEsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJl dikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigq KChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJu IHByZXY7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvbGQ7Cn0KIyAzNDkgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgp2b2lkIGRpc2FibGVfaGx0KHZvaWQpOwp2b2lkIGVu YWJsZV9obHQodm9pZCk7CgpleHRlcm4gaW50IGlzX3NvbnlfdmFpb19sYXB0b3A7CiMgNDAgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyA0MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vc2VtYXBob3JlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQu aCIgMQojIDQyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0uaCIgMQojIDEwICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9saW5rYWdlLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yd3Nl bS5oIiAyCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAx CiMgMTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2tlcm5lbC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0uaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIiAxCiMgMjAgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgMjEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv cndzZW0uaCIgMgoKc3RydWN0IHJ3X3NlbWFwaG9yZTsKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9hc20vcndzZW0uaCIgMQojIDQxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9y d3NlbS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgNDIg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3J3c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA0MyAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vcndzZW0uaCIgMgoKc3RydWN0IHJ3c2VtX3dhaXRlcjsKCmV4dGVybiBzdHJ1Y3Qgcndf c2VtYXBob3JlICpyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9y ZSAqcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSBfX2F0 dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3Nl bV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwoKCgoKc3RydWN0IHJ3X3NlbWFwaG9yZSB7CiAgICAgICAgc2lnbmVkIGxvbmcgY291bnQ7CgoK CgoKCiAgICAgICAgc3BpbmxvY2tfdCB3YWl0X2xvY2s7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCB3YWl0X2xpc3Q7CgoKCn07CiMgODQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3J3c2Vt LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkKewogICAgICAgIHNlbS0+Y291bnQgPSAweDAwMDAwMDAwOwogICAgICAgIGRvIHsgfSB3aGls ZSgwKTsKICAgICAgICBkbyB7ICgmc2VtLT53YWl0X2xpc3QpLT5uZXh0ID0gKCZzZW0tPndhaXRf bGlzdCk7ICgmc2VtLT53YWl0X2xpc3QpLT5wcmV2ID0gKCZzZW0tPndhaXRfbGlzdCk7IH0gd2hp bGUgKDApOwoKCgp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3 X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAg ICAgICAgICAiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKIiIgIiAgaW5jbCAgICAgICglJWVh eClcblx0IgogICAgICAgICAgICAgICAgIiAganMgICAgICAgIDJmXG5cdCIKICAgICAgICAgICAg ICAgICIxOlxuXHQiCiAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJc biIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAgICAgICAgICAgICAgICAiICBwdXNobCAgICAg JSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWR4XG5cdCIKICAgICAg ICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV9kb3duX3JlYWRfZmFpbGVkXG5cdCIKICAgICAg ICAgICAgICAgICIgIHBvcGwgICAgICAlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3Bs ICAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4iCiAgICAg ICAgICAgICAgICAiLnByZXZpb3VzIgogICAgICAgICAgICAgICAgIiMgZW5kaW5nIGRvd25fcmVh ZFxuXHQiCiAgICAgICAgICAgICAgICA6ICIrbSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAg IDogImEiKHNlbSkKICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewog ICAgICAgIGludCB0bXA7CgogICAgICAgIHRtcCA9ICgoLTB4MDAwMTAwMDApICsgMHgwMDAwMDAw MSk7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBiZWdp bm5pbmcgZG93bl93cml0ZVxuXHQiCiIiICIgIHhhZGQgICAgICAlMCwoJSVlYXgpXG5cdCIKICAg ICAgICAgICAgICAgICIgIHRlc3RsICAgICAlMCwlMFxuXHQiCiAgICAgICAgICAgICAgICAiICBq bnogICAgICAgMmZcblx0IgogICAgICAgICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAgICAg ICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XG5cdCIK ICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAi ICBjYWxsICAgICAgcndzZW1fZG93bl93cml0ZV9mYWlsZWRcblx0IgogICAgICAgICAgICAgICAg IiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICIgIGptcCAgICAgICAxYlxu IgogICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgogICAgICAgICAgICAgICAgIiMgZW5kaW5n IGRvd25fd3JpdGUiCiAgICAgICAgICAgICAgICA6ICIrZCIodG1wKSwgIittIihzZW0tPmNvdW50 KQogICAgICAgICAgICAgICAgOiAiYSIoc2VtKQogICAgICAgICAgICAgICAgOiAibWVtb3J5Iiwg ImNjIik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFw aG9yZSAqc2VtKQp7CiAgICAgICAgX19zMzIgdG1wID0gLTB4MDAwMDAwMDE7CiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBiZWdpbm5pbmcgX191cF9yZWFk XG5cdCIKIiIgIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgogICAgICAgICAgICAgICAg IiAganMgICAgICAgIDJmXG5cdCIKICAgICAgICAgICAgICAgICIxOlxuXHQiCiAgICAgICAgICAg ICAgICAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlxu XHQiCiAgICAgICAgICAgICAgICAiICBkZWN3ICAgICAgJSVkeFxuXHQiCiAgICAgICAgICAgICAg ICAiICBqbnogICAgICAgMWJcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWN4 XG5cdCIKICAgICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV93YWtlXG5cdCIKICAgICAg ICAgICAgICAgICIgIHBvcGwgICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBqbXAg ICAgICAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXNcbiIKICAgICAgICAgICAgICAg ICIjIGVuZGluZyBfX3VwX3JlYWRcbiIKICAgICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50 KSwgIitkIih0bXApCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAgICAgICAgICA6 ICJtZW1vcnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGUoc3Ry dWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAg ICAgICAgICAgICAgICAiIyBiZWdpbm5pbmcgX191cF93cml0ZVxuXHQiCiAgICAgICAgICAgICAg ICAiICBtb3ZsICAgICAgJTIsJSVlZHhcblx0IgoiIiAiICB4YWRkbCAgICAgJSVlZHgsKCUlZWF4 KVxuXHQiCiAgICAgICAgICAgICAgICAiICBqbnogICAgICAgMmZcblx0IgogICAgICAgICAgICAg ICAgIjE6XG5cdCIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxu IgogICAgICAgICAgICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAgICIgIGRlY3cgICAgICAl JWR4XG5cdCIKICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAxYlxuXHQiCiAgICAgICAgICAg ICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAg IHJ3c2VtX3dha2Vcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIK ICAgICAgICAgICAgICAgICIgIGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2 aW91c1xuIgogICAgICAgICAgICAgICAgIiMgZW5kaW5nIF9fdXBfd3JpdGVcbiIKICAgICAgICAg ICAgICAgIDogIittIihzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiAiYSIoc2VtKSwgImki KC0oKC0weDAwMDEwMDAwKSArIDB4MDAwMDAwMDEpKQogICAgICAgICAgICAgICAgOiAibWVtb3J5 IiwgImNjIiwgImVkeCIpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2Fk ZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKAoiIiAiYWRkbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iKHNlbS0+ Y291bnQpCiAgICAgICAgICAgICAgICA6ImlyIihkZWx0YSksICJtIihzZW0tPmNvdW50KSk7Cn0K CgoKCnN0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1 Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBpbnQgdG1wID0gZGVsdGE7CgogICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKAoiIiAieGFkZCAlMCwoJTIpIgogICAgICAgICAgICAgICAg OiAiK3IiKHRtcCksICI9bSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDogInIiKHNlbSks ICJtIihzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CgogICAgICAgIHJl dHVybiB0bXArZGVsdGE7Cn0KIyAyOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yd3Nl bS5oIiAyCiMgNDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0uaCIKc3RhdGlj IGlubGluZSB2b2lkIGRvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgX19kb3duX3Jl YWQoc2VtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoK CgoKc3RhdGljIGlubGluZSB2b2lkIGRvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2Vt KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICBfX2Rvd25fd3JpdGUoc2VtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB1cF9yZWFkKHN0cnVjdCByd19zZW1h cGhvcmUgKnNlbSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgX191cF9yZWFkKHNlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgdXBfd3JpdGUoc3RydWN0IHJ3X3Nl bWFwaG9yZSAqc2VtKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgX191cF93cml0ZShzZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7Cn0KIyA0MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBo b3JlLmgiIDIKCnN0cnVjdCBzZW1hcGhvcmUgewogICAgICAgIGF0b21pY190IGNvdW50OwogICAg ICAgIGludCBzbGVlcGVyczsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwoKCgp9Owoj IDczICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIKc3RhdGljIGlubGlu ZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQp7CgoKCgoK CiAgICAgICAgKCgoJnNlbS0+Y291bnQpLT5jb3VudGVyKSA9ICh2YWwpKTsKICAgICAgICBzZW0t PnNsZWVwZXJzID0gMDsKICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwoK Cgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2Vt KQp7CiAgICAgICAgc2VtYV9pbml0KHNlbSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0 X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgc2VtYV9pbml0 KHNlbSwgMCk7Cn0KCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBfX2Rvd25fZmFp bGVkKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19kb3duX2ZhaWxl ZF9pbnRlcnJ1cHRpYmxlKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQg X19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkp KSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgKTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkg dm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgaW50IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0p OwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qg c2VtYXBob3JlICogc2VtKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIF9fdXAo c3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0 cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o CiAgICAgICAgICAgICAgICAiIyBhdG9taWMgZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAg ICAgICAgIiIgImRlY2wgJTBcblx0IgogICAgICAgICAgICAgICAgImpzIDJmXG4iCiAgICAgICAg ICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhc IlxuIgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRcblx0IgogICAgICAg ICAgICAgICAgImptcCAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91cyIKICAgICAgICAg ICAgICAgIDoiPW0iIChzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAg ICAgICAgICAgICAgOiJtZW1vcnkiKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50 ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CiAgICAgICAgaW50IHJlc3VsdDsK CgoKCgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRv bWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAgICAgICAgIiIg ImRlY2wgJTFcblx0IgogICAgICAgICAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAgICAgICAg ICJ4b3JsICUwLCUwXG4iCiAgICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIu c2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9f ZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuXHQiCiAgICAgICAgICAgICAgICAiam1wIDFiXG4i CiAgICAgICAgICAgICAgICAiLnByZXZpb3VzIgogICAgICAgICAgICAgICAgOiI9YSIgKHJlc3Vs dCksICI9bSIgKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChzZW0pCiAgICAgICAg ICAgICAgICA6Im1lbW9yeSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KCgoKCgpzdGF0aWMg aW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewogICAgICAg IGludCByZXN1bHQ7CgoKCgoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAg ICAgICAgICIjIGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKICAgICAg ICAgICAgICAgICIiICJkZWNsICUxXG5cdCIKICAgICAgICAgICAgICAgICJqcyAyZlxuXHQiCiAg ICAgICAgICAgICAgICAieG9ybCAlMCwlMFxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAg ICAgICAgICAgICAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAg ICIyOlx0Y2FsbCBfX2Rvd25fZmFpbGVkX3RyeWxvY2tcblx0IgogICAgICAgICAgICAgICAgImpt cCAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPWEi IChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQog ICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoK CgpzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgogICAg ICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIHVwIG9w ZXJhdGlvblxuXHQiCiAgICAgICAgICAgICAgICAiIiAiaW5jbCAlMFxuXHQiCiAgICAgICAgICAg ICAgICAiamxlIDJmXG4iCiAgICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIu c2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9f dXBfd2FrZXVwXG5cdCIKICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAgICAgICAgICAgICAg ICIucHJldmlvdXMiCiAgICAgICAgICAgICAgICA6Ij1tIiAoc2VtLT5jb3VudCkKICAgICAgICAg ICAgICAgIDoiYyIgKHNlbSkKICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7Cn0KIyAxOTkgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5o IiAyCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMg MTEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAyCgoKc3RhdGljIF9f aW5saW5lX18gX19jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQp7CgogICAg ICAgIF9fYXNtX18oImJzd2FwICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CgoKCgoKCgogICAg ICAgIHJldHVybiB4Owp9CgpzdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MTYgX19fYXJj aF9fc3dhYjE2KF9fdTE2IHgpCnsKICAgICAgICBfX2FzbV9fKCJ4Y2hnYiAlYjAsJWgwIiA6ICI9 cSIgKHgpIDogIjAiICh4KSk7IHJldHVybiB4OwoKCgp9CiMgNDUgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL2J5dGVvcmRlci5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv Ynl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIiAxCiMgMTMxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgiCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBf X3UxNiBfX2Zzd2FiMTYoX191MTYgeCkKewogICAgICAgIHJldHVybiBfX19hcmNoX19zd2FiMTYo eCk7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MTYgX19zd2FiMTZwKF9fdTE2ICp4KQp7CiAgICAg ICAgcmV0dXJuIF9fX2FyY2hfX3N3YWIxNigqKHgpKTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2b2lk IF9fc3dhYjE2cyhfX3UxNiAqYWRkcikKewogICAgICAgIGRvIHsgKihhZGRyKSA9IF9fX2FyY2hf X3N3YWIxNigqKChhZGRyKSkpOyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIF9faW5saW5lX18gX19j b25zdF9fIF9fdTMyIF9fZnN3YWIzMihfX3UzMiB4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hf X3N3YWIzMih4KTsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3YWIzMnAoX191MzIgKngp CnsKICAgICAgICByZXR1cm4gX19fYXJjaF9fc3dhYjMyKCooeCkpOwp9CnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMyICphZGRyKQp7CiAgICAgICAgZG8geyAqKGFkZHIpID0g X19fYXJjaF9fc3dhYjMyKCooKGFkZHIpKSk7IH0gd2hpbGUgKDApOwp9CgoKc3RhdGljIF9faW5s aW5lX18gX19jb25zdF9fIF9fdTY0IF9fZnN3YWI2NChfX3U2NCB4KQp7CgogICAgICAgIF9fdTMy IGggPSB4ID4+IDMyOwogICAgICAgIF9fdTMyIGwgPSB4ICYgKCgxVUxMPDwzMiktMSk7CiAgICAg ICAgcmV0dXJuICgoKF9fdTY0KShfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKGwpKSA/ICh7 IF9fdTMyIF9feCA9ICgobCkpOyAoKF9fdTMyKSggKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgw MDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAwVUwp IDw8IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgo KF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSA6IF9fZnN3 YWIzMigobCkpKSkgPDwgMzIpIHwgKChfX3U2NCkoKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3Uz MikoaCkpID8gKHsgX191MzIgX194ID0gKChoKSk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAm IChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4 MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwp ID4+IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7 IH0pIDogX19mc3dhYjMyKChoKSkpKSk7CgoKCn0Kc3RhdGljIF9faW5saW5lX18gX191NjQgX19z d2FiNjRwKF9fdTY0ICp4KQp7CiAgICAgICAgcmV0dXJuICh7IF9fdTY0IF9fdG1wID0gKCooeCkp IDsgKHsgX191NjQgX194ID0gKF9fdG1wKTsgKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoX194 KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2 NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCko KChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChf X3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgp IHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkg Pj4gOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAw VUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAw MDAwMDAwVUxMKSA+PiA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAw MDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSk7IH0pOyB9KTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2 b2lkIF9fc3dhYjY0cyhfX3U2NCAqYWRkcikKewogICAgICAgIGRvIHsgKihhZGRyKSA9ICh7IF9f dTY0IF9fdG1wID0gKCooKGFkZHIpKSkgOyAoeyBfX3U2NCBfX3ggPSAoX190bXApOyAoKF9fdTY0 KSggKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkg PDwgNTYpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYw MFVMTCkgPDwgNDApIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAw MGZmMDAwMFVMTCkgPDwgMjQpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAw MDAwMDBmZjAwMDAwMFVMTCkgPDwgOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQp MHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChf X3U2NCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194 KSAmIChfX3U2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8IChfX3U2NCkoKChfX3U2 NCkoX194KSAmIChfX3U2NCkweGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgfSk7IH0p OyB9IHdoaWxlICgwKTsKfQojIDEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2J5dGVv cmRlci9saXR0bGVfZW5kaWFuLmgiIDIKIyA2NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQojIDE1MCAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIgpleHRlcm4gX191MzIgbnRvaGwoX191MzIpOwpl eHRlcm4gX191MzIgaHRvbmwoX191MzIpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCBu dG9ocyh1bnNpZ25lZCBzaG9ydCBpbnQpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50IGh0b25z KHVuc2lnbmVkIHNob3J0IGludCk7CiMgNjcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv Ynl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIgMgojIDQ2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9ieXRlb3JkZXIuaCIgMgojIDIwMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9m cy5oIiAyCgpleHRlcm4gdm9pZCB1cGRhdGVfYXRpbWUgKHN0cnVjdCBpbm9kZSAqKTsKCgpleHRl cm4gdm9pZCBidWZmZXJfaW5pdCh1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgaW5vZGVfaW5p dCh1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgbW50X2luaXQodW5zaWduZWQgbG9uZyk7CgoK ZW51bSBiaF9zdGF0ZV9iaXRzIHsKICAgICAgICBCSF9VcHRvZGF0ZSwKICAgICAgICBCSF9EaXJ0 eSwKICAgICAgICBCSF9Mb2NrLAogICAgICAgIEJIX1JlcSwKICAgICAgICBCSF9NYXBwZWQsCiAg ICAgICAgQkhfTmV3LAogICAgICAgIEJIX0FzeW5jLAogICAgICAgIEJIX1dhaXRfSU8sCiAgICAg ICAgQkhfbGF1bmRlciwKCiAgICAgICAgQkhfUHJpdmF0ZVN0YXJ0LAoKCn07CiMgMjM2ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0cnVjdCBidWZmZXJfaGVhZCB7CgogICAg ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl9uZXh0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYl9i bG9ja25yOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGJfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBiX2xpc3Q7CiAgICAgICAga2Rldl90IGJfZGV2OwoKICAgICAgICBhdG9taWNfdCBiX2Nv dW50OwogICAgICAgIGtkZXZfdCBiX3JkZXY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiX3N0YXRl OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYl9mbHVzaHRpbWU7CgogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqYl9uZXh0X2ZyZWU7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3ByZXZf ZnJlZTsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOwogICAgICAgIHN0 cnVjdCBidWZmZXJfaGVhZCAqYl9yZXFuZXh0OwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg KipiX3BwcmV2OwogICAgICAgIGNoYXIgKiBiX2RhdGE7CiAgICAgICAgc3RydWN0IHBhZ2UgKmJf cGFnZTsKICAgICAgICB2b2lkICgqYl9lbmRfaW8pKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGlu dCB1cHRvZGF0ZSk7CiAgICAgICAgdm9pZCAqYl9wcml2YXRlOwoKICAgICAgICB1bnNpZ25lZCBs b25nIGJfcnNlY3RvcjsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBiX3dhaXQ7CgogICAgICAg IHN0cnVjdCBpbm9kZSAqIGJfaW5vZGU7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBiX2lub2Rl X2J1ZmZlcnM7Cn07Cgp0eXBlZGVmIHZvaWQgKGJoX2VuZF9pb190KShzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJoLCBpbnQgdXB0b2RhdGUpOwp2b2lkIGluaXRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVh ZCAqLCBiaF9lbmRfaW9fdCAqLCB2b2lkICopOwojIDI4MiAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9mcy5oIgpleHRlcm4gdm9pZCBzZXRfYmhfcGFnZShzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJoLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwoKCgoKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIiAxCgoKCgpzdHJ1Y3QgcGlw ZV9pbm9kZV9pbmZvIHsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogICAgICAgIGNo YXIgKmJhc2U7CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsKICAgICAgICB1bnNpZ25lZCBpbnQg c3RhcnQ7CiAgICAgICAgdW5zaWduZWQgaW50IHJlYWRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50 IHdyaXRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50IHdhaXRpbmdfcmVhZGVyczsKICAgICAgICB1 bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJzOwogICAgICAgIHVuc2lnbmVkIGludCByX2NvdW50 ZXI7CiAgICAgICAgdW5zaWduZWQgaW50IHdfY291bnRlcjsKfTsKIyA0MiAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaCIKdm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2Rl ICogaW5vZGUpOwoKc3RydWN0IGlub2RlKiBwaXBlX25ldyhzdHJ1Y3QgaW5vZGUqIGlub2RlKTsK IyAyODggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnNfaS5oIiAxCgoKCgoKCnN0cnVjdCBtaW5peF9p bm9kZV9pbmZvIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBfX3UxNiBpMV9kYXRh WzE2XTsKICAgICAgICAgICAgICAgIF9fdTMyIGkyX2RhdGFbMTZdOwogICAgICAgIH0gdTsKfTsK IyAyODkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mc19pLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9leHQyX2ZzX2kuaCIKc3RydWN0IGV4dDJfaW5vZGVfaW5mbyB7CiAgICAg ICAgX191MzIgaV9kYXRhWzE1XTsKICAgICAgICBfX3UzMiBpX2ZsYWdzOwogICAgICAgIF9fdTMy IGlfZmFkZHI7CiAgICAgICAgX191OCBpX2ZyYWdfbm87CiAgICAgICAgX191OCBpX2ZyYWdfc2l6 ZTsKICAgICAgICBfX3UxNiBpX29zeW5jOwogICAgICAgIF9fdTMyIGlfZmlsZV9hY2w7CiAgICAg ICAgX191MzIgaV9kaXJfYWNsOwogICAgICAgIF9fdTMyIGlfZHRpbWU7CiAgICAgICAgX191MzIg aV9ibG9ja19ncm91cDsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAgICAgICAg X191MzIgaV9uZXh0X2FsbG9jX2dvYWw7CiAgICAgICAgX191MzIgaV9wcmVhbGxvY19ibG9jazsK ICAgICAgICBfX3UzMiBpX3ByZWFsbG9jX2NvdW50OwogICAgICAgIF9fdTMyIGlfZGlyX3N0YXJ0 X2xvb2t1cDsKICAgICAgICBpbnQgaV9uZXdfaW5vZGU6MTsKfTsKIyAyOTAgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvaHBmc19mc19pLmgiIDEKCgoKc3RydWN0IGhwZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICBpbm9fdCBpX3BhcmVudF9kaXI7CiAgICAg ICAgdW5zaWduZWQgaV9kbm87CiAgICAgICAgdW5zaWduZWQgaV9kcG9zOwogICAgICAgIHVuc2ln bmVkIGlfZHN1YmRubzsKICAgICAgICB1bnNpZ25lZCBpX2ZpbGVfc2VjOwogICAgICAgIHVuc2ln bmVkIGlfZGlza19zZWM7CiAgICAgICAgdW5zaWduZWQgaV9uX3NlY3M7CiAgICAgICAgdW5zaWdu ZWQgaV9lYV9zaXplOwogICAgICAgIHVuc2lnbmVkIGlfY29udiA6IDI7CiAgICAgICAgdW5zaWdu ZWQgaV9lYV9tb2RlIDogMTsKICAgICAgICB1bnNpZ25lZCBpX2VhX3VpZCA6IDE7CiAgICAgICAg dW5zaWduZWQgaV9lYV9naWQgOiAxOwogICAgICAgIHVuc2lnbmVkIGlfZGlydHkgOiAxOwogICAg ICAgIHN0cnVjdCBzZW1hcGhvcmUgaV9zZW07CiAgICAgICAgbG9mZl90ICoqaV9yZGRpcl9vZmY7 Cn07CiMgMjkxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L250ZnNfZnNfaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9udGZzX2ZzX2kuaCIgMgoKCnN0cnVjdCBudGZzX2F0dHJpYnV0ZTsKc3RydWN0IG50 ZnNfc2JfaW5mbzsKCgoKCnR5cGVkZWYgdTggbnRmc191ODsKdHlwZWRlZiB1MTYgbnRmc191MTY7 CnR5cGVkZWYgdTMyIG50ZnNfdTMyOwp0eXBlZGVmIHU2NCBudGZzX3U2NDsKdHlwZWRlZiBzOCBu dGZzX3M4Owp0eXBlZGVmIHMxNiBudGZzX3MxNjsKdHlwZWRlZiBzMzIgbnRmc19zMzI7CnR5cGVk ZWYgczY0IG50ZnNfczY0OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgbnRtb2RlX3Q7CgoK CnR5cGVkZWYgdWlkX3QgbnRmc191aWRfdDsKCgoKdHlwZWRlZiBnaWRfdCBudGZzX2dpZF90OwoK Cgp0eXBlZGVmIF9fa2VybmVsX3NpemVfdCBudGZzX3NpemVfdDsKCgoKdHlwZWRlZiBfX2tlcm5l bF90aW1lX3QgbnRmc190aW1lX3Q7CgoKCgoKdHlwZWRlZiB1MTYgbnRmc193Y2hhcl90OwoKCgoK dHlwZWRlZiBzNjQgbnRmc19vZmZzZXRfdDsKCgoKCnR5cGVkZWYgdTY0IG50ZnNfdGltZTY0X3Q7 CiMgNjkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbnRmc19mc19pLmgiCnR5cGVkZWYg czMyIG50ZnNfY2x1c3Rlcl90OwoKCgpzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvIHsKICAgICAgICBz dHJ1Y3QgbnRmc19zYl9pbmZvICp2b2w7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX251bWJlcjsK ICAgICAgICBfX3UxNiBzZXF1ZW5jZV9udW1iZXI7CiAgICAgICAgdW5zaWduZWQgY2hhciAqYXR0 cjsKICAgICAgICBpbnQgYXR0cl9jb3VudDsKICAgICAgICBzdHJ1Y3QgbnRmc19hdHRyaWJ1dGUg KmF0dHJzOwogICAgICAgIGludCByZWNvcmRfY291bnQ7CiAgICAgICAgaW50ICpyZWNvcmRzOwoK ICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcmVjb3Jkc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsdXN0 ZXJzX3Blcl9yZWNvcmQ7CiAgICAgICAgICAgICAgICB9IGluZGV4OwogICAgICAgIH0gdTsKfTsK IyAyOTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvbXNkb3NfZnNfaS5oIiAxCgoKCgoKCgpzdHJ1Y3QgbXNkb3Nf aW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICBp bnQgaV9zdGFydDsKICAgICAgICBpbnQgaV9sb2dzdGFydDsKICAgICAgICBpbnQgaV9hdHRyczsK ICAgICAgICBpbnQgaV9jdGltZV9tczsKICAgICAgICBpbnQgaV9sb2NhdGlvbjsKICAgICAgICBz dHJ1Y3QgaW5vZGUgKmlfZmF0X2lub2RlOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9mYXRf aGFzaDsKfTsKIyAyOTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIgMQoKCgoKCgoKIyAx ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX2kuaCIgMQojIDkgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC91bXNkb3NfZnNfaS5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvdW1zZG9zX2ZzX2kuaCIKc3RydWN0IGRpcl9sb2NraW5nX2luZm8gewogICAgICAgIHdh aXRfcXVldWVfaGVhZF90IHA7CiAgICAgICAgc2hvcnQgaW50IGxvb2tpbmc7CiAgICAgICAgc2hv cnQgaW50IGNyZWF0aW5nOwoKCgogICAgICAgIGxvbmcgcGlkOwoKfTsKCnN0cnVjdCB1bXNkb3Nf aW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaW5mbzsK ICAgICAgICBzdHJ1Y3QgZGlyX2xvY2tpbmdfaW5mbyBkaXJfaW5mbzsKICAgICAgICBpbnQgaV9w YXRjaGVkOwogICAgICAgIGludCBpX2lzX2hsaW5rOwogICAgICAgIG9mZl90IHBvczsKfTsKIyAy OTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvaXNvX2ZzX2kuaCIgMQoKCgoKCgpzdHJ1Y3QgaXNvX2lub2RlX2lu Zm8gewogICAgICAgIHVuc2lnbmVkIGludCBpX2ZpcnN0X2V4dGVudDsKICAgICAgICB1bnNpZ25l ZCBjaGFyIGlfZmlsZV9mb3JtYXQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX25leHRfc2VjdGlv bl9pbm87CiAgICAgICAgb2ZmX3QgaV9zZWN0aW9uX3NpemU7Cn07CiMgMjk1ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L25mc19mc19pLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS90eXBl cy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyA2ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L25mcy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmZz LmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaCIg MQojIDE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oIgpl bnVtIHJwY19hdXRoX2ZsYXZvciB7CiAgICAgICAgUlBDX0FVVEhfTlVMTCA9IDAsCiAgICAgICAg UlBDX0FVVEhfVU5JWCA9IDEsCiAgICAgICAgUlBDX0FVVEhfU0hPUlQgPSAyLAogICAgICAgIFJQ Q19BVVRIX0RFUyA9IDMsCiAgICAgICAgUlBDX0FVVEhfS1JCID0gNCwKfTsKCmVudW0gcnBjX21z Z190eXBlIHsKICAgICAgICBSUENfQ0FMTCA9IDAsCiAgICAgICAgUlBDX1JFUExZID0gMQp9OwoK ZW51bSBycGNfcmVwbHlfc3RhdCB7CiAgICAgICAgUlBDX01TR19BQ0NFUFRFRCA9IDAsCiAgICAg ICAgUlBDX01TR19ERU5JRUQgPSAxCn07CgplbnVtIHJwY19hY2NlcHRfc3RhdCB7CiAgICAgICAg UlBDX1NVQ0NFU1MgPSAwLAogICAgICAgIFJQQ19QUk9HX1VOQVZBSUwgPSAxLAogICAgICAgIFJQ Q19QUk9HX01JU01BVENIID0gMiwKICAgICAgICBSUENfUFJPQ19VTkFWQUlMID0gMywKICAgICAg ICBSUENfR0FSQkFHRV9BUkdTID0gNCwKICAgICAgICBSUENfU1lTVEVNX0VSUiA9IDUKfTsKCmVu dW0gcnBjX3JlamVjdF9zdGF0IHsKICAgICAgICBSUENfTUlTTUFUQ0ggPSAwLAogICAgICAgIFJQ Q19BVVRIX0VSUk9SID0gMQp9OwoKZW51bSBycGNfYXV0aF9zdGF0IHsKICAgICAgICBSUENfQVVU SF9PSyA9IDAsCiAgICAgICAgUlBDX0FVVEhfQkFEQ1JFRCA9IDEsCiAgICAgICAgUlBDX0FVVEhf UkVKRUNURURDUkVEID0gMiwKICAgICAgICBSUENfQVVUSF9CQURWRVJGID0gMywKICAgICAgICBS UENfQVVUSF9SRUpFQ1RFRFZFUkYgPSA0LAogICAgICAgIFJQQ19BVVRIX1RPT1dFQUsgPSA1Cn07 CiMgMTEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmZzLmgiIDIKIyA0MSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9uZnMuaCIKIGVudW0gbmZzX3N0YXQgewogICAgICAgIE5G U19PSyA9IDAsCiAgICAgICAgTkZTRVJSX1BFUk0gPSAxLAogICAgICAgIE5GU0VSUl9OT0VOVCA9 IDIsCiAgICAgICAgTkZTRVJSX0lPID0gNSwKICAgICAgICBORlNFUlJfTlhJTyA9IDYsCiAgICAg ICAgTkZTRVJSX0VBR0FJTiA9IDExLAogICAgICAgIE5GU0VSUl9BQ0NFUyA9IDEzLAogICAgICAg IE5GU0VSUl9FWElTVCA9IDE3LAogICAgICAgIE5GU0VSUl9YREVWID0gMTgsCiAgICAgICAgTkZT RVJSX05PREVWID0gMTksCiAgICAgICAgTkZTRVJSX05PVERJUiA9IDIwLAogICAgICAgIE5GU0VS Ul9JU0RJUiA9IDIxLAogICAgICAgIE5GU0VSUl9JTlZBTCA9IDIyLAogICAgICAgIE5GU0VSUl9G QklHID0gMjcsCiAgICAgICAgTkZTRVJSX05PU1BDID0gMjgsCiAgICAgICAgTkZTRVJSX1JPRlMg PSAzMCwKICAgICAgICBORlNFUlJfTUxJTksgPSAzMSwKICAgICAgICBORlNFUlJfT1BOT1RTVVBQ ID0gNDUsCiAgICAgICAgTkZTRVJSX05BTUVUT09MT05HID0gNjMsCiAgICAgICAgTkZTRVJSX05P VEVNUFRZID0gNjYsCiAgICAgICAgTkZTRVJSX0RRVU9UID0gNjksCiAgICAgICAgTkZTRVJSX1NU QUxFID0gNzAsCiAgICAgICAgTkZTRVJSX1JFTU9URSA9IDcxLAogICAgICAgIE5GU0VSUl9XRkxV U0ggPSA5OSwKICAgICAgICBORlNFUlJfQkFESEFORExFID0gMTAwMDEsCiAgICAgICAgTkZTRVJS X05PVF9TWU5DID0gMTAwMDIsCiAgICAgICAgTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywKICAg ICAgICBORlNFUlJfTk9UU1VQUCA9IDEwMDA0LAogICAgICAgIE5GU0VSUl9UT09TTUFMTCA9IDEw MDA1LAogICAgICAgIE5GU0VSUl9TRVJWRVJGQVVMVCA9IDEwMDA2LAogICAgICAgIE5GU0VSUl9C QURUWVBFID0gMTAwMDcsCiAgICAgICAgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOAogfTsKCgoKZW51 bSBuZnNfZnR5cGUgewogICAgICAgIE5GTk9OID0gMCwKICAgICAgICBORlJFRyA9IDEsCiAgICAg ICAgTkZESVIgPSAyLAogICAgICAgIE5GQkxLID0gMywKICAgICAgICBORkNIUiA9IDQsCiAgICAg ICAgTkZMTksgPSA1LAogICAgICAgIE5GU09DSyA9IDYsCiAgICAgICAgTkZCQUQgPSA3LAogICAg ICAgIE5GRklGTyA9IDgKfTsKCgoKCgoKc3RydWN0IG5mc19maCB7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdOwp9OwojIDEwNyAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZnMuaCIKZW51bSBuZnMzX3N0YWJsZV9ob3cgewog ICAgICAgIE5GU19VTlNUQUJMRSA9IDAsCiAgICAgICAgTkZTX0RBVEFfU1lOQyA9IDEsCiAgICAg ICAgTkZTX0ZJTEVfU1lOQyA9IDIKfTsKIyA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L25mc19mc19pLmgiIDIKCgoKCnN0cnVjdCBuZnNfaW5vZGVfaW5mbyB7CgoKCiAgICAgICAgX191 NjQgZnNpZDsKICAgICAgICBfX3U2NCBmaWxlaWQ7CgoKCgogICAgICAgIHN0cnVjdCBuZnNfZmgg Zmg7CgoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwojIDQ1ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCiAgICAgICAgdW5zaWduZWQgbG9uZyByZWFkX2Nh Y2hlX2ppZmZpZXM7CiAgICAgICAgX191NjQgcmVhZF9jYWNoZV9jdGltZTsKICAgICAgICBfX3U2 NCByZWFkX2NhY2hlX210aW1lOwogICAgICAgIF9fdTY0IHJlYWRfY2FjaGVfaXNpemU7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBhdHRydGltZW87CiAgICAgICAgdW5zaWduZWQgbG9uZyBhdHRydGlt ZW9fdGltZXN0YW1wOwoKCgoKCiAgICAgICAgX191MzIgY29va2lldmVyZlsyXTsKCgoKCiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCByZWFkOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZGlydHk7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjb21taXQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCB3cml0ZWJhY2s7CgogICAgICAgIHVuc2lnbmVkIGludCBucmVhZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZGlydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmNvbW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucGFnZXM7CgoKICAgICAg ICBzdHJ1Y3QgaW5vZGUgKmhhc2hfbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqaGFzaF9wcmV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dHNjYW47CgoKICAgICAgICBz dHJ1Y3QgcnBjX2NyZWQgKm1tX2NyZWQ7Cn07CiMgOTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvbmZzX2ZzX2kuaCIKc3RydWN0IG5mc19sb2NrX2luZm8gewogICAgICAgIHUzMiBzdGF0 ZTsKICAgICAgICB1MzIgZmxhZ3M7CiAgICAgICAgc3RydWN0IG5sbV9ob3N0ICpob3N0Owp9Owoj IDI5NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zeXN2X2ZzX2kuaCIgMQoKCgoKCgpzdHJ1Y3Qgc3lzdl9pbm9k ZV9pbmZvIHsKICAgICAgICB1MzIgaV9kYXRhWzEwKzErMSsxXTsKCgoKCn07CiMgMjk3ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9hLm91dC5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2Eu b3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewogIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwogIHVuc2ln bmVkIGFfdGV4dDsKICB1bnNpZ25lZCBhX2RhdGE7CiAgdW5zaWduZWQgYV9ic3M7CiAgdW5zaWdu ZWQgYV9zeW1zOwogIHVuc2lnbmVkIGFfZW50cnk7CiAgdW5zaWduZWQgYV90cnNpemU7CiAgdW5z aWduZWQgYV9kcnNpemU7Cn07CiMgOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hLm91 dC5oIiAyCgoKCgplbnVtIG1hY2hpbmVfdHlwZSB7CgoKCiAgTV9PTERTVU4yID0gMCwKCgoKCiAg TV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAyLAoKCgoKICBNX1NQQVJDID0gMywKCgogIE1f Mzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCiAgTV9NSVBTMiA9IDE1Mgp9OwojIDEzMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hLm91dC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDEzMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9h Lm91dC5oIiAyCiMgMTU3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiCnN0 cnVjdCBubGlzdCB7CiAgdW5pb24gewogICAgY2hhciAqbl9uYW1lOwogICAgc3RydWN0IG5saXN0 ICpuX25leHQ7CiAgICBsb25nIG5fc3RyeDsKICB9IG5fdW47CiAgdW5zaWduZWQgY2hhciBuX3R5 cGU7CiAgY2hhciBuX290aGVyOwogIHNob3J0IG5fZGVzYzsKICB1bnNpZ25lZCBsb25nIG5fdmFs dWU7Cn07CiMgMjM1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiCnN0cnVj dCByZWxvY2F0aW9uX2luZm8KewoKICBpbnQgcl9hZGRyZXNzOwoKICB1bnNpZ25lZCBpbnQgcl9z eW1ib2xudW06MjQ7CgoKCiAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKCgogIHVuc2lnbmVkIGlu dCByX2xlbmd0aDoyOwoKCgoKCgogIHVuc2lnbmVkIGludCByX2V4dGVybjoxOwoKCgoKCgoKICB1 bnNpZ25lZCBpbnQgcl9wYWQ6NDsKCn07CiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9hZmZzX2ZzX2kuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1l LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3RpbWUuaCIgMgoKCgpzdHJ1Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0dl9zZWM7 CiAgICAgICAgbG9uZyB0dl9uc2VjOwp9OwojIDMxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3RpbWUuaCIKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZwp0aW1lc3BlY190b19q aWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl YyA9IHZhbHVlLT50dl9zZWM7CiAgICAgICAgbG9uZyBuc2VjID0gdmFsdWUtPnR2X25zZWM7Cgog ICAgICAgIGlmIChzZWMgPj0gKCgofjBVTCA+PiAxKS0xKSAvIDEwMCkpCiAgICAgICAgICAgICAg ICByZXR1cm4gKCh+MFVMID4+IDEpLTEpOwogICAgICAgIG5zZWMgKz0gMTAwMDAwMDAwMEwgLyAx MDAgLSAxOwogICAgICAgIG5zZWMgLz0gMTAwMDAwMDAwMEwgLyAxMDA7CiAgICAgICAgcmV0dXJu IDEwMCAqIHNlYyArIG5zZWM7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQKamlmZmllc190b190 aW1lc3BlYyh1bnNpZ25lZCBsb25nIGppZmZpZXMsIHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsK ICAgICAgICB2YWx1ZS0+dHZfbnNlYyA9IChqaWZmaWVzICUgMTAwKSAqICgxMDAwMDAwMDAwTCAv IDEwMCk7CiAgICAgICAgdmFsdWUtPnR2X3NlYyA9IGppZmZpZXMgLyAxMDA7Cn0KIyA2NyAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZwpta3RpbWUgKHVuc2lnbmVkIGludCB5ZWFyLCB1bnNpZ25lZCBpbnQgbW9uLAogICAgICAg IHVuc2lnbmVkIGludCBkYXksIHVuc2lnbmVkIGludCBob3VyLAogICAgICAgIHVuc2lnbmVkIGlu dCBtaW4sIHVuc2lnbmVkIGludCBzZWMpCnsKICAgICAgICBpZiAoMCA+PSAoaW50KSAobW9uIC09 IDIpKSB7CiAgICAgICAgICAgICAgICBtb24gKz0gMTI7CiAgICAgICAgICAgICAgICB5ZWFyIC09 IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKCgoCiAgICAgICAgICAgICAgICAodW5zaWdu ZWQgbG9uZykgKHllYXIvNCAtIHllYXIvMTAwICsgeWVhci80MDAgKyAzNjcqbW9uLzEyICsgZGF5 KSArCiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIqMzY1IC0gNzE5NDk5CiAgICAgICAgICAg ICkqMjQgKyBob3VyCiAgICAgICAgICApKjYwICsgbWluCiAgICAgICAgKSo2MCArIHNlYzsKfQoK CgoKc3RydWN0IHRpbWV2YWwgewogICAgICAgIHRpbWVfdCB0dl9zZWM7CiAgICAgICAgc3VzZWNv bmRzX3QgdHZfdXNlYzsKfTsKCnN0cnVjdCB0aW1lem9uZSB7CiAgICAgICAgaW50IHR6X21pbnV0 ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1lOwp9OwoKCgoKZXh0ZXJuIHZvaWQgZG9fZ2V0 dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CmV4dGVybiB2b2lkIGRvX3NldHRpbWVvZmRh eShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9pZCBnZXRfZmFzdF90aW1lKHN0cnVjdCB0 aW1ldmFsICp0dik7CmV4dGVybiB2b2lkICgqZG9fZ2V0X2Zhc3RfdGltZSkoc3RydWN0IHRpbWV2 YWwgKik7CiMgMTIxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIKc3RydWN0 IGl0aW1lcnNwZWMgewogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgICAg ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cn07CgpzdHJ1Y3QgaXRpbWVydmFsIHsKICAgICAg ICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF92 YWx1ZTsKfTsKIyA4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAy CiMgMTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiCnN0cnVjdCBh ZmZzX2V4dF9rZXkgewogICAgICAgIHUzMiBleHQ7CiAgICAgICAgdTMyIGtleTsKfTsKCgoKCnN0 cnVjdCBhZmZzX2lub2RlX2luZm8gewogICAgICAgIHUzMiBpX29wZW5jbnQ7CiAgICAgICAgc3Ry dWN0IHNlbWFwaG9yZSBpX2xpbmtfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfZXh0 X2xvY2s7CgogICAgICAgIHUzMiBpX2Jsa2NudDsKICAgICAgICB1MzIgaV9leHRjbnQ7CiAgICAg ICAgdTMyICppX2xjOwogICAgICAgIHUzMiBpX2xjX3NpemU7CiAgICAgICAgdTMyIGlfbGNfc2hp ZnQ7CiAgICAgICAgdTMyIGlfbGNfbWFzazsKICAgICAgICBzdHJ1Y3QgYWZmc19leHRfa2V5ICpp X2FjOwogICAgICAgIHUzMiBpX2V4dF9sYXN0OwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq aV9leHRfYmg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICB1MzIg aV9wcm90ZWN0OwogICAgICAgIHUzMiBpX2xhc3RhbGxvYzsKICAgICAgICBpbnQgaV9wYV9jbnQ7 CiMgNTEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiCn07CiMgMjk4 ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3Vmc19mc19pLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC91ZnNfZnNfaS5oIgpzdHJ1Y3QgdWZzX2lub2RlX2luZm8gewogICAgICAgIHVuaW9u IHsKICAgICAgICAgICAgICAgIF9fdTMyIGlfZGF0YVsxNV07CiAgICAgICAgICAgICAgICBfX3U4 IGlfc3ltbGlua1s0KjE1XTsKICAgICAgICB9IGlfdTE7CiAgICAgICAgX191NjQgaV9zaXplOwog ICAgICAgIF9fdTMyIGlfZmxhZ3M7CiAgICAgICAgX191MzIgaV9nZW47CiAgICAgICAgX191MzIg aV9zaGFkb3c7CiAgICAgICAgX191MzIgaV91bnVzZWQxOwogICAgICAgIF9fdTMyIGlfdW51c2Vk MjsKICAgICAgICBfX3UzMiBpX29lZnRmbGFnOwogICAgICAgIF9fdTE2IGlfb3N5bmM7CiAgICAg ICAgX191MzIgaV9sYXN0ZnJhZzsKfTsKIyAyOTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZWZzX2ZzX2kuaCIg MQojIDEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Vmc19mc19pLmgiCnR5cGVkZWYg aW50MzJfdCBlZnNfYmxvY2tfdDsKdHlwZWRlZiB1aW50MzJfdCBlZnNfaW5vX3Q7CgoKCgoKCnR5 cGVkZWYgdW5pb24gZXh0ZW50X3UgewogICAgICAgIHVuc2lnbmVkIGNoYXIgcmF3WzhdOwogICAg ICAgIHN0cnVjdCBleHRlbnRfcyB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfbWFn aWM6ODsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBleF9ibjoyNDsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBleF9sZW5ndGg6ODsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBleF9vZmZzZXQ6MjQ7CiAgICAgICAgfSBjb29rZWQ7Cn0gZWZzX2V4dGVudDsKCnR5cGVkZWYg c3RydWN0IGVkZXZzIHsKICAgICAgICBzaG9ydCBvZGV2OwogICAgICAgIHVuc2lnbmVkIGludCBu ZGV2Owp9IGVmc19kZXZzOwoKCgoKCnN0cnVjdCBlZnNfZGlub2RlIHsKICAgICAgICB1X3Nob3J0 IGRpX21vZGU7CiAgICAgICAgc2hvcnQgZGlfbmxpbms7CiAgICAgICAgdV9zaG9ydCBkaV91aWQ7 CiAgICAgICAgdV9zaG9ydCBkaV9naWQ7CiAgICAgICAgaW50MzJfdCBkaV9zaXplOwogICAgICAg IGludDMyX3QgZGlfYXRpbWU7CiAgICAgICAgaW50MzJfdCBkaV9tdGltZTsKICAgICAgICBpbnQz Ml90IGRpX2N0aW1lOwogICAgICAgIHVpbnQzMl90IGRpX2dlbjsKICAgICAgICBzaG9ydCBkaV9u dW1leHRlbnRzOwogICAgICAgIHVfY2hhciBkaV92ZXJzaW9uOwogICAgICAgIHVfY2hhciBkaV9z cGFyZTsKICAgICAgICB1bmlvbiBkaV9hZGRyIHsKICAgICAgICAgICAgICAgIGVmc19leHRlbnQg ZGlfZXh0ZW50c1sxMl07CiAgICAgICAgICAgICAgICBlZnNfZGV2cyBkaV9kZXY7CiAgICAgICAg fSBkaV91Owp9OwoKCnN0cnVjdCBlZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgaW50IG51bWV4dGVu dHM7CiAgICAgICAgaW50IGxhc3RleHRlbnQ7CgogICAgICAgIGVmc19leHRlbnQgZXh0ZW50c1sx Ml07Cn07CiMgMzAwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAxCiMgMTIgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv Y29kYV9mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIg MQojIDE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgiIDEKIyAxMDkgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvY29kYS5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X3F1 YWRfdDsKIyAxNjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3Qg dmVudXNfZGlyZW50IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfZmlsZW5vOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGRfcmVjbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgZF9uYW1sZW47CiAgICAgICAgY2hhciBkX25hbWVbMjU1ICsgMV07 Cn07CiMgMTk4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKdHlwZWRlZiB1 X2xvbmcgVm9sdW1lSWQ7CnR5cGVkZWYgdV9sb25nIFZub2RlSWQ7CnR5cGVkZWYgdV9sb25nIFVu aXF1ZV90Owp0eXBlZGVmIHVfbG9uZyBGaWxlVmVyc2lvbjsKCgoKCnR5cGVkZWYgc3RydWN0IFZp Y2VGaWQgewogICAgVm9sdW1lSWQgVm9sdW1lOwogICAgVm5vZGVJZCBWbm9kZTsKICAgIFVuaXF1 ZV90IFVuaXF1ZTsKfSBWaWNlRmlkOwoKCgoKc3RhdGljIF9faW5saW5lX18gaW5vX3QgY29kYV9m Mmkoc3RydWN0IFZpY2VGaWQgKmZpZCkKewogICAgICAgIGlmICggISBmaWQgKQogICAgICAgICAg ICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKGZpZC0+Vm5vZGUgPT0gMHhmZmZmZmZmZSB8fCBm aWQtPlZub2RlID09IDB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICByZXR1cm4gKChmaWQtPlZv bHVtZSA8PCAyMCkgfCAoZmlkLT5VbmlxdWUgJiAweGZmZmZmKSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgcmV0dXJuIChmaWQtPlVuaXF1ZSArIChmaWQtPlZub2RlPDwxMCkgKyAoZmlk LT5Wb2x1bWU8PDIwKSk7Cn0KIyAyMzMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29k YS5oIgp0eXBlZGVmIHVfaW50MzJfdCB2dWlkX3Q7CnR5cGVkZWYgdV9pbnQzMl90IHZnaWRfdDsK CgoKCnN0cnVjdCBjb2RhX2NyZWQgewogICAgdnVpZF90IGNyX3VpZCwgY3JfZXVpZCwgY3Jfc3Vp ZCwgY3JfZnN1aWQ7CiAgICB2Z2lkX3QgY3JfZ3JvdXBpZCwgY3JfZWdpZCwgY3Jfc2dpZCwgY3Jf ZnNnaWQ7Cn07CgoKCgoKCgplbnVtIGNvZGFfdnR5cGUgeyBDX1ZOT04sIENfVlJFRywgQ19WRElS LCBDX1ZCTEssIENfVkNIUiwgQ19WTE5LLCBDX1ZTT0NLLCBDX1ZGSUZPLCBDX1ZCQUQgfTsKCnN0 cnVjdCBjb2RhX3ZhdHRyIHsKICAgICAgICBsb25nIHZhX3R5cGU7CiAgICAgICAgdV9zaG9ydCB2 YV9tb2RlOwogICAgICAgIHNob3J0IHZhX25saW5rOwogICAgICAgIHZ1aWRfdCB2YV91aWQ7CiAg ICAgICAgdmdpZF90IHZhX2dpZDsKICAgICAgICBsb25nIHZhX2ZpbGVpZDsKICAgICAgICB1X3F1 YWRfdCB2YV9zaXplOwogICAgICAgIGxvbmcgdmFfYmxvY2tzaXplOwogICAgICAgIHN0cnVjdCB0 aW1lc3BlYyB2YV9hdGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdmFfbXRpbWU7CiAgICAg ICAgc3RydWN0IHRpbWVzcGVjIHZhX2N0aW1lOwogICAgICAgIHVfbG9uZyB2YV9nZW47CiAgICAg ICAgdV9sb25nIHZhX2ZsYWdzOwogICAgICAgIHVfcXVhZF90IHZhX3JkZXY7CiAgICAgICAgdV9x dWFkX3QgdmFfYnl0ZXM7CiAgICAgICAgdV9xdWFkX3QgdmFfZmlsZXJldjsKfTsKCgoKCnN0cnVj dCBjb2RhX3N0YXRmcyB7CiAgICBpbnQzMl90IGZfYmxvY2tzOwogICAgaW50MzJfdCBmX2JmcmVl OwogICAgaW50MzJfdCBmX2JhdmFpbDsKICAgIGludDMyX3QgZl9maWxlczsKICAgIGludDMyX3Qg Zl9mZnJlZTsKfTsKIyAzMzcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29kYS5oIgpz dHJ1Y3QgY29kYV9pbl9oZHIgewogICAgdW5zaWduZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25l ZCBsb25nIHVuaXF1ZTsKICAgIHVfc2hvcnQgcGlkOwogICAgdV9zaG9ydCBwZ2lkOwogICAgdV9z aG9ydCBzaWQ7CiAgICBzdHJ1Y3QgY29kYV9jcmVkIGNyZWQ7Cn07CgoKc3RydWN0IGNvZGFfb3V0 X2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29kZTsKICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVl OwogICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7Cn07CgoKc3RydWN0IGNvZGFfcm9vdF9vdXQgewog ICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBj b2RhX3Jvb3RfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGluOwp9OwoKCnN0cnVjdCBjb2Rh X29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwog ICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvaDsKICAgIHVfcXVhZF90IGRldjsKICAgIGlub190IGlub2RlOwp9OwoKCgpzdHJ1 Y3QgY29kYV9zdG9yZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlk IFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9zdG9yZV9vdXQgewogICAgc3Ry dWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfcmVsZWFzZV9pbiB7CiAgICBz dHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07 CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsK fTsKCgpzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAg ICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9jbG9zZV9vdXQg ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfaW9jdGxfaW4g ewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGNt ZDsKICAgIGludCBsZW47CiAgICBpbnQgcndmbGFnOwogICAgY2hhciAqZGF0YTsKfTsKCnN0cnVj dCBjb2RhX2lvY3RsX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgaW50IGxl bjsKICAgIGNhZGRyX3QgZGF0YTsKfTsKCgoKc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiB7CiAgICBz dHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9n ZXRhdHRyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFf dmF0dHIgYXR0cjsKfTsKCgoKc3RydWN0IGNvZGFfc2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29k YV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRy Owp9OwoKc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBv dXQ7Cn07CgoKc3RydWN0IGNvZGFfYWNjZXNzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBp aDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vz c19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKCgoKCgpzdHJ1Y3QgY29k YV9sb29rdXBfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlk OwogICAgaW50IG5hbWU7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9sb29rdXBfb3V0 IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQg dnR5cGU7Cn07CgoKCnN0cnVjdCBjb2RhX2NyZWF0ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9o ZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAg aW50IGV4Y2w7CiAgICBpbnQgbW9kZTsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfY3Jl YXRlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwog ICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgoKc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsK ICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1l Owp9OwoKc3RydWN0IGNvZGFfcmVtb3ZlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91 dDsKfTsKCgpzdHJ1Y3QgY29kYV9saW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsK ICAgIFZpY2VGaWQgc291cmNlRmlkOwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IHRuYW1l Owp9OwoKc3RydWN0IGNvZGFfbGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7 Cn07CgoKCnN0cnVjdCBjb2RhX3JlbmFtZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7 CiAgICBWaWNlRmlkIHNvdXJjZUZpZDsKICAgIGludCBzcmNuYW1lOwogICAgVmljZUZpZCBkZXN0 RmlkOwogICAgaW50IGRlc3RuYW1lOwp9OwoKc3RydWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBz dHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9ta2Rpcl9pbiB7CiAgICBz dHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92 YXR0ciBhdHRyOwogICAgaW50IG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgewogICAg c3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2Rh X3ZhdHRyIGF0dHI7Cn07CgoKCnN0cnVjdCBjb2RhX3JtZGlyX2luIHsKICAgIHN0cnVjdCBjb2Rh X2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNv ZGFfcm1kaXJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBj b2RhX3N5bWxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBW RmlkOwogICAgaW50IHNyY25hbWU7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50 IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFfc3ltbGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0 X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0 IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQgY291bnQ7CiAgICBjYWRkcl90 IGRhdGE7Cn07CgoKCnN0cnVjdCBjb2RhX2ZzeW5jX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hk ciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX2ZzeW5jX291dCB7CiAgICBz dHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV92Z2V0X2luIHsKICAgIHN0 cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3Zn ZXRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAg ICBpbnQgdnR5cGU7Cn07CiMgNjE2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGEu aCIKc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9o OwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwp9OwoKCgpzdHJ1Y3QgY29kYV96YXBmaWxlX291 dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwoK CgpzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAg ICBWaWNlRmlkIENvZGFGaWQ7Cn07CgoKCnN0cnVjdCBjb2RhX3phcHZub2RlX291dCB7CiAgICBz dHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwogICAgVmlj ZUZpZCBWRmlkOwp9OwoKCgpzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgewogICAgc3RydWN0IGNv ZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNvZGFfcmVw bGFjZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgTmV3Rmlk OwogICAgVmljZUZpZCBPbGRGaWQ7Cn07CgoKc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiB7CiAg ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7 Cn07CgpzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG9oOwogICAgaW50IGZkOwoKCiAgICBzdHJ1Y3QgZmlsZSAqZmg7Cgp9OwoKCnN0cnVjdCBjb2Rh X29wZW5fYnlfcGF0aF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlk IFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IHsK ICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICAgICAgaW50IHBhdGg7Cn07CgoKc3RydWN0 IGNvZGFfc3RhdGZzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKfTsKCnN0cnVjdCBj b2RhX3N0YXRmc19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBj b2RhX3N0YXRmcyBzdGF0Owp9OwojIDcwMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9j b2RhLmgiCnVuaW9uIGlucHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBz dHJ1Y3QgY29kYV9vcGVuX2luIGNvZGFfb3BlbjsKICAgIHN0cnVjdCBjb2RhX3N0b3JlX2luIGNv ZGFfc3RvcmU7CiAgICBzdHJ1Y3QgY29kYV9yZWxlYXNlX2luIGNvZGFfcmVsZWFzZTsKICAgIHN0 cnVjdCBjb2RhX2Nsb3NlX2luIGNvZGFfY2xvc2U7CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9pbiBj b2RhX2lvY3RsOwogICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CiAgICBz dHJ1Y3QgY29kYV9zZXRhdHRyX2luIGNvZGFfc2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2FjY2Vz c19pbiBjb2RhX2FjY2VzczsKICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsK ICAgIHN0cnVjdCBjb2RhX2NyZWF0ZV9pbiBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBjb2RhX3Jl bW92ZV9pbiBjb2RhX3JlbW92ZTsKICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOwog ICAgc3RydWN0IGNvZGFfcmVuYW1lX2luIGNvZGFfcmVuYW1lOwogICAgc3RydWN0IGNvZGFfbWtk aXJfaW4gY29kYV9ta2RpcjsKICAgIHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CiAg ICBzdHJ1Y3QgY29kYV9zeW1saW5rX2luIGNvZGFfc3ltbGluazsKICAgIHN0cnVjdCBjb2RhX3Jl YWRsaW5rX2luIGNvZGFfcmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2Zz eW5jOwogICAgc3RydWN0IGNvZGFfdmdldF9pbiBjb2RhX3ZnZXQ7CiAgICBzdHJ1Y3QgY29kYV9v cGVuX2J5X2ZkX2luIGNvZGFfb3Blbl9ieV9mZDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0 aF9pbiBjb2RhX29wZW5fYnlfcGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19pbiBjb2RhX3N0 YXRmczsKfTsKCnVuaW9uIG91dHB1dEFyZ3MgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsK ICAgIHN0cnVjdCBjb2RhX3Jvb3Rfb3V0IGNvZGFfcm9vdDsKICAgIHN0cnVjdCBjb2RhX29wZW5f b3V0IGNvZGFfb3BlbjsKICAgIHN0cnVjdCBjb2RhX2lvY3RsX291dCBjb2RhX2lvY3RsOwogICAg c3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgY29kYV9nZXRhdHRyOwogICAgc3RydWN0IGNvZGFfbG9v a3VwX291dCBjb2RhX2xvb2t1cDsKICAgIHN0cnVjdCBjb2RhX2NyZWF0ZV9vdXQgY29kYV9jcmVh dGU7CiAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKICAgIHN0cnVjdCBjb2Rh X3JlYWRsaW5rX291dCBjb2RhX3JlYWRsaW5rOwogICAgc3RydWN0IGNvZGFfdmdldF9vdXQgY29k YV92Z2V0OwogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCBjb2RhX3B1cmdldXNlcjsKICAg IHN0cnVjdCBjb2RhX3phcGZpbGVfb3V0IGNvZGFfemFwZmlsZTsKICAgIHN0cnVjdCBjb2RhX3ph cGRpcl9vdXQgY29kYV96YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgY29kYV96 YXB2bm9kZTsKICAgIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBjb2RhX3B1cmdlZmlkOwogICAg c3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgY29kYV9yZXBsYWNlOwogICAgc3RydWN0IGNvZGFfb3Bl bl9ieV9mZF9vdXQgY29kYV9vcGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRo X291dCBjb2RhX29wZW5fYnlfcGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19vdXQgY29kYV9z dGF0ZnM7Cn07Cgp1bmlvbiBjb2RhX2Rvd25jYWxscyB7CgoKICAgIHN0cnVjdCBjb2RhX3B1cmdl dXNlcl9vdXQgcHVyZ2V1c2VyOwogICAgc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgemFwZmlsZTsK ICAgIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgemFwZGlyOwogICAgc3RydWN0IGNvZGFfemFwdm5v ZGVfb3V0IHphcHZub2RlOwogICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHB1cmdlZmlkOwog ICAgc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgcmVwbGFjZTsKfTsKCgoKCgoKCnN0cnVjdCBWaWNl SW9jdGwgewogICAgICAgIGNhZGRyX3QgaW4sIG91dDsKICAgICAgICBzaG9ydCBpbl9zaXplOwog ICAgICAgIHNob3J0IG91dF9zaXplOwp9OwoKc3RydWN0IFBpb2N0bERhdGEgewogICAgICAgIGNv bnN0IGNoYXIgKnBhdGg7CiAgICAgICAgaW50IGZvbGxvdzsKICAgICAgICBzdHJ1Y3QgVmljZUlv Y3RsIHZpOwp9OwojIDc5NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0 cnVjdCBjb2RhX21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIGludCBm ZDsKfTsKIyAxNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIgMgoK CgoKc3RydWN0IGNvZGFfaW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IFZpY2VGaWQgY19maWQ7 CiAgICAgICAgdV9zaG9ydCBjX2ZsYWdzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY19jaWxp c3Q7CiAgICAgICAgc3RydWN0IGZpbGUgKmNfY29udGFpbmVyOwogICAgICAgIHVuc2lnbmVkIGlu dCBjX2NvbnRjb3VudDsKICAgICAgICBzdHJ1Y3QgY29kYV9jcmVkIGNfY2FjaGVkX2NyZWQ7CiAg ICAgICAgdW5zaWduZWQgaW50IGNfY2FjaGVkX3Blcm07Cn07CgoKCgoKCgppbnQgY29kYV9jbm9k ZV9tYWtlKHN0cnVjdCBpbm9kZSAqKiwgc3RydWN0IFZpY2VGaWQgKiwgc3RydWN0IHN1cGVyX2Js b2NrICopOwppbnQgY29kYV9jbm9kZV9tYWtlY3RsKHN0cnVjdCBpbm9kZSAqKmlub2RlLCBzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKc3RydWN0IGlub2RlICpjb2RhX2ZpZF90b19pbm9kZShWaWNl RmlkICpmaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwp2b2lkIGNvZGFfcmVwbGFjZV9maWQo c3RydWN0IGlub2RlICosIFZpY2VGaWQgKiwgVmljZUZpZCAqKTsKIyAzMDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvcm9tZnNfZnNfaS5oIiAxCgoKCgoKc3RydWN0IHJvbWZzX2lub2RlX2luZm8gewogICAgICAg IHVuc2lnbmVkIGxvbmcgaV9tZXRhc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfZGF0YW9m ZnNldDsKfTsKIyAzMDIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCIgMQojIDE2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAg ICB1bnNpZ25lZCBsb25nIHZhbDsKfSBzd3BfZW50cnlfdDsKCmV4dGVybiBhdG9taWNfdCBzaG1l bV9ucnBhZ2VzOwoKc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogICAgICAgIHNwaW5sb2NrX3Qg bG9jazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKICAgICAgICB1bnNpZ25lZCBsb25n IG5leHRfaW5kZXg7CiAgICAgICAgc3dwX2VudHJ5X3QgaV9kaXJlY3RbMTZdOwogICAgICAgIHZv aWQgKippX2luZGlyZWN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3dhcHBlZDsKICAgICAgICBp bnQgbG9ja2VkOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1Y3Qg aW5vZGUgKmlub2RlOwp9OwoKc3RydWN0IHNobWVtX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVk IGxvbmcgbWF4X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfYmxvY2tzOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgbWF4X2lub2RlczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVf aW5vZGVzOwogICAgICAgIHNwaW5sb2NrX3Qgc3RhdF9sb2NrOwp9OwojIDMwMyAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9zbWJfZnNfaS5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21i X2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAx NCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oIiAyCgoKCgpzdHJ1Y3Qg c21iX2lub2RlX2luZm8gewoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IG9wZW47CiAgICAgICAg X191MTYgZmlsZWlkOwogICAgICAgIF9fdTE2IGF0dHI7CgogICAgICAgIF9fdTE2IGFjY2VzczsK ICAgICAgICBfX3UxNiBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG10aW1lOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgY2xvc2VkOwogICAgICAgIHVuc2lnbmVkIG9wZW5lcnM7Cn07CiMg MzA0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9oZnNfZnNfaS5oIgpzdHJ1Y3QgaGZzX2lub2RlX2luZm8gewogICAgICAgIGlu dCBtYWdpYzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICBzdHJ1 Y3QgaGZzX2NhdF9lbnRyeSAqZW50cnk7CgoKICAgICAgICBzdHJ1Y3QgaGZzX2ZvcmsgKmZvcms7 CiAgICAgICAgaW50IGNvbnZlcnQ7CgoKICAgICAgICBpbm9fdCBmaWxlX3R5cGU7CiAgICAgICAg Y2hhciBkaXJfc2l6ZTsKCgogICAgICAgIGNvbnN0IHN0cnVjdCBoZnNfaGRyX2xheW91dCAqZGVm YXVsdF9sYXlvdXQ7CiAgICAgICAgc3RydWN0IGhmc19oZHJfbGF5b3V0ICpsYXlvdXQ7CgoKICAg ICAgICBpbnQgdHpfc2Vjb25kc3dlc3Q7CgoKICAgICAgICB2b2lkICgqZF9kcm9wX29wKShzdHJ1 Y3QgZGVudHJ5ICosIGNvbnN0IGlub190KTsKfTsKIyAzMDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYWRmc19m c19pLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIK c3RydWN0IGFkZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0 ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pZDsKICAgICAgICBfX3UzMiBsb2FkYWRk cjsKICAgICAgICBfX3UzMiBleGVjYWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgZmlsZXR5cGU7 CiAgICAgICAgdW5zaWduZWQgaW50IGF0dHI7CiAgICAgICAgaW50IHN0YW1wZWQ6MTsKfTsKIyAz MDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9xbng0X2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3FueHR5cGVzLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9xbnh0eXBl cy5oIgp0eXBlZGVmIF9fdTE2IHFueDRfbnh0bnRfdDsKdHlwZWRlZiBfX3U4IHFueDRfZnR5cGVf dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBfX3UzMiB4dG50X2JsazsKICAgICAgICBfX3Uz MiB4dG50X3NpemU7Cn0gcW54NF94dG50X3Q7Cgp0eXBlZGVmIF9fdTE2IHFueDRfbW9kZV90Owp0 eXBlZGVmIF9fdTE2IHFueDRfbXVpZF90Owp0eXBlZGVmIF9fdTE2IHFueDRfbWdpZF90Owp0eXBl ZGVmIF9fdTMyIHFueDRfb2ZmX3Q7CnR5cGVkZWYgX191MTYgcW54NF9ubGlua190OwojIDE1ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIiAyCgoKCgpzdHJ1Y3QgcW54 NF9pbm9kZV9pbmZvIHsKICAgICAgICBjaGFyIGlfcmVzZXJ2ZWRbMTZdOwogICAgICAgIHFueDRf b2ZmX3QgaV9zaXplOwogICAgICAgIHFueDRfeHRudF90IGlfZmlyc3RfeHRudDsKICAgICAgICBf X3UzMiBpX3hibGs7CiAgICAgICAgX19zMzIgaV9mdGltZTsKICAgICAgICBfX3MzMiBpX210aW1l OwogICAgICAgIF9fczMyIGlfYXRpbWU7CiAgICAgICAgX19zMzIgaV9jdGltZTsKICAgICAgICBx bng0X254dG50X3QgaV9udW1feHRudHM7CiAgICAgICAgcW54NF9tb2RlX3QgaV9tb2RlOwogICAg ICAgIHFueDRfbXVpZF90IGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90IGlfZ2lkOwogICAgICAg IHFueDRfbmxpbmtfdCBpX25saW5rOwogICAgICAgIF9fdTggaV96ZXJvWzRdOwogICAgICAgIHFu eDRfZnR5cGVfdCBpX3R5cGU7CiAgICAgICAgX191OCBpX3N0YXR1czsKICAgICAgICB1bnNpZ25l ZCBsb25nIG1tdV9wcml2YXRlOwp9OwojIDMwNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19p LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDUg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oIiAyCgpzdHJ1Y3Qg cmVpc2VyZnNfaW5vZGVfaW5mbyB7CiAgX191MzIgaV9rZXkgWzRdOwoKCgoKCgogIGludCBpX3Zl cnNpb247CgogIGludCBpX3BhY2tfb25fY2xvc2UgOwoKICBfX3UzMiBpX2ZpcnN0X2RpcmVjdF9i eXRlOwojIDM1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIK ICBpbnQgaV9wcmVhbGxvY19ibG9jazsKICBpbnQgaV9wcmVhbGxvY19jb3VudDsKICBzdHJ1Y3Qg bGlzdF9oZWFkIGlfcHJlYWxsb2NfbGlzdDsKCgoKCiAgaW50IG5vcGFjazsKCgoKCiAgdW5zaWdu ZWQgbG9uZyBpX3RyYW5zX2lkIDsKICB1bnNpZ25lZCBsb25nIGlfdHJhbnNfaW5kZXggOwp9Owoj IDMwOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfaS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIKc3RydWN0IGJmc19pbm9kZV9pbmZvIHsKICAgICAgICB1 bnNpZ25lZCBsb25nIGlfZHNrX2lubzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfc2Jsb2NrOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgaV9lYmxvY2s7Cn07CiMgMzA5ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vk Zl9mc19pLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5o Igp0eXBlZGVmIHN0cnVjdAp7CiAgICAgICAgX191MzIgbG9naWNhbEJsb2NrTnVtOwogICAgICAg IF9fdTE2IHBhcnRpdGlvblJlZmVyZW5jZU51bTsKfSBsYl9hZGRyOwoKCnN0cnVjdCB1ZGZfaW5v ZGVfaW5mbwp7CiAgICAgICAgbG9uZyBpX3VtdGltZTsKICAgICAgICBsb25nIGlfdWN0aW1lOwog ICAgICAgIGxvbmcgaV9jcnRpbWU7CiAgICAgICAgbG9uZyBpX3VjcnRpbWU7CgogICAgICAgIGxi X2FkZHIgaV9sb2NhdGlvbjsKICAgICAgICBfX3U2NCBpX3VuaXF1ZTsKICAgICAgICBfX3UzMiBp X2xlbkVBdHRyOwogICAgICAgIF9fdTMyIGlfbGVuQWxsb2M7CiAgICAgICAgX191NjQgaV9sZW5F eHRlbnRzOwogICAgICAgIF9fdTMyIGlfbmV4dF9hbGxvY19ibG9jazsKICAgICAgICBfX3UzMiBp X25leHRfYWxsb2NfZ29hbDsKICAgICAgICB1bnNpZ25lZCBpX2FsbG9jX3R5cGUgOiAzOwogICAg ICAgIHVuc2lnbmVkIGlfZXh0ZW5kZWRfZmUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlfc3RyYXRf NDA5NiA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9uZXdfaW5vZGUgOiAxOwogICAgICAgIHVuc2ln bmVkIHJlc2VydmVkIDogMjY7Cn07CiMgMzEwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9mc19pLmgiIDEK IyAxNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIgpzdHJ1Y3QgbmNw X2lub2RlX2luZm8gewogICAgICAgIF9fdTMyIGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3UzMiBEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191MzIgdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9f dTMyIG53YXR0cjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwogICAgICAgIGF0 b21pY190IG9wZW5lZDsKICAgICAgICBpbnQgYWNjZXNzOwogICAgICAgIF9fdTMyIHNlcnZlcl9m aWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IG9wZW5fY3Jl YXRlX2FjdGlvbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGZpbGVfaGFu ZGxlWzZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwp9OwojIDMxMSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9w cm9jX2ZzX2kuaCIgMQpzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRhc2s7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5pb24gewogICAgICAg ICAgICAgICAgaW50ICgqcHJvY19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50 cnkgKiosIHN0cnVjdCB2ZnNtb3VudCAqKik7CiAgICAgICAgICAgICAgICBpbnQgKCpwcm9jX3Jl YWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqcGFnZSk7CiAgICAgICAgfSBvcDsK ICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZTsKfTsKIyAzMTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdXNiZGV2 X2ZzX2kuaCIgMQpzdHJ1Y3QgdXNiX2RldmljZTsKc3RydWN0IHVzYl9idXM7CgpzdHJ1Y3QgdXNi ZGV2X2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBzbGlzdDsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogICAgICAgICAgICAgICAgc3RydWN0IHVzYl9idXMgKmJ1 czsKICAgICAgICB9IHA7Cn07CiMgMzEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIgMQoj IDE2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIKc3RydWN0IGpm ZnMyX2lub2RlX2luZm8gewojIDI2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2pmZnMy X2ZzX2kuaCIKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKCgogICAgICAgIF9fdTMyIGhp Z2hlc3RfdmVyc2lvbjsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0 OwoKCgoKCgogICAgICAgIHN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICptZXRhZGF0YTsKCgogICAg ICAgIHN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZGVudHM7CgoKICAgICAgICBzdHJ1Y3QgamZm czJfaW5vZGVfY2FjaGUgKmlub2NhY2hlOwoKCgoKCiAgICAgICAgX191MTYgZmxhZ3M7CiAgICAg ICAgX191OCB1c2VyY29tcHI7Cn07CiMgMzE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NyYW1mc19mc19zYi5o IiAxCgoKCgoKCnN0cnVjdCBjcmFtZnNfc2JfaW5mbyB7CiAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgbWFnaWM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9ja3M7CiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmlsZXM7CiAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cn07CiMgMzE1ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAzNDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIKc3RydWN0IGlhdHRyIHsKICAgICAgICB1bnNpZ25lZCBpbnQgaWFfdmFsaWQ7CiAgICAg ICAgdW1vZGVfdCBpYV9tb2RlOwogICAgICAgIHVpZF90IGlhX3VpZDsKICAgICAgICBnaWRfdCBp YV9naWQ7CiAgICAgICAgbG9mZl90IGlhX3NpemU7CiAgICAgICAgdGltZV90IGlhX2F0aW1lOwog ICAgICAgIHRpbWVfdCBpYV9tdGltZTsKICAgICAgICB0aW1lX3QgaWFfY3RpbWU7CiAgICAgICAg dW5zaWduZWQgaW50IGlhX2F0dHJfZmxhZ3M7Cn07CiMgMzY1ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9xdW90YS5o IiAxCiMgNDIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcXVvdGEuaCIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKIyA0MyAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9xdW90YS5oIiAyCiMgMTA5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3F1b3RhLmgiCnN0cnVjdCBkcWJsayB7CiAgICAgICAgX191MzIgZHFiX2JoYXJkbGltaXQ7 CiAgICAgICAgX191MzIgZHFiX2Jzb2Z0bGltaXQ7CiAgICAgICAgX191MzIgZHFiX2N1cmJsb2Nr czsKICAgICAgICBfX3UzMiBkcWJfaWhhcmRsaW1pdDsKICAgICAgICBfX3UzMiBkcWJfaXNvZnRs aW1pdDsKICAgICAgICBfX3UzMiBkcWJfY3VyaW5vZGVzOwogICAgICAgIHRpbWVfdCBkcWJfYnRp bWU7CiAgICAgICAgdGltZV90IGRxYl9pdGltZTsKfTsKIyAxMzQgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvcXVvdGEuaCIKc3RydWN0IGRxc3RhdHMgewogICAgICAgIF9fdTMyIGxvb2t1 cHM7CiAgICAgICAgX191MzIgZHJvcHM7CiAgICAgICAgX191MzIgcmVhZHM7CiAgICAgICAgX191 MzIgd3JpdGVzOwogICAgICAgIF9fdTMyIGNhY2hlX2hpdHM7CiAgICAgICAgX191MzIgYWxsb2Nh dGVkX2RxdW90czsKICAgICAgICBfX3UzMiBmcmVlX2RxdW90czsKICAgICAgICBfX3UzMiBzeW5j czsKfTsKCgoKZXh0ZXJuIGludCBucl9kcXVvdHMsIG5yX2ZyZWVfZHF1b3RzOwpleHRlcm4gaW50 IGRxdW90X3Jvb3Rfc3F1YXNoOwojIDE1OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9x dW90YS5oIgpzdHJ1Y3QgZHF1b3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZHFfaGFzaDsK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRxX2ludXNlOwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZHFfZnJlZTsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X2xvY2s7CiAgICAg ICAgd2FpdF9xdWV1ZV9oZWFkX3QgZHFfd2FpdF9mcmVlOwogICAgICAgIGludCBkcV9jb3VudDsK CgogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqZHFfc2I7CiAgICAgICAgdW5zaWduZWQgaW50 IGRxX2lkOwogICAgICAgIGtkZXZfdCBkcV9kZXY7CiAgICAgICAgc2hvcnQgZHFfdHlwZTsKICAg ICAgICBzaG9ydCBkcV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIGRxX3JlZmVyZW5jZWQ7 CgogICAgICAgIHN0cnVjdCBkcWJsayBkcV9kcWI7Cn07CiMgMzY2ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21v dW50LmgiIDEKIyAzNjcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCgoK c3RydWN0IHBhZ2U7CnN0cnVjdCBhZGRyZXNzX3NwYWNlOwpzdHJ1Y3Qga2lvYnVmOwoKc3RydWN0 IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqd3JpdGVwYWdlKShzdHJ1 Y3QgcGFnZSAqKTsKICAgICAgICBpbnQgKCpyZWFkcGFnZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0 IHBhZ2UgKik7CiAgICAgICAgaW50ICgqc3luY19wYWdlKShzdHJ1Y3QgcGFnZSAqKTsKICAgICAg ICBpbnQgKCpwcmVwYXJlX3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNp Z25lZCwgdW5zaWduZWQpOwogICAgICAgIGludCAoKmNvbW1pdF93cml0ZSkoc3RydWN0IGZpbGUg Kiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKCiAgICAgICAgaW50ICgqYm1h cCkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZyk7CgogICAgICAgIGludCAoKmRpcmVjdF9J TykoaW50LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGtpb2J1ZiAqLCB1bnNpZ25lZCBsb25nLCBp bnQpOwp9OwoKc3RydWN0IGFkZHJlc3Nfc3BhY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg Y2xlYW5fcGFnZXM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9wYWdlczsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGxvY2tlZF9wYWdlczsKICAgICAgICB1bnNpZ25lZCBsb25nIG5y cGFnZXM7CiAgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHM7CiAg ICAgICAgc3RydWN0IGlub2RlICpob3N0OwogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq aV9tbWFwOwogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaV9tbWFwX3NoYXJlZDsKICAg ICAgICBzcGlubG9ja190IGlfc2hhcmVkX2xvY2s7CiAgICAgICAgaW50IGdmcF9tYXNrOwp9OwoK c3RydWN0IGNoYXJfZGV2aWNlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGhhc2g7CiAgICAg ICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgZGV2X3QgZGV2OwogICAgICAgIGF0b21pY190IG9w ZW5lcnM7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZW07Cn07CgpzdHJ1Y3QgYmxvY2tfZGV2 aWNlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJkX2hhc2g7CiAgICAgICAgYXRvbWljX3Qg YmRfY291bnQ7CiAgICAgICAgc3RydWN0IGlub2RlICogYmRfaW5vZGU7CiAgICAgICAgZGV2X3Qg YmRfZGV2OwogICAgICAgIGludCBiZF9vcGVuZXJzOwogICAgICAgIGNvbnN0IHN0cnVjdCBibG9j a19kZXZpY2Vfb3BlcmF0aW9ucyAqYmRfb3A7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBiZF9z ZW07CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBiZF9pbm9kZXM7Cn07CgpzdHJ1Y3QgaW5vZGUg ewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9oYXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgaV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9kZW50cnk7CgogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgaV9kaXJ0eV9idWZmZXJzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg aV9kaXJ0eV9kYXRhX2J1ZmZlcnM7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9pbm87CiAgICAg ICAgYXRvbWljX3QgaV9jb3VudDsKICAgICAgICBrZGV2X3QgaV9kZXY7CiAgICAgICAgdW1vZGVf dCBpX21vZGU7CiAgICAgICAgbmxpbmtfdCBpX25saW5rOwogICAgICAgIHVpZF90IGlfdWlkOwog ICAgICAgIGdpZF90IGlfZ2lkOwogICAgICAgIGtkZXZfdCBpX3JkZXY7CiAgICAgICAgbG9mZl90 IGlfc2l6ZTsKICAgICAgICB0aW1lX3QgaV9hdGltZTsKICAgICAgICB0aW1lX3QgaV9tdGltZTsK ICAgICAgICB0aW1lX3QgaV9jdGltZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9ibGtiaXRzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgaV9ibGtzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9i bG9ja3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX3ZlcnNpb247CiAgICAgICAgc3RydWN0IHNl bWFwaG9yZSBpX3NlbTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfem9tYmllOwogICAgICAg IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppX29wOwogICAgICAgIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgKmlfZm9wOwogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqaV9zYjsKICAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCBpX3dhaXQ7CiAgICAgICAgc3RydWN0IGZpbGVfbG9jayAqaV9mbG9j azsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaV9tYXBwaW5nOwogICAgICAgIHN0cnVj dCBhZGRyZXNzX3NwYWNlIGlfZGF0YTsKICAgICAgICBzdHJ1Y3QgZHF1b3QgKmlfZHF1b3RbMl07 CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9kZXZpY2VzOwogICAgICAgIHN0cnVjdCBwaXBl X2lub2RlX2luZm8gKmlfcGlwZTsKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICppX2JkZXY7 CiAgICAgICAgc3RydWN0IGNoYXJfZGV2aWNlICppX2NkZXY7CgogICAgICAgIHVuc2lnbmVkIGxv bmcgaV9kbm90aWZ5X21hc2s7CiAgICAgICAgc3RydWN0IGRub3RpZnlfc3RydWN0ICppX2Rub3Rp Znk7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9zdGF0ZTsKCiAgICAgICAgdW5zaWduZWQgaW50 IGlfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBpX3NvY2s7CgogICAgICAgIGF0b21pY190 IGlfd3JpdGVjb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9hdHRyX2ZsYWdzOwogICAgICAg IF9fdTMyIGlfZ2VuZXJhdGlvbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgbWluaXhfaW5vZGVfaW5mbyBtaW5peF9pOwogICAgICAgICAgICAgICAgc3RydWN0IGV4dDJf aW5vZGVfaW5mbyBleHQyX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaHBmc19pbm9kZV9pbmZv IGhwZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gbnRmc19pOwog ICAgICAgICAgICAgICAgc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaTsKICAgICAgICAg ICAgICAgIHN0cnVjdCB1bXNkb3NfaW5vZGVfaW5mbyB1bXNkb3NfaTsKICAgICAgICAgICAgICAg IHN0cnVjdCBpc29faW5vZGVfaW5mbyBpc29mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IG5m c19pbm9kZV9pbmZvIG5mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3ZfaW5vZGVfaW5m byBzeXN2X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvIGFmZnNfaTsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB1ZnNfaTsKICAgICAgICAgICAg ICAgIHN0cnVjdCBlZnNfaW5vZGVfaW5mbyBlZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBy b21mc19pbm9kZV9pbmZvIHJvbWZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1faW5v ZGVfaW5mbyBzaG1lbV9pOwogICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfaW5vZGVfaW5mbyBj b2RhX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc21iX2lub2RlX2luZm8gc21iZnNfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCBoZnNfaW5vZGVfaW5mbyBoZnNfaTsKICAgICAgICAgICAgICAg IHN0cnVjdCBhZGZzX2lub2RlX2luZm8gYWRmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHFu eDRfaW5vZGVfaW5mbyBxbng0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfaW5v ZGVfaW5mbyByZWlzZXJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGJmc19pbm9kZV9pbmZv IGJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHVkZl9pbm9kZV9pbmZvIHVkZl9pOwogICAg ICAgICAgICAgICAgc3RydWN0IG5jcF9pbm9kZV9pbmZvIG5jcGZzX2k7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHByb2NfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBz b2NrZXQgc29ja2V0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiZGV2X2lub2RlX2luZm8g dXNiZGV2X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyBqZmZzMl9p OwogICAgICAgICAgICAgICAgdm9pZCAqZ2VuZXJpY19pcDsKICAgICAgICB9IHU7Cn07CgpzdHJ1 Y3QgZm93bl9zdHJ1Y3QgewogICAgICAgIGludCBwaWQ7CiAgICAgICAgdWlkX3QgdWlkLCBldWlk OwogICAgICAgIGludCBzaWdudW07Cn07CgpzdHJ1Y3QgZmlsZSB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBmX2xpc3Q7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZl9kZW50cnk7CiAgICAgICAg c3RydWN0IHZmc21vdW50ICpmX3Zmc21udDsKICAgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z ICpmX29wOwogICAgICAgIGF0b21pY190IGZfY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGZf ZmxhZ3M7CiAgICAgICAgbW9kZV90IGZfbW9kZTsKICAgICAgICBsb2ZmX3QgZl9wb3M7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBmX3JlYWRhLCBmX3JhbWF4LCBmX3JhZW5kLCBmX3JhbGVuLCBmX3Jh d2luOwogICAgICAgIHN0cnVjdCBmb3duX3N0cnVjdCBmX293bmVyOwogICAgICAgIHVuc2lnbmVk IGludCBmX3VpZCwgZl9naWQ7CiAgICAgICAgaW50IGZfZXJyb3I7CgogICAgICAgIHVuc2lnbmVk IGxvbmcgZl92ZXJzaW9uOwoKCiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwoKCiAgICAgICAg c3RydWN0IGtpb2J1ZiAqZl9pb2J1ZjsKICAgICAgICBsb25nIGZfaW9idWZfbG9jazsKfTsKZXh0 ZXJuIHNwaW5sb2NrX3QgZmlsZXNfbG9jazsKCgoKCgoKZXh0ZXJuIGludCBpbml0X3ByaXZhdGVf ZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiMgNTU2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnR5cGVkZWYgc3RydWN0IGZpbGVzX3N0cnVjdCAq Zmxfb3duZXJfdDsKCnN0cnVjdCBmaWxlX2xvY2sgewogICAgICAgIHN0cnVjdCBmaWxlX2xvY2sg KmZsX25leHQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmbF9saW5rOwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgZmxfYmxvY2s7CiAgICAgICAgZmxfb3duZXJfdCBmbF9vd25lcjsKICAgICAg ICB1bnNpZ25lZCBpbnQgZmxfcGlkOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGZsX3dhaXQ7 CiAgICAgICAgc3RydWN0IGZpbGUgKmZsX2ZpbGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF9m bGFnczsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CiAgICAgICAgbG9mZl90IGZsX3N0 YXJ0OwogICAgICAgIGxvZmZfdCBmbF9lbmQ7CgogICAgICAgIHZvaWQgKCpmbF9ub3RpZnkpKHN0 cnVjdCBmaWxlX2xvY2sgKik7CiAgICAgICAgdm9pZCAoKmZsX2luc2VydCkoc3RydWN0IGZpbGVf bG9jayAqKTsKICAgICAgICB2b2lkICgqZmxfcmVtb3ZlKShzdHJ1Y3QgZmlsZV9sb2NrICopOwoK ICAgICAgICBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqIGZsX2Zhc3luYzsKCiAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgc3RydWN0IG5mc19sb2NrX2luZm8gbmZzX2ZsOwogICAgICAgIH0g ZmxfdTsKfTsKIyA1ODkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJu IHN0cnVjdCBsaXN0X2hlYWQgZmlsZV9sb2NrX2xpc3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvZmNudGwuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L2ZjbnRsLmgiIDEKIyA2OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vZmNudGwuaCIKc3Ry dWN0IGZsb2NrIHsKICAgICAgICBzaG9ydCBsX3R5cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7 CiAgICAgICAgb2ZmX3QgbF9zdGFydDsKICAgICAgICBvZmZfdCBsX2xlbjsKICAgICAgICBwaWRf dCBsX3BpZDsKfTsKCnN0cnVjdCBmbG9jazY0IHsKICAgICAgICBzaG9ydCBsX3R5cGU7CiAgICAg ICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAgbG9mZl90IGxfc3RhcnQ7CiAgICAgICAgbG9mZl90 IGxfbGVuOwogICAgICAgIHBpZF90IGxfcGlkOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvZmNudGwuaCIgMgojIDU5MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9m cy5oIiAyCgpleHRlcm4gaW50IGZjbnRsX2dldGxrKHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2Nr ICopOwpleHRlcm4gaW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBz dHJ1Y3QgZmxvY2sgKik7CgpleHRlcm4gaW50IGZjbnRsX2dldGxrNjQodW5zaWduZWQgaW50LCBz dHJ1Y3QgZmxvY2s2NCAqKTsKZXh0ZXJuIGludCBmY250bF9zZXRsazY0KHVuc2lnbmVkIGludCwg dW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2s2NCAqKTsKCgpleHRlcm4gdm9pZCBsb2Nrc19pbml0 X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0 cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3Nf cmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICosIGZsX293bmVyX3QpOwpleHRlcm4gdm9pZCBsb2Nr c19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2NrICpw b3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJu IGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1 bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwb3NpeF9ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xv Y2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgcG9zaXhfdW5ibG9ja19sb2Nr KHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVybiBpbnQgcG9zaXhfbG9ja3NfZGVhZGxvY2soc3Ry dWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50IF9fZ2V0X2xl YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7CmV4dGVybiB0aW1l X3QgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBsb2NrX21heV9y ZWFkKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOwpl eHRlcm4gaW50IGxvY2tfbWF5X3dyaXRlKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVu c2lnbmVkIGxvbmcgY291bnQpOwoKc3RydWN0IGZhc3luY19zdHJ1Y3QgewogICAgICAgIGludCBt YWdpYzsKICAgICAgICBpbnQgZmFfZmQ7CiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZh X25leHQ7CiAgICAgICAgc3RydWN0IGZpbGUgKmZhX2ZpbGU7Cn07CgoKCgpleHRlcm4gaW50IGZh c3luY19oZWxwZXIoaW50LCBzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmYXN5bmNfc3RydWN0 ICoqKTsKCmV4dGVybiB2b2lkIGtpbGxfZmFzeW5jKHN0cnVjdCBmYXN5bmNfc3RydWN0ICoqLCBp bnQsIGludCk7CgpleHRlcm4gdm9pZCBfX2tpbGxfZmFzeW5jKHN0cnVjdCBmYXN5bmNfc3RydWN0 ICosIGludCwgaW50KTsKCnN0cnVjdCBuYW1laWRhdGEgewogICAgICAgIHN0cnVjdCBkZW50cnkg KmRlbnRyeTsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udDsKICAgICAgICBzdHJ1Y3QgcXN0 ciBsYXN0OwogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICAgICBpbnQgbGFzdF90eXBl Owp9OwoKCgoKc3RydWN0IHF1b3RhX21vdW50X29wdGlvbnMKewogICAgICAgIHVuc2lnbmVkIGlu dCBmbGFnczsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGRxaW9fc2VtOwogICAgICAgIHN0cnVj dCBzZW1hcGhvcmUgZHFvZmZfc2VtOwogICAgICAgIHN0cnVjdCBmaWxlICpmaWxlc1syXTsKICAg ICAgICB0aW1lX3QgaW5vZGVfZXhwaXJlWzJdOwogICAgICAgIHRpbWVfdCBibG9ja19leHBpcmVb Ml07CiAgICAgICAgY2hhciByc3F1YXNoWzJdOwp9OwojIDY1OSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWluaXhf ZnNfc2IuaCIgMQoKCgoKCgpzdHJ1Y3QgbWluaXhfc2JfaW5mbyB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHNfbnpvbmVzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIHNfaW1hcF9ibG9ja3M7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg c196bWFwX2Jsb2NrczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX2Zp cnN0ZGF0YXpvbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc19sb2df em9uZV9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWF4X3Np emU7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2RpcnNpemU7CiAgICAgICAgICAgICAg ICAgICAgICAgIGludCBzX25hbWVsZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2xp bmtfbWF4OwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19p bWFwOwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc196bWFw OwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsKICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1pbml4X3N1cGVyX2Jsb2NrICogc19tczsKICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc192ZXJzaW9uOwp9OwojIDY2MCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9leHQyX2ZzX3NiLmgiIDEKIyAzMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9leHQyX2ZzX3NiLmgiCnN0cnVjdCBleHQyX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVk IGxvbmcgc19mcmFnX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9j azsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ibG9jazsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfZnJhZ3NfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9j a3NfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2dyb3VwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19pdGJfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc19nZGJfY291bnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19ncm91cHNfY291bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZl cl9oZWFkICogc19zYmg7CiAgICAgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzX2VzOwog ICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX2dyb3VwX2Rlc2M7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVfYml0bWFwczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBz X2xvYWRlZF9ibG9ja19iaXRtYXBzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19pbm9kZV9iaXRt YXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfaW5vZGVfYml0bWFw WzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja19iaXRtYXBfbnVtYmVyWzhdOwogICAg ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfYmxvY2tfYml0bWFwWzhdOwogICAgICAgIHVuc2ln bmVkIGxvbmcgc19tb3VudF9vcHQ7CiAgICAgICAgdWlkX3Qgc19yZXN1aWQ7CiAgICAgICAgZ2lk X3Qgc19yZXNnaWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBzX3BhZDsKICAgICAgICBpbnQgc19hZGRyX3Blcl9ibG9ja19iaXRz OwogICAgICAgIGludCBzX2Rlc2NfcGVyX2Jsb2NrX2JpdHM7CiAgICAgICAgaW50IHNfaW5vZGVf c2l6ZTsKICAgICAgICBpbnQgc19maXJzdF9pbm87Cn07CiMgNjYxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hw ZnNfZnNfc2IuaCIgMQoKCgpzdHJ1Y3QgaHBmc19zYl9pbmZvIHsKICAgICAgICBpbm9fdCBzYl9y b290OwogICAgICAgIHVuc2lnbmVkIHNiX2ZzX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2JfYml0 bWFwczsKICAgICAgICB1bnNpZ25lZCBzYl9kaXJiYW5kX3N0YXJ0OwogICAgICAgIHVuc2lnbmVk IHNiX2RpcmJhbmRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzYl9kbWFwOwogICAgICAgIHVuc2ln bmVkIHNiX25fZnJlZTsKICAgICAgICB1bnNpZ25lZCBzYl9uX2ZyZWVfZG5vZGVzOwogICAgICAg IHVpZF90IHNiX3VpZDsKICAgICAgICBnaWRfdCBzYl9naWQ7CiAgICAgICAgdW1vZGVfdCBzYl9t b2RlOwogICAgICAgIHVuc2lnbmVkIHNiX2NvbnYgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2Vh cyA6IDI7CiAgICAgICAgdW5zaWduZWQgc2JfZXJyIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9j aGsgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2xvd2VyY2FzZSA6IDE7CiAgICAgICAgdW5zaWdu ZWQgc2Jfd2FzX2Vycm9yIDogMTsKICAgICAgICB1bnNpZ25lZCBzYl9jaGtkc2sgOiAyOwogICAg ICAgIHVuc2lnbmVkIHNiX3JkX2Zub2RlIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9yZF9pbm9k ZSA6IDI7CgoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBzYl9pZ2V0X3E7CiAgICAgICAgdW5z aWduZWQgY2hhciAqc2JfY3BfdGFibGU7CgoKICAgICAgICB1bnNpZ25lZCAqc2JfYm1wX2RpcjsK ICAgICAgICB1bnNpZ25lZCBzYl9jX2JpdG1hcDsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBz Yl9jcmVhdGlvbl9kZTsKCiAgICAgICAgdW5zaWduZWQgc2JfY3JlYXRpb25fZGVfbG9jayA6IDE7 CgogICAgICAgIGludCBzYl90aW1lc2hpZnQ7Cn07CiMgNjYyICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L250ZnNf ZnNfc2IuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbnRmc19mc19p LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L250ZnNfZnNfc2IuaCIgMgoK c3RydWN0IG50ZnNfc2JfaW5mb3sKCiAgICAgICAgbnRmc191aWRfdCB1aWQ7CiAgICAgICAgbnRm c19naWRfdCBnaWQ7CiAgICAgICAgbnRtb2RlX3QgdW1hc2s7CiAgICAgICAgdm9pZCAqbmxzX21h cDsKICAgICAgICB1bnNpZ25lZCBpbnQgbmd0OwogICAgICAgIGNoYXIgbWZ0X3pvbmVfbXVsdGlw bGllcjsKICAgICAgICB1bnNpZ25lZCBsb25nIG1mdF9kYXRhX3BvczsKICAgICAgICBudGZzX2Ns dXN0ZXJfdCBtZnRfem9uZV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfc3Rh cnQ7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfZW5kOwogICAgICAgIG50ZnNfY2x1 c3Rlcl90IGRhdGExX3pvbmVfcG9zOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IGRhdGEyX3pvbmVf cG9zOwoKCiAgICAgICAgbnRmc19zaXplX3QgcGFydGl0aW9uX2JpYXM7CgogICAgICAgIG50ZnNf dTMyIGF0X3N0YW5kYXJkX2luZm9ybWF0aW9uOwogICAgICAgIG50ZnNfdTMyIGF0X2F0dHJpYnV0 ZV9saXN0OwogICAgICAgIG50ZnNfdTMyIGF0X2ZpbGVfbmFtZTsKICAgICAgICBudGZzX3UzMiBh dF92b2x1bWVfdmVyc2lvbjsKICAgICAgICBudGZzX3UzMiBhdF9zZWN1cml0eV9kZXNjcmlwdG9y OwogICAgICAgIG50ZnNfdTMyIGF0X3ZvbHVtZV9uYW1lOwogICAgICAgIG50ZnNfdTMyIGF0X3Zv bHVtZV9pbmZvcm1hdGlvbjsKICAgICAgICBudGZzX3UzMiBhdF9kYXRhOwogICAgICAgIG50ZnNf dTMyIGF0X2luZGV4X3Jvb3Q7CiAgICAgICAgbnRmc191MzIgYXRfaW5kZXhfYWxsb2NhdGlvbjsK ICAgICAgICBudGZzX3UzMiBhdF9iaXRtYXA7CiAgICAgICAgbnRmc191MzIgYXRfc3ltbGluazsK CiAgICAgICAgaW50IHNlY3Rvcl9zaXplOwogICAgICAgIGludCBjbHVzdGVyX3NpemU7CiAgICAg ICAgaW50IGNsdXN0ZXJfc2l6ZV9iaXRzOwogICAgICAgIGludCBtZnRfY2x1c3RlcnNfcGVyX3Jl Y29yZDsKICAgICAgICBpbnQgbWZ0X3JlY29yZF9zaXplOwogICAgICAgIGludCBtZnRfcmVjb3Jk X3NpemVfYml0czsKICAgICAgICBpbnQgaW5kZXhfY2x1c3RlcnNfcGVyX3JlY29yZDsKICAgICAg ICBpbnQgaW5kZXhfcmVjb3JkX3NpemU7CiAgICAgICAgaW50IGluZGV4X3JlY29yZF9zaXplX2Jp dHM7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbnJfY2x1c3RlcnM7CiAgICAgICAgbnRmc19jbHVz dGVyX3QgbWZ0X2xjbjsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBtZnRfbWlycl9sY247CgogICAg ICAgIHVuc2lnbmVkIGNoYXIgKm1mdDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqdXBjYXNlOwog ICAgICAgIHVuc2lnbmVkIGludCB1cGNhc2VfbGVuZ3RoOwoKICAgICAgICBzdHJ1Y3QgbnRmc19p bm9kZV9pbmZvICptZnRfaW5vOwogICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gKm1mdG1p cnI7CiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqYml0bWFwOwogICAgICAgIHN0cnVj dCBzdXBlcl9ibG9jayAqc2I7CiAgICAgICAgdW5zaWduZWQgY2hhciBpbm9fZmxhZ3M7Cn07CiMg NjYzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDEKCgojIDEgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvZmF0X2N2Zi5oIiAxCgoKCgoKc3RydWN0IGN2Zl9mb3JtYXQKeyBpbnQg Y3ZmX3ZlcnNpb247CiAgY2hhciogY3ZmX3ZlcnNpb25fdGV4dDsKICB1bnNpZ25lZCBsb25nIGZs YWdzOwogIGludCAoKmRldGVjdF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IpOwogIGludCAo Km1vdW50X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYixjaGFyKm9wdGlvbnMpOwogIGludCAo KnVubW91bnRfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiKTsKICBzdHJ1Y3QgYnVmZmVyX2hl YWQqICgqY3ZmX2JyZWFkKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGludCBibG9jayk7CiAgc3Ry dWN0IGJ1ZmZlcl9oZWFkKiAoKmN2Zl9nZXRibGspIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsaW50 IGJsb2NrKTsKICB2b2lkICgqY3ZmX2JyZWxzZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3Ry dWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAgdm9pZCAoKmN2Zl9tYXJrX2J1ZmZlcl9kaXJ0eSkgKHN0 cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfc2V0X3VwdG9kYXRlKSAoc3RydWN0IHN1 cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVh ZCAqYmgsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsKTsKICBpbnQgKCpjdmZfaXNf dXB0b2RhdGUpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0cnVjdCBidWZmZXJfaGVhZCAqYmgp OwogIHZvaWQgKCpjdmZfbGxfcndfYmxvY2spIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgb3ByLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQg bmJyZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhbMzJd KTsKICBpbnQgKCpmYXRfYWNjZXNzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixpbnQgbnIsaW50 IG5ld192YWx1ZSk7CiAgaW50ICgqY3ZmX3N0YXRmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Is c3RydWN0IHN0YXRmcyAqYnVmLCBpbnQgYnVmc2l6KTsKICBpbnQgKCpjdmZfYm1hcCkgKHN0cnVj dCBpbm9kZSAqaW5vZGUsaW50IGJsb2NrKTsKICBzc2l6ZV90ICgqY3ZmX2ZpbGVfcmVhZCkgKCBz dHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwogIHNzaXplX3QgKCpjdmZf ZmlsZV93cml0ZSkgKCBzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90 ICopOwogIGludCAoKmN2Zl9tbWFwKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICopOwogIGludCAoKmN2Zl9yZWFkcGFnZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFn ZSAqKTsKICBpbnQgKCpjdmZfd3JpdGVwYWdlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdl ICopOwogIGludCAoKmN2Zl9kaXJfaW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0 IGZpbGUgKiBmaWxwLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1 bnNpZ25lZCBsb25nIGFyZyk7CiAgdm9pZCAoKnplcm9fb3V0X2NsdXN0ZXIpIChzdHJ1Y3QgaW5v ZGUqLCBpbnQgY2x1c3Rlcm5yKTsKfTsKCmludCByZWdpc3Rlcl9jdmZfZm9ybWF0KHN0cnVjdCBj dmZfZm9ybWF0KmN2Zl9mb3JtYXQpOwppbnQgdW5yZWdpc3Rlcl9jdmZfZm9ybWF0KHN0cnVjdCBj dmZfZm9ybWF0KmN2Zl9mb3JtYXQpOwp2b2lkIGRlY19jdmZfZm9ybWF0X3VzZV9jb3VudF9ieV92 ZXJzaW9uKGludCB2ZXJzaW9uKTsKaW50IGRldGVjdF9jdmYoc3RydWN0IHN1cGVyX2Jsb2NrKnNi LGNoYXIqZm9yY2UpOwoKZXh0ZXJuIHN0cnVjdCBjdmZfZm9ybWF0ICpjdmZfZm9ybWF0c1tdOwpl eHRlcm4gaW50IGN2Zl9mb3JtYXRfdXNlX2NvdW50W107CiMgNCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9tc2Rvc19mc19zYi5oIiAyCgoKCgoKc3RydWN0IGZhdF9tb3VudF9vcHRpb25z IHsKICAgICAgICB1aWRfdCBmc191aWQ7CiAgICAgICAgZ2lkX3QgZnNfZ2lkOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGZzX3VtYXNrOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNvZGVwYWdlOwog ICAgICAgIGNoYXIgKmlvY2hhcnNldDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaG9ydG5hbWU7 CiAgICAgICAgdW5zaWduZWQgY2hhciBuYW1lX2NoZWNrOwogICAgICAgIHVuc2lnbmVkIGNoYXIg Y29udmVyc2lvbjsKICAgICAgICB1bnNpZ25lZCBxdWlldDoxLAogICAgICAgICAgICAgICAgIHNo b3dleGVjOjEsCiAgICAgICAgICAgICAgICAgc3lzX2ltbXV0YWJsZToxLAogICAgICAgICAgICAg ICAgIGRvdHNPSzoxLAogICAgICAgICAgICAgICAgIGlzdmZhdDoxLAogICAgICAgICAgICAgICAg IHV0Zjg6MSwKICAgICAgICAgICAgICAgICB1bmljb2RlX3hsYXRlOjEsCiAgICAgICAgICAgICAg ICAgcG9zaXhmczoxLAogICAgICAgICAgICAgICAgIG51bXRhaWw6MSwKICAgICAgICAgICAgICAg ICBhdGFyaToxLAogICAgICAgICAgICAgICAgIGZhdDMyOjEsCiAgICAgICAgICAgICAgICAgbm9j YXNlOjE7Cn07CgpzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg Y2x1c3Rlcl9zaXplOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNsdXN0ZXJfYml0czsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGZhdHMsZmF0X2JpdHM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmF0 X3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmF0X2xlbmd0aDsKICAgICAgICB1bnNpZ25l ZCBsb25nIGRpcl9zdGFydDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkaXJfZW50cmllczsKICAg ICAgICB1bnNpZ25lZCBsb25nIGRhdGFfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjbHVz dGVyczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJvb3RfY2x1c3RlcjsKICAgICAgICB1bnNpZ25l ZCBsb25nIGZzaW5mb19zZWN0b3I7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBmYXRfbG9jazsK ICAgICAgICBpbnQgcHJldl9mcmVlOwogICAgICAgIGludCBmcmVlX2NsdXN0ZXJzOwogICAgICAg IHN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyBvcHRpb25zOwogICAgICAgIHN0cnVjdCBubHNfdGFi bGUgKm5sc19kaXNrOwogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKm5sc19pbzsKICAgICAgICBz dHJ1Y3QgY3ZmX2Zvcm1hdCogY3ZmX2Zvcm1hdDsKICAgICAgICB2b2lkICpkaXJfb3BzOwogICAg ICAgIHZvaWQgKnByaXZhdGVfZGF0YTsKICAgICAgICBpbnQgZGlyX3Blcl9ibG9jazsKICAgICAg ICBpbnQgZGlyX3Blcl9ibG9ja19iaXRzOwp9OwojIDY2NCAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pc29fZnNf c2IuaCIgMQoKCgoKCgpzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzX25pbm9kZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX256b25lczsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfbG9nX3pv bmVfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7CgogICAgICAgIHVuc2ln bmVkIGNoYXIgc19oaWdoX3NpZXJyYTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfbWFwcGluZzsK ICAgICAgICBpbnQgc19yb2NrX29mZnNldDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfcm9jazsK ICAgICAgICB1bnNpZ25lZCBjaGFyIHNfam9saWV0X2xldmVsOwogICAgICAgIHVuc2lnbmVkIGNo YXIgc191dGY4OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19jcnVmdDsKCgogICAgICAgIHVuc2ln bmVkIGNoYXIgc191bmhpZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX25vc3VpZDsKICAgICAg ICB1bnNpZ25lZCBjaGFyIHNfbm9kZXY7CiAgICAgICAgbW9kZV90IHNfbW9kZTsKICAgICAgICBn aWRfdCBzX2dpZDsKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxl ICpzX25sc19pb2NoYXJzZXQ7Cn07CiMgNjY1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIiAx CgoKCgoKCnN0cnVjdCBuZnNfc2VydmVyIHsKICAgICAgICBzdHJ1Y3QgcnBjX2NsbnQgKiBjbGll bnQ7CiAgICAgICAgc3RydWN0IG5mc19ycGNfb3BzICogcnBjX29wczsKICAgICAgICBpbnQgZmxh Z3M7CiAgICAgICAgdW5zaWduZWQgaW50IHJzaXplOwogICAgICAgIHVuc2lnbmVkIGludCBycGFn ZXM7CiAgICAgICAgdW5zaWduZWQgaW50IHdzaXplOwogICAgICAgIHVuc2lnbmVkIGludCB3cGFn ZXM7CiAgICAgICAgdW5zaWduZWQgaW50IGR0c2l6ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgYnNp emU7CiAgICAgICAgdW5zaWduZWQgaW50IGFjcmVnbWluOwogICAgICAgIHVuc2lnbmVkIGludCBh Y3JlZ21heDsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNkaXJtaW47CiAgICAgICAgdW5zaWduZWQg aW50IGFjZGlybWF4OwogICAgICAgIHVuc2lnbmVkIGludCBuYW1lbGVuOwogICAgICAgIGNoYXIg KiBob3N0bmFtZTsKICAgICAgICBzdHJ1Y3QgbmZzX3JlcWxpc3QgKiByd19yZXF1ZXN0czsKfTsK CgoKCnN0cnVjdCBuZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgc19zZXJ2 ZXI7Cn07CiMgNjY2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N5c3ZfZnNfc2IuaCIgMQojIDEzICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3N5c3ZfZnNfc2IuaCIKc3RydWN0IHN5c3Zfc2JfaW5mbyB7 CiAgICAgICAgaW50IHNfdHlwZTsKICAgICAgICBjaGFyIHNfYnl0ZXNleDsKICAgICAgICBjaGFy IHNfa2x1ZGdlX3N5bWxpbmtzOwogICAgICAgIGNoYXIgc190cnVuY2F0ZTsKCiAgICAgICAgbmxp bmtfdCBzX2xpbmtfbWF4OwogICAgICAgIHVuc2lnbmVkIGludCBzX2lub2Rlc19wZXJfYmxvY2s7 CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9ja18xOwogICAgICAgIHVuc2ln bmVkIGludCBzX2lub2Rlc19wZXJfYmxvY2tfYml0czsKICAgICAgICB1bnNpZ25lZCBpbnQgc19p bmRfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGludCBzX2luZF9wZXJfYmxvY2tfYml0czsK ICAgICAgICB1bnNpZ25lZCBpbnQgc19pbmRfcGVyX2Jsb2NrXzI7CiAgICAgICAgdW5zaWduZWQg aW50IHNfdG9vYmlnX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGludCBzX2Jsb2NrX2Jhc2U7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgc19maWNfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBz X2ZsY19zaXplOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgxOwogICAgICAgIHN0 cnVjdCBidWZmZXJfaGVhZCAqc19iaDI7CgoKICAgICAgICBjaGFyICogc19zYmQxOwogICAgICAg IGNoYXIgKiBzX3NiZDI7CiAgICAgICAgdTE2ICpzX3NiX2ZpY19jb3VudDsKICAgICAgICB1MTYg KnNfc2JfZmljX2lub2RlczsKICAgICAgICB1MTYgKnNfc2JfdG90YWxfZnJlZV9pbm9kZXM7CiAg ICAgICAgdTE2ICpzX2JjYWNoZV9jb3VudDsKICAgICAgICB1MzIgKnNfYmNhY2hlOwogICAgICAg IHUzMiAqc19mcmVlX2Jsb2NrczsKICAgICAgICB1MzIgKnNfc2JfdGltZTsKICAgICAgICB1MzIg KnNfc2Jfc3RhdGU7CgoKICAgICAgICB1MzIgc19maXJzdGlub2Rlem9uZTsKICAgICAgICB1MzIg c19maXJzdGRhdGF6b25lOwogICAgICAgIHUzMiBzX25pbm9kZXM7CiAgICAgICAgdTMyIHNfbmRh dGF6b25lczsKICAgICAgICB1MzIgc19uem9uZXM7CiAgICAgICAgdTE2IHNfbmFtZWxlbjsKfTsK IyA2NjcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5oIgpzdHJ1Y3QgYWZmc19ibV9pbmZvIHsKICAgICAg ICB1MzIgYm1fa2V5OwogICAgICAgIHUzMiBibV9mcmVlOwp9OwoKc3RydWN0IGFmZnNfc2JfaW5m byB7CiAgICAgICAgaW50IHNfcGFydGl0aW9uX3NpemU7CiAgICAgICAgaW50IHNfcmVzZXJ2ZWQ7 CgogICAgICAgIHUzMiBzX2RhdGFfYmxrc2l6ZTsKICAgICAgICB1MzIgc19yb290X2Jsb2NrOwog ICAgICAgIGludCBzX2hhc2hzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mbGFnczsKICAg ICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1bW9kZV90IHNf bW9kZTsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfcm9vdF9iaDsKICAgICAgICBzdHJ1 Y3Qgc2VtYXBob3JlIHNfYm1sb2NrOwogICAgICAgIHN0cnVjdCBhZmZzX2JtX2luZm8gKnNfYml0 bWFwOwogICAgICAgIHUzMiBzX2JtYXBfY291bnQ7CiAgICAgICAgdTMyIHNfYm1hcF9iaXRzOwog ICAgICAgIHUzMiBzX2xhc3RfYm1hcDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYm1h cF9iaDsKICAgICAgICBjaGFyICpzX3ByZWZpeDsKICAgICAgICBpbnQgc19wcmVmaXhfbGVuOwog ICAgICAgIGNoYXIgc192b2x1bWVbMzJdOwp9OwojIDY2OCAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnNf c2IuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oIgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDEKIyAzMCAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAzMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91 ZnNfZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgiIDEK IyAzMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZS5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvdWZzX2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3N0YXQuaCIgMQojIDM0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIiAy CiMgMjQ4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIgpzdHJ1Y3QgdWZz X3RpbWV2YWwgewogICAgICAgIF9fczMyIHR2X3NlYzsKICAgICAgICBfX3MzMiB0dl91c2VjOwp9 OwoKc3RydWN0IHVmc19kaXJfZW50cnkgewogICAgICAgIF9fdTMyIGRfaW5vOwogICAgICAgIF9f dTE2IGRfcmVjbGVuOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIF9fdTE2IGRfbmFt bGVuOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191 OCBkX3R5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggZF9uYW1sZW47CiAgICAgICAg ICAgICAgICB9IGRfNDQ7CiAgICAgICAgfSBkX3U7CiAgICAgICAgX191OCBkX25hbWVbMjU1ICsg MV07Cn07CgpzdHJ1Y3QgdWZzX2NzdW0gewogICAgICAgIF9fdTMyIGNzX25kaXI7CiAgICAgICAg X191MzIgY3NfbmJmcmVlOwogICAgICAgIF9fdTMyIGNzX25pZnJlZTsKICAgICAgICBfX3UzMiBj c19uZmZyZWU7Cn07CgoKCgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrIHsKICAgICAgICBfX3UzMiBm c19saW5rOwogICAgICAgIF9fdTMyIGZzX3JsaW5rOwogICAgICAgIF9fdTMyIGZzX3NibGtubzsK ICAgICAgICBfX3UzMiBmc19jYmxrbm87CiAgICAgICAgX191MzIgZnNfaWJsa25vOwogICAgICAg IF9fdTMyIGZzX2RibGtubzsKICAgICAgICBfX3UzMiBmc19jZ29mZnNldDsKICAgICAgICBfX3Uz MiBmc19jZ21hc2s7CiAgICAgICAgX191MzIgZnNfdGltZTsKICAgICAgICBfX3UzMiBmc19zaXpl OwogICAgICAgIF9fdTMyIGZzX2RzaXplOwogICAgICAgIF9fdTMyIGZzX25jZzsKICAgICAgICBf X3UzMiBmc19ic2l6ZTsKICAgICAgICBfX3UzMiBmc19mc2l6ZTsKICAgICAgICBfX3UzMiBmc19m cmFnOwoKICAgICAgICBfX3UzMiBmc19taW5mcmVlOwogICAgICAgIF9fdTMyIGZzX3JvdGRlbGF5 OwogICAgICAgIF9fdTMyIGZzX3JwczsKCiAgICAgICAgX191MzIgZnNfYm1hc2s7CiAgICAgICAg X191MzIgZnNfZm1hc2s7CiAgICAgICAgX191MzIgZnNfYnNoaWZ0OwogICAgICAgIF9fdTMyIGZz X2ZzaGlmdDsKCiAgICAgICAgX191MzIgZnNfbWF4Y29udGlnOwogICAgICAgIF9fdTMyIGZzX21h eGJwZzsKCiAgICAgICAgX191MzIgZnNfZnJhZ3NoaWZ0OwogICAgICAgIF9fdTMyIGZzX2ZzYnRv ZGI7CiAgICAgICAgX191MzIgZnNfc2JzaXplOwogICAgICAgIF9fdTMyIGZzX2NzbWFzazsKICAg ICAgICBfX3UzMiBmc19jc3NoaWZ0OwogICAgICAgIF9fdTMyIGZzX25pbmRpcjsKICAgICAgICBf X3UzMiBmc19pbm9wYjsKICAgICAgICBfX3UzMiBmc19uc3BmOwoKICAgICAgICBfX3UzMiBmc19v cHRpbTsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MzIgZnNfbnBzZWN0OwogICAgICAgICAgICAgICAgfSBmc19zdW47 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBm c19zdGF0ZTsKICAgICAgICAgICAgICAgIH0gZnNfc3VueDg2OwogICAgICAgIH0gZnNfdTE7CiAg ICAgICAgX191MzIgZnNfaW50ZXJsZWF2ZTsKICAgICAgICBfX3UzMiBmc190cmFja3NrZXc7CgoK CgogICAgICAgIF9fdTMyIGZzX2lkWzJdOwoKICAgICAgICBfX3UzMiBmc19jc2FkZHI7CiAgICAg ICAgX191MzIgZnNfY3NzaXplOwogICAgICAgIF9fdTMyIGZzX2Nnc2l6ZTsKCiAgICAgICAgX191 MzIgZnNfbnRyYWs7CiAgICAgICAgX191MzIgZnNfbnNlY3Q7CiAgICAgICAgX191MzIgZnNfc3Bj OwoKICAgICAgICBfX3UzMiBmc19uY3lsOwoKICAgICAgICBfX3UzMiBmc19jcGc7CiAgICAgICAg X191MzIgZnNfaXBnOwogICAgICAgIF9fdTMyIGZzX2ZwZzsKCiAgICAgICAgc3RydWN0IHVmc19j c3VtIGZzX2NzdG90YWw7CgogICAgICAgIF9fczggZnNfZm1vZDsKICAgICAgICBfX3M4IGZzX2Ns ZWFuOwogICAgICAgIF9fczggZnNfcm9ubHk7CiAgICAgICAgX19zOCBmc19mbGFnczsKICAgICAg ICBfX3M4IGZzX2ZzbW50WzUxMl07CgogICAgICAgIF9fdTMyIGZzX2Nncm90b3I7CiAgICAgICAg X191MzIgZnNfY3NwWzMxXTsKICAgICAgICBfX3UzMiBmc19tYXhjbHVzdGVyOwogICAgICAgIF9f dTMyIGZzX2NwYzsKICAgICAgICBfX3UxNiBmc19vcG9zdGJsWzE2XVs4XTsKICAgICAgICB1bmlv biB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3Mz MiBmc19zcGFyZWNvbls1M107CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3JlY2xh aW07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uMlsxXTsKICAgICAg ICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAg IF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWZt YXNrWzJdOwogICAgICAgICAgICAgICAgfSBmc19zdW47CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbls1M107CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fczMyIGZzX3JlY2xhaW07CiAgICAgICAgICAgICAgICAgICAgICAg IF9fczMyIGZzX3NwYXJlY29uMlsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNf bnBzZWN0OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgIH0g ZnNfc3VueDg2OwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg ICAgX19zMzIgZnNfc3BhcmVjb25bNTBdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBm c19jb250aWdzdW1zaXplOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19tYXhzeW1s aW5rbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19pbm9kZWZtdDsKICAgICAg ICAgICAgICAgICAgICAgICAgX191MzIgZnNfbWF4ZmlsZXNpemVbMl07CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191 MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0ZTsK ICAgICAgICAgICAgICAgIH0gZnNfNDQ7CiAgICAgICAgfSBmc191MjsKICAgICAgICBfX3MzMiBm c19wb3N0Ymxmb3JtYXQ7CiAgICAgICAgX19zMzIgZnNfbnJwb3M7CiAgICAgICAgX19zMzIgZnNf cG9zdGJsb2ZmOwogICAgICAgIF9fczMyIGZzX3JvdGJsb2ZmOwogICAgICAgIF9fczMyIGZzX21h Z2ljOwogICAgICAgIF9fdTggZnNfc3BhY2VbMV07Cn07CiMgNDI1ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3Vmc19mcy5oIgpzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwIHsKICAgICAg ICBfX3UzMiBjZ19saW5rOwogICAgICAgIF9fdTMyIGNnX21hZ2ljOwogICAgICAgIF9fdTMyIGNn X3RpbWU7CiAgICAgICAgX191MzIgY2dfY2d4OwogICAgICAgIF9fdTE2IGNnX25jeWw7CiAgICAg ICAgX191MTYgY2dfbmlibGs7CiAgICAgICAgX191MzIgY2dfbmRibGs7CiAgICAgICAgc3RydWN0 IHVmc19jc3VtIGNnX2NzOwogICAgICAgIF9fdTMyIGNnX3JvdG9yOwogICAgICAgIF9fdTMyIGNn X2Zyb3RvcjsKICAgICAgICBfX3UzMiBjZ19pcm90b3I7CiAgICAgICAgX191MzIgY2dfZnJzdW1b KDgxOTIgLyAxMDI0KV07CiAgICAgICAgX191MzIgY2dfYnRvdG9mZjsKICAgICAgICBfX3UzMiBj Z19ib2ZmOwogICAgICAgIF9fdTMyIGNnX2l1c2Vkb2ZmOwogICAgICAgIF9fdTMyIGNnX2ZyZWVv ZmY7CiAgICAgICAgX191MzIgY2dfbmV4dGZyZWVvZmY7CiAgICAgICAgdW5pb24gewogICAgICAg ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfY2x1c3Rl cnN1bW9mZjsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfY2x1c3Rlcm9mZjsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfbmNsdXN0ZXJibGtzOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiBjZ19zcGFyZWNvblsxM107CiAgICAgICAgICAgICAgICB9IGNnXzQ0 OwogICAgICAgICAgICAgICAgX191MzIgY2dfc3BhcmVjb25bMTZdOwogICAgICAgIH0gY2dfdTsK ICAgICAgICBfX3U4IGNnX3NwYWNlWzFdOwoKfTsKCgoKCnN0cnVjdCB1ZnNfaW5vZGUgewogICAg ICAgIF9fdTE2IHVpX21vZGU7CiAgICAgICAgX191MTYgdWlfbmxpbms7CiAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYg dWlfc3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc2dpZDsKICAgICAgICAg ICAgICAgIH0gb2xkaWRzOwogICAgICAgICAgICAgICAgX191MzIgdWlfaW51bWJlcjsKICAgICAg ICAgICAgICAgIF9fdTMyIHVpX2F1dGhvcjsKICAgICAgICB9IHVpX3UxOwogICAgICAgIF9fdTY0 IHVpX3NpemU7CiAgICAgICAgc3RydWN0IHVmc190aW1ldmFsIHVpX2F0aW1lOwogICAgICAgIHN0 cnVjdCB1ZnNfdGltZXZhbCB1aV9tdGltZTsKICAgICAgICBzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlf Y3RpbWU7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MzIgdWlfZGJbMTJdOwogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiB1aV9pYlszXTsKICAgICAgICAgICAgICAgIH0gdWlfYWRkcjsKICAgICAgICAgICAgICAg IF9fdTggdWlfc3ltbGlua1s0KigxMiArMyldOwogICAgICAgIH0gdWlfdTI7CiAgICAgICAgX191 MzIgdWlfZmxhZ3M7CiAgICAgICAgX191MzIgdWlfYmxvY2tzOwogICAgICAgIF9fdTMyIHVpX2dl bjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiB1aV9zaGFkb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMy IHVpX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAg ICAgICAgICAgICAgICBfX3UzMiB1aV9vZWZ0ZmxhZzsKICAgICAgICAgICAgICAgIH0gdWlfc3Vu OwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg dWlfdWlkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9naWQ7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fczMyIHVpX3NwYXJlWzJdOwogICAgICAgICAgICAgICAgfSB1aV80NDsK ICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVp X3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3UxNiB1aV9tb2RlaDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYg dWlfc3BhcmU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3RyYW5zOwogICAgICAg ICAgICAgICAgfSB1aV9odXJkOwogICAgICAgIH0gdWlfdTM7Cn07CiMgNTI0ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIgpleHRlcm4gdm9pZCB1ZnNfZnJlZV9mcmFnbWVu dHMgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCB1ZnNf ZnJlZV9ibG9ja3MgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4g dW5zaWduZWQgdWZzX25ld19mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1MzIgKiwgdW5zaWdu ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50ICopOwoKCmV4dGVybiBzdHJ1Y3QgdWZzX2NnX3By aXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5z aWduZWQpOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KiwgdW5zaWduZWQpOwoKCmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZGlyX2lu b2RlX29wZXJhdGlvbnM7CmV4dGVybiBpbnQgdWZzX2NoZWNrX2Rpcl9lbnRyeSAoY29uc3QgY2hh ciAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZl cl9oZWFkICosIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gaW50IHVmc19hZGRfbGluayAoc3RydWN0 IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbm9fdCB1ZnNfaW5vZGVfYnlfbmFt ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB1ZnNfbWFrZV9l bXB0eShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IHVmc19k aXJfZW50cnkgKiB1ZnNfZmluZF9lbnRyeSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgYnVmZmVy X2hlYWQgKiopOwpleHRlcm4gaW50IHVmc19kZWxldGVfZW50cnkgKHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CmV4dGVybiBpbnQg dWZzX2VtcHR5X2RpciAoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IHVmc19kaXJfZW50 cnkgKiB1ZnNfZG90ZG90IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsK ZXh0ZXJuIHZvaWQgdWZzX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rpcl9l bnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGlub2RlICopOwoKCmV4dGVybiBz dHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4g c3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9vcGVyYXRpb25zOwoKZXh0ZXJuIHN0cnVj dCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWZzX2FvcHM7CgoKZXh0ZXJuIHZvaWQgdWZzX2Zy ZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlICogdWZz X25ld19pbm9kZSAoY29uc3Qgc3RydWN0IGlub2RlICosIGludCk7CgoKZXh0ZXJuIGludCB1ZnNf ZnJhZ19tYXAgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gdm9pZCB1ZnNfcmVhZF9pbm9k ZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2lub2RlIChzdHJ1Y3QgaW5v ZGUgKik7CmV4dGVybiB2b2lkIHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIGludCk7 CmV4dGVybiBpbnQgdWZzX3N5bmNfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQg dWZzX2RlbGV0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9o ZWFkICogdWZzX2dldGZyYWcgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgaW50LCBpbnQgKik7 CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB1ZnNfYnJlYWQgKHN0cnVjdCBpbm9kZSAqLCB1 bnNpZ25lZCwgaW50LCBpbnQgKik7CgoKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZz X2Rpcl9vcGVyYXRpb25zOwoKCmV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB1ZnNfZnNf dHlwZTsKZXh0ZXJuIHZvaWQgdWZzX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmlu dGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVmc19lcnJvciAoc3RydWN0IHN1cGVyX2Jsb2NrICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQg KHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZzX3BhbmljIChzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZv cm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVfc3VwZXIgKHN0cnVj dCBzdXBlcl9ibG9jayAqKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Zh c3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwoKCmV4dGVybiB2b2lkIHVmc190cnVuY2F0ZSAo c3RydWN0IGlub2RlICopOwojIDE4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19m c19zYi5oIiAyCgoKCgoKc3RydWN0IHVmc19idWZmZXJfaGVhZCB7CiAgICAgICAgdW5zaWduZWQg ZnJhZ21lbnQ7CiAgICAgICAgdW5zaWduZWQgY291bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9o ZWFkICogYmhbKDgxOTIgLyAxMDI0KV07Cn07CgpzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyB7 CiAgICAgICAgc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCB1Y2c7CiAgICAgICAgX191MzIgY19j Z3g7CiAgICAgICAgX191MTYgY19uY3lsOwogICAgICAgIF9fdTE2IGNfbmlibGs7CiAgICAgICAg X191MzIgY19uZGJsazsKICAgICAgICBfX3UzMiBjX3JvdG9yOwogICAgICAgIF9fdTMyIGNfZnJv dG9yOwogICAgICAgIF9fdTMyIGNfaXJvdG9yOwogICAgICAgIF9fdTMyIGNfYnRvdG9mZjsKICAg ICAgICBfX3UzMiBjX2JvZmY7CiAgICAgICAgX191MzIgY19pdXNlZG9mZjsKICAgICAgICBfX3Uz MiBjX2ZyZWVvZmY7CiAgICAgICAgX191MzIgY19uZXh0ZnJlZW9mZjsKICAgICAgICBfX3UzMiBj X2NsdXN0ZXJzdW1vZmY7CiAgICAgICAgX191MzIgY19jbHVzdGVyb2ZmOwogICAgICAgIF9fdTMy IGNfbmNsdXN0ZXJibGtzOwp9OwoKc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gewogICAgICAg IHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgc191Ymg7CiAgICAgICAgX191MzIgc19zYmxrbm87CiAg ICAgICAgX191MzIgc19jYmxrbm87CiAgICAgICAgX191MzIgc19pYmxrbm87CiAgICAgICAgX191 MzIgc19kYmxrbm87CiAgICAgICAgX191MzIgc19jZ29mZnNldDsKICAgICAgICBfX3UzMiBzX2Nn bWFzazsKICAgICAgICBfX3UzMiBzX3NpemU7CiAgICAgICAgX191MzIgc19kc2l6ZTsKICAgICAg ICBfX3UzMiBzX25jZzsKICAgICAgICBfX3UzMiBzX2JzaXplOwogICAgICAgIF9fdTMyIHNfZnNp emU7CiAgICAgICAgX191MzIgc19mcGI7CiAgICAgICAgX191MzIgc19taW5mcmVlOwogICAgICAg IF9fdTMyIHNfYm1hc2s7CiAgICAgICAgX191MzIgc19mbWFzazsKICAgICAgICBfX3UzMiBzX2Jz aGlmdDsKICAgICAgICBfX3UzMiBzX2ZzaGlmdDsKICAgICAgICBfX3UzMiBzX2ZwYnNoaWZ0Owog ICAgICAgIF9fdTMyIHNfZnNidG9kYjsKICAgICAgICBfX3UzMiBzX3Nic2l6ZTsKICAgICAgICBf X3UzMiBzX2NzbWFzazsKICAgICAgICBfX3UzMiBzX2Nzc2hpZnQ7CiAgICAgICAgX191MzIgc19u aW5kaXI7CiAgICAgICAgX191MzIgc19pbm9wYjsKICAgICAgICBfX3UzMiBzX25zcGY7CiAgICAg ICAgX191MzIgc19ucHNlY3Q7CiAgICAgICAgX191MzIgc19pbnRlcmxlYXZlOwogICAgICAgIF9f dTMyIHNfdHJhY2tza2V3OwogICAgICAgIF9fdTMyIHNfY3NhZGRyOwogICAgICAgIF9fdTMyIHNf Y3NzaXplOwogICAgICAgIF9fdTMyIHNfY2dzaXplOwogICAgICAgIF9fdTMyIHNfbnRyYWs7CiAg ICAgICAgX191MzIgc19uc2VjdDsKICAgICAgICBfX3UzMiBzX3NwYzsKICAgICAgICBfX3UzMiBz X2lwZzsKICAgICAgICBfX3UzMiBzX2ZwZzsKICAgICAgICBfX3UzMiBzX2NwYzsKICAgICAgICBf X3MzMiBzX2NvbnRpZ3N1bXNpemU7CiAgICAgICAgX19zNjQgc19xYm1hc2s7CiAgICAgICAgX19z NjQgc19xZm1hc2s7CiAgICAgICAgX19zMzIgc19wb3N0Ymxmb3JtYXQ7CiAgICAgICAgX19zMzIg c19ucnBvczsKICAgICAgICBfX3MzMiBzX3Bvc3RibG9mZjsKICAgICAgICBfX3MzMiBzX3JvdGJs b2ZmOwoKICAgICAgICBfX3UzMiBzX2ZwYm1hc2s7CiAgICAgICAgX191MzIgc19hcGI7CiAgICAg ICAgX191MzIgc18yYXBiOwogICAgICAgIF9fdTMyIHNfM2FwYjsKICAgICAgICBfX3UzMiBzX2Fw Ym1hc2s7CiAgICAgICAgX191MzIgc19hcGJzaGlmdDsKICAgICAgICBfX3UzMiBzXzJhcGJzaGlm dDsKICAgICAgICBfX3UzMiBzXzNhcGJzaGlmdDsKICAgICAgICBfX3UzMiBzX25zcGZzaGlmdDsK ICAgICAgICBfX3UzMiBzX25zcGI7CiAgICAgICAgX191MzIgc19pbm9wZjsKICAgICAgICBfX3Uz MiBzX3NiYmFzZTsKICAgICAgICBfX3UzMiBzX2JwZjsKICAgICAgICBfX3UzMiBzX2JwZnNoaWZ0 OwogICAgICAgIF9fdTMyIHNfYnBmbWFzazsKCiAgICAgICAgX191MzIgc19tYXhzeW1saW5rbGVu Owp9OwoKCgoKCnN0cnVjdCB1ZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IHVmc19zYl9wcml2 YXRlX2luZm8gKiBzX3VzcGk7CiAgICAgICAgc3RydWN0IHVmc19jc3VtICogc19jc3BbMzFdOwog ICAgICAgIHVuc2lnbmVkIHNfc3dhYjsKICAgICAgICB1bnNpZ25lZCBzX2ZsYWdzOwogICAgICAg IHN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX3VjZzsKICAgICAgICBzdHJ1Y3QgdWZzX2NnX3ByaXZh dGVfaW5mbyAqIHNfdWNwaVs4XTsKICAgICAgICB1bnNpZ25lZCBzX2Nnbm9bOF07CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc19jZ19sb2FkZWQ7CiAgICAgICAgdW5zaWduZWQgc19tb3VudF9vcHQ7 Cn07CgoKCgoKCgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX2ZpcnN0IHsKICAgICAgICBfX3UzMiBm c19saW5rOwogICAgICAgIF9fdTMyIGZzX3JsaW5rOwogICAgICAgIF9fdTMyIGZzX3NibGtubzsK ICAgICAgICBfX3UzMiBmc19jYmxrbm87CiAgICAgICAgX191MzIgZnNfaWJsa25vOwogICAgICAg IF9fdTMyIGZzX2RibGtubzsKICAgICAgICBfX3UzMiBmc19jZ29mZnNldDsKICAgICAgICBfX3Uz MiBmc19jZ21hc2s7CiAgICAgICAgX191MzIgZnNfdGltZTsKICAgICAgICBfX3UzMiBmc19zaXpl OwogICAgICAgIF9fdTMyIGZzX2RzaXplOwogICAgICAgIF9fdTMyIGZzX25jZzsKICAgICAgICBf X3UzMiBmc19ic2l6ZTsKICAgICAgICBfX3UzMiBmc19mc2l6ZTsKICAgICAgICBfX3UzMiBmc19m cmFnOwogICAgICAgIF9fdTMyIGZzX21pbmZyZWU7CiAgICAgICAgX191MzIgZnNfcm90ZGVsYXk7 CiAgICAgICAgX191MzIgZnNfcnBzOwogICAgICAgIF9fdTMyIGZzX2JtYXNrOwogICAgICAgIF9f dTMyIGZzX2ZtYXNrOwogICAgICAgIF9fdTMyIGZzX2JzaGlmdDsKICAgICAgICBfX3UzMiBmc19m c2hpZnQ7CiAgICAgICAgX191MzIgZnNfbWF4Y29udGlnOwogICAgICAgIF9fdTMyIGZzX21heGJw ZzsKICAgICAgICBfX3UzMiBmc19mcmFnc2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNidG9kYjsK ICAgICAgICBfX3UzMiBmc19zYnNpemU7CiAgICAgICAgX191MzIgZnNfY3NtYXNrOwogICAgICAg IF9fdTMyIGZzX2Nzc2hpZnQ7CiAgICAgICAgX191MzIgZnNfbmluZGlyOwogICAgICAgIF9fdTMy IGZzX2lub3BiOwogICAgICAgIF9fdTMyIGZzX25zcGY7CiAgICAgICAgX191MzIgZnNfb3B0aW07 CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg ICAgICAgICAgX191MzIgZnNfbnBzZWN0OwogICAgICAgICAgICAgICAgfSBmc19zdW47CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0 ZTsKICAgICAgICAgICAgICAgIH0gZnNfc3VueDg2OwogICAgICAgIH0gZnNfdTE7CiAgICAgICAg X191MzIgZnNfaW50ZXJsZWF2ZTsKICAgICAgICBfX3UzMiBmc190cmFja3NrZXc7CiAgICAgICAg X191MzIgZnNfaWRbMl07CiAgICAgICAgX191MzIgZnNfY3NhZGRyOwogICAgICAgIF9fdTMyIGZz X2Nzc2l6ZTsKICAgICAgICBfX3UzMiBmc19jZ3NpemU7CiAgICAgICAgX191MzIgZnNfbnRyYWs7 CiAgICAgICAgX191MzIgZnNfbnNlY3Q7CiAgICAgICAgX191MzIgZnNfc3BjOwogICAgICAgIF9f dTMyIGZzX25jeWw7CiAgICAgICAgX191MzIgZnNfY3BnOwogICAgICAgIF9fdTMyIGZzX2lwZzsK ICAgICAgICBfX3UzMiBmc19mcGc7CiAgICAgICAgc3RydWN0IHVmc19jc3VtIGZzX2NzdG90YWw7 CiAgICAgICAgX19zOCBmc19mbW9kOwogICAgICAgIF9fczggZnNfY2xlYW47CiAgICAgICAgX19z OCBmc19yb25seTsKICAgICAgICBfX3M4IGZzX2ZsYWdzOwogICAgICAgIF9fczggZnNfZnNtbnRb NTEyIC0gMjEyXTsKCn07CgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX3NlY29uZCB7CiAgICAgICAg X19zOCBmc19mc21udFsyMTJdOwogICAgICAgIF9fdTMyIGZzX2Nncm90b3I7CiAgICAgICAgX191 MzIgZnNfY3NwWzMxXTsKICAgICAgICBfX3UzMiBmc19tYXhjbHVzdGVyOwogICAgICAgIF9fdTMy IGZzX2NwYzsKICAgICAgICBfX3UxNiBmc19vcG9zdGJsWzgyXTsKfTsKCnN0cnVjdCB1ZnNfc3Vw ZXJfYmxvY2tfdGhpcmQgewogICAgICAgIF9fdTE2IGZzX29wb3N0YmxbNDZdOwogICAgICAgIHVu aW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f czMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVj bGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0ZTsKICAgICAgICAgICAgICAgICAgICAg ICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19x Zm1hc2tbMl07CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAg ICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAgICAgICAg ICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBm c19ucHNlY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAg fSBmc19zdW54ODY7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAg ICAgICBfX3MzMiBmc19zcGFyZWNvbls1MF07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMy IGZzX2NvbnRpZ3N1bXNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX21heHN5 bWxpbmtsZW47CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX2lub2RlZm10OwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19tYXhmaWxlc2l6ZVsyXTsKICAgICAgICAgICAg ICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRl OwogICAgICAgICAgICAgICAgfSBmc180NDsKICAgICAgICB9IGZzX3UyOwogICAgICAgIF9fczMy IGZzX3Bvc3RibGZvcm1hdDsKICAgICAgICBfX3MzMiBmc19ucnBvczsKICAgICAgICBfX3MzMiBm c19wb3N0YmxvZmY7CiAgICAgICAgX19zMzIgZnNfcm90YmxvZmY7CiAgICAgICAgX19zMzIgZnNf bWFnaWM7CiAgICAgICAgX191OCBmc19zcGFjZVsxXTsKfTsKIyA2NjkgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv ZWZzX2ZzX3NiLmgiIDEKIyAyNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9lZnNfZnNf c2IuaCIKc3RydWN0IGVmc19zdXBlciB7CiAgICAgICAgaW50MzJfdCBmc19zaXplOwogICAgICAg IGludDMyX3QgZnNfZmlyc3RjZzsKICAgICAgICBpbnQzMl90IGZzX2NnZnNpemU7CiAgICAgICAg c2hvcnQgZnNfY2dpc2l6ZTsKICAgICAgICBzaG9ydCBmc19zZWN0b3JzOwogICAgICAgIHNob3J0 IGZzX2hlYWRzOwogICAgICAgIHNob3J0IGZzX25jZzsKICAgICAgICBzaG9ydCBmc19kaXJ0eTsK ICAgICAgICBpbnQzMl90IGZzX3RpbWU7CiAgICAgICAgaW50MzJfdCBmc19tYWdpYzsKICAgICAg ICBjaGFyIGZzX2ZuYW1lWzZdOwogICAgICAgIGNoYXIgZnNfZnBhY2tbNl07CiAgICAgICAgaW50 MzJfdCBmc19ibXNpemU7CiAgICAgICAgaW50MzJfdCBmc190ZnJlZTsKICAgICAgICBpbnQzMl90 IGZzX3Rpbm9kZTsKICAgICAgICBpbnQzMl90IGZzX2JtYmxvY2s7CiAgICAgICAgaW50MzJfdCBm c19yZXBsc2I7CiAgICAgICAgaW50MzJfdCBmc19sYXN0aWFsbG9jOwogICAgICAgIGNoYXIgZnNf c3BhcmVbMjBdOwogICAgICAgIGludDMyX3QgZnNfY2hlY2tzdW07Cn07CgoKc3RydWN0IGVmc19z Yl9pbmZvIHsKICAgICAgICBpbnQzMl90IGZzX21hZ2ljOwogICAgICAgIGludDMyX3QgZnNfc3Rh cnQ7CiAgICAgICAgaW50MzJfdCBmaXJzdF9ibG9jazsKICAgICAgICBpbnQzMl90IHRvdGFsX2Js b2NrczsKICAgICAgICBpbnQzMl90IGdyb3VwX3NpemU7CiAgICAgICAgaW50MzJfdCBkYXRhX2Zy ZWU7CiAgICAgICAgaW50MzJfdCBpbm9kZV9mcmVlOwogICAgICAgIHNob3J0IGlub2RlX2Jsb2Nr czsKICAgICAgICBzaG9ydCB0b3RhbF9ncm91cHM7Cn07CiMgNjcwICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Jv bWZzX2ZzX3NiLmgiIDEKCgoKCgpzdHJ1Y3Qgcm9tZnNfc2JfaW5mbyB7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzX21heHNpemU7Cn07CiMgNjcxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAx CiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3NtYi5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21iLmgi CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTMgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21iLmgiIDIKCmVudW0gc21iX3Byb3RvY29sIHsKICAg ICAgICBTTUJfUFJPVE9DT0xfTk9ORSwKICAgICAgICBTTUJfUFJPVE9DT0xfQ09SRSwKICAgICAg ICBTTUJfUFJPVE9DT0xfQ09SRVBMVVMsCiAgICAgICAgU01CX1BST1RPQ09MX0xBTk1BTjEsCiAg ICAgICAgU01CX1BST1RPQ09MX0xBTk1BTjIsCiAgICAgICAgU01CX1BST1RPQ09MX05UMQp9OwoK ZW51bSBzbWJfY2FzZV9obmRsIHsKICAgICAgICBTTUJfQ0FTRV9ERUZBVUxULAogICAgICAgIFNN Ql9DQVNFX0xPV0VSLAogICAgICAgIFNNQl9DQVNFX1VQUEVSCn07CgpzdHJ1Y3Qgc21iX2Rza2F0 dHIgewogICAgICAgIF9fdTE2IHRvdGFsOwogICAgICAgIF9fdTE2IGFsbG9jYmxvY2tzOwogICAg ICAgIF9fdTE2IGJsb2Nrc2l6ZTsKICAgICAgICBfX3UxNiBmcmVlOwp9OwoKc3RydWN0IHNtYl9j b25uX29wdCB7CgoKICAgICAgICB1bnNpZ25lZCBpbnQgZmQ7CgogICAgICAgIGVudW0gc21iX3By b3RvY29sIHByb3RvY29sOwogICAgICAgIGVudW0gc21iX2Nhc2VfaG5kbCBjYXNlX2hhbmRsaW5n OwoKCgogICAgICAgIF9fdTMyIG1heF94bWl0OwogICAgICAgIF9fdTE2IHNlcnZlcl91aWQ7CiAg ICAgICAgX191MTYgdGlkOwoKCiAgICAgICAgX191MTYgc2VjbW9kZTsKICAgICAgICBfX3UxNiBt YXhtdXg7CiAgICAgICAgX191MTYgbWF4dmNzOwogICAgICAgIF9fdTE2IHJhd21vZGU7CiAgICAg ICAgX191MzIgc2Vzc2tleTsKCgogICAgICAgIF9fdTMyIG1heHJhdzsKICAgICAgICBfX3UzMiBj YXBhYmlsaXRpZXM7CiAgICAgICAgX19zMTYgc2VydmVyem9uZTsKfTsKCgoKCnN0cnVjdCBzbWJf bmxzX2NvZGVwYWdlIHsKICAgICAgICBjaGFyIGxvY2FsX25hbWVbMjBdOwogICAgICAgIGNoYXIg cmVtb3RlX25hbWVbMjBdOwp9OwojIDc4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Nt Yi5oIgpzdHJ1Y3Qgc21iX2ZhdHRyIHsKCiAgICAgICAgX191MTYgYXR0cjsKCiAgICAgICAgdW5z aWduZWQgbG9uZyBmX2lubzsKICAgICAgICB1bW9kZV90IGZfbW9kZTsKICAgICAgICBubGlua190 IGZfbmxpbms7CiAgICAgICAgdWlkX3QgZl91aWQ7CiAgICAgICAgZ2lkX3QgZl9naWQ7CiAgICAg ICAga2Rldl90IGZfcmRldjsKICAgICAgICBvZmZfdCBmX3NpemU7CiAgICAgICAgdGltZV90IGZf YXRpbWU7CiAgICAgICAgdGltZV90IGZfbXRpbWU7CiAgICAgICAgdGltZV90IGZfY3RpbWU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBmX2Jsa3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmX2Js b2NrczsKfTsKCmVudW0gc21iX2Nvbm5fc3RhdGUgewogICAgICAgIENPTk5fVkFMSUQsCiAgICAg ICAgQ09OTl9JTlZBTElELAoKICAgICAgICBDT05OX1JFVFJJRUQsCiAgICAgICAgQ09OTl9SRVRS WUlORwp9OwojIDE2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAy CgoKCgoKCgpzdHJ1Y3Qgc21iX3NiX2luZm8gewogICAgICAgIGVudW0gc21iX2Nvbm5fc3RhdGUg c3RhdGU7CiAgICAgICAgc3RydWN0IGZpbGUgKiBzb2NrX2ZpbGU7CgogICAgICAgIHN0cnVjdCBz bWJfbW91bnRfZGF0YV9rZXJuZWwgKm1udDsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0ZW1wX2J1 ZjsKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IGdlbmVyYXRpb247CiAgICAgICAgcGlkX3QgY29u bl9waWQ7CiAgICAgICAgc3RydWN0IHNtYl9jb25uX29wdCBvcHQ7CgogICAgICAgIHN0cnVjdCBz ZW1hcGhvcmUgc2VtOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgogICAgICAgIF9f dTMyIHBhY2tldF9zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKiBwYWNrZXQ7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgcmNsczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcnI7CgoKICAgICAg ICB2b2lkICpkYXRhX3JlYWR5OwoKCiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqcmVtb3RlX25s czsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpsb2NhbF9ubHM7CgoKCgogICAgICAgIGNoYXIg Km5hbWVfYnVmOwoKICAgICAgICBpbnQgKCpjb252ZXJ0KShjaGFyICosIGludCwgY29uc3QgY2hh ciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5sc190YWJsZSAqLCBzdHJ1 Y3QgbmxzX3RhYmxlICopOwp9OwoKCnN0YXRpYyBpbmxpbmUgdm9pZApzbWJfbG9ja19zZXJ2ZXIo c3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIpCnsKICAgICAgICBkb3duKCYoc2VydmVyLT5zZW0p KTsKfQoKc3RhdGljIGlubGluZSB2b2lkCnNtYl91bmxvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2Jf aW5mbyAqc2VydmVyKQp7CiAgICAgICAgdXAoJihzZXJ2ZXItPnNlbSkpOwp9CiMgNjcyICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2hmc19mc19zYi5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvaGZzX2ZzX3NiLmgiCnN0cnVjdCBoZnNfbmFtZTsKCnR5cGVkZWYgaW50ICgqaGZzX25hbWVp bl9mbikgKGNoYXIgKiwgY29uc3Qgc3RydWN0IGhmc19uYW1lICopOwp0eXBlZGVmIHZvaWQgKCpo ZnNfbmFtZW91dF9mbikgKHN0cnVjdCBoZnNfbmFtZSAqLCBjb25zdCBjaGFyICosIGludCk7CnR5 cGVkZWYgdm9pZCAoKmhmc19pZmlsbF9mbikgKHN0cnVjdCBpbm9kZSAqLCBpbm9fdCwgY29uc3Qg aW50KTsKCgoKCgoKc3RydWN0IGhmc19zYl9pbmZvIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAg ICAgc3RydWN0IGhmc19tZGIgKnNfbWRiOwogICAgICAgIGludCBzX3F1aWV0OwoKICAgICAgICBp bnQgc19sb3dlcmNhc2U7CiAgICAgICAgaW50IHNfYWZwZDsKICAgICAgICBpbnQgc192ZXJzaW9u OwogICAgICAgIGhmc19uYW1laW5fZm4gc19uYW1laW47CgoKICAgICAgICBoZnNfbmFtZW91dF9m biBzX25hbWVvdXQ7CgoKICAgICAgICBoZnNfaWZpbGxfZm4gc19pZmlsbDsKCiAgICAgICAgY29u c3Qgc3RydWN0IGhmc19uYW1lICpzX3Jlc2VydmVkMTsKICAgICAgICBjb25zdCBzdHJ1Y3QgaGZz X25hbWUgKnNfcmVzZXJ2ZWQyOwogICAgICAgIF9fdTMyIHNfdHlwZTsKICAgICAgICBfX3UzMiBz X2NyZWF0b3I7CiAgICAgICAgdW1vZGVfdCBzX3VtYXNrOwoKICAgICAgICB1aWRfdCBzX3VpZDsK ICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICBjaGFyIHNfY29udjsKfTsKIyA2NzMgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvYWRmc19mc19zYi5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvYWRmc19mc19zYi5oIgpzdHJ1Y3QgYWRmc19kaXNjbWFwOwpzdHJ1Y3QgYWRmc19kaXJfb3Bz OwoKCgoKc3RydWN0IGFkZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IGFkZnNfZGlzY21hcCAq c19tYXA7CiAgICAgICAgc3RydWN0IGFkZnNfZGlyX29wcyAqc19kaXI7CgogICAgICAgIHVpZF90 IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAgIHVtb2RlX3Qgc19vd25lcl9tYXNr OwogICAgICAgIHVtb2RlX3Qgc19vdGhlcl9tYXNrOwoKICAgICAgICBfX3UzMiBzX2lkc19wZXJf em9uZTsKICAgICAgICBfX3UzMiBzX2lkbGVuOwogICAgICAgIF9fdTMyIHNfbWFwX3NpemU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX3NpemU7CiAgICAgICAgc2lnbmVkIGludCBzX21hcDJibGs7 CiAgICAgICAgdW5zaWduZWQgaW50IHNfbG9nMnNoYXJlc2l6ZTsKICAgICAgICB1bnNpZ25lZCBp bnQgc192ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGludCBzX25hbWVsZW47Cn07CiMgNjc0ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3FueDRfZnNfc2IuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3FueDRfZnNfc2IuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Fu eDRfZnMuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIK IyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3FueHR5cGVzLmgiIDEKIyAxNCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiIDIKIyA0NSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiCnN0cnVjdCBxbng0X2lub2RlX2VudHJ5IHsKICAg ICAgICBjaGFyIGRpX2ZuYW1lWzE2XTsKICAgICAgICBxbng0X29mZl90IGRpX3NpemU7CiAgICAg ICAgcW54NF94dG50X3QgZGlfZmlyc3RfeHRudDsKICAgICAgICBfX3UzMiBkaV94YmxrOwogICAg ICAgIF9fczMyIGRpX2Z0aW1lOwogICAgICAgIF9fczMyIGRpX210aW1lOwogICAgICAgIF9fczMy IGRpX2F0aW1lOwogICAgICAgIF9fczMyIGRpX2N0aW1lOwogICAgICAgIHFueDRfbnh0bnRfdCBk aV9udW1feHRudHM7CiAgICAgICAgcW54NF9tb2RlX3QgZGlfbW9kZTsKICAgICAgICBxbng0X211 aWRfdCBkaV91aWQ7CiAgICAgICAgcW54NF9tZ2lkX3QgZGlfZ2lkOwogICAgICAgIHFueDRfbmxp bmtfdCBkaV9ubGluazsKICAgICAgICBfX3U4IGRpX3plcm9bNF07CiAgICAgICAgcW54NF9mdHlw ZV90IGRpX3R5cGU7CiAgICAgICAgX191OCBkaV9zdGF0dXM7Cn07CgpzdHJ1Y3QgcW54NF9saW5r X2luZm8gewogICAgICAgIGNoYXIgZGxfZm5hbWVbNDhdOwogICAgICAgIF9fdTMyIGRsX2lub2Rl X2JsazsKICAgICAgICBfX3U4IGRsX2lub2RlX25keDsKICAgICAgICBfX3U4IGRsX3NwYXJlWzEw XTsKICAgICAgICBfX3U4IGRsX3N0YXR1czsKfTsKCnN0cnVjdCBxbng0X3hibGsgewogICAgICAg IF9fdTMyIHhibGtfbmV4dF94YmxrOwogICAgICAgIF9fdTMyIHhibGtfcHJldl94YmxrOwogICAg ICAgIF9fdTggeGJsa19udW1feHRudHM7CiAgICAgICAgX191OCB4YmxrX3NwYXJlWzNdOwogICAg ICAgIF9fczMyIHhibGtfbnVtX2Jsb2NrczsKICAgICAgICBxbng0X3h0bnRfdCB4YmxrX3h0bnRz WzYwXTsKICAgICAgICBjaGFyIHhibGtfc2lnbmF0dXJlWzhdOwogICAgICAgIHFueDRfeHRudF90 IHhibGtfZmlyc3RfeHRudDsKfTsKCnN0cnVjdCBxbng0X3N1cGVyX2Jsb2NrIHsKICAgICAgICBz dHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBSb290RGlyOwogICAgICAgIHN0cnVjdCBxbng0X2lub2Rl X2VudHJ5IElub2RlOwogICAgICAgIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5IEJvb3Q7CiAgICAg ICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgQWx0Qm9vdDsKfTsKIyAxMDAgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvcW54NF9mcy5oIgpleHRlcm4gc3RydWN0IGRlbnRyeSAqcW54NF9s b29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiB1 bnNpZ25lZCBsb25nIHFueDRfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpz Yik7CmV4dGVybiB1bnNpZ25lZCBsb25nIHFueDRfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIGxvbmcgaWJsb2NrKTsKCmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfZ2V0Ymxr KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFu eDRfYnJlYWQoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKCmV4dGVybiBpbnQgcW54NF9jcmVh dGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpl eHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9maWxlX2lub2RlX29wZXJhdGlvbnM7 CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBxbng0X2Rpcl9pbm9kZV9vcGVyYXRpb25z OwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfb3BlcmF0aW9uczsKZXh0 ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcW54NF9kaXJfb3BlcmF0aW9uczsKZXh0ZXJuIGlu dCBxbng0X2lzX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9uZyBibG9jayk7CmV4dGVy biBpbnQgcW54NF9zZXRfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ss IGludCBidXN5KTsKZXh0ZXJuIGludCBxbng0X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKZXh0ZXJuIHZvaWQgcW54NF90cnVuY2F0 ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHZvaWQgcW54NF9mcmVlX2lub2RlKHN0cnVj dCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gaW50IHFueDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGly LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpleHRlcm4gaW50IHFueDRfcm1kaXIoc3RydWN0IGlu b2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiBpbnQgcW54NF9zeW5jX2Zp bGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50KTsKZXh0ZXJu IGludCBxbng0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54 NF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBpYmxvY2ssIHN0cnVjdCBidWZm ZXJfaGVhZCAqYmgsIGludCBjcmVhdGUpOwojIDE1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3FueDRfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCBxbng0X3NiX2luZm8gewogICAgICAgIHN0 cnVjdCBidWZmZXJfaGVhZCAqc2JfYnVmOwogICAgICAgIHN0cnVjdCBxbng0X3N1cGVyX2Jsb2Nr ICpzYjsKICAgICAgICB1bnNpZ25lZCBpbnQgVmVyc2lvbjsKICAgICAgICBzdHJ1Y3QgcW54NF9p bm9kZV9lbnRyeSAqQml0TWFwOwp9OwojIDY3NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19z Yi5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVlLmgi IDEKIyAxNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90cXVldWUuaCIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC90cXVldWUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvbGlzdC5oIiAxCiMgMTggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVl LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIgMQojIDE5ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC90cXVldWUuaCIgMgojIDM4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RxdWV1 ZS5oIgpzdHJ1Y3QgdHFfc3RydWN0IHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzeW5jOwogICAgICAgIHZvaWQgKCpyb3V0aW5lKSh2b2lkICop OwogICAgICAgIHZvaWQgKmRhdGE7Cn07CiMgNjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdHF1ZXVlLmgiCnR5cGVkZWYgc3RydWN0IGxpc3RfaGVhZCB0YXNrX3F1ZXVlOwoKCgoKZXh0 ZXJuIHRhc2tfcXVldWUgdHFfdGltZXIsIHRxX2ltbWVkaWF0ZSwgdHFfZGlzazsKIyA5NCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90cXVldWUuaCIKZXh0ZXJuIHNwaW5sb2NrX3QgdHF1 ZXVlX2xvY2s7CgoKCgoKc3RhdGljIGlubGluZSBpbnQgcXVldWVfdGFzayhzdHJ1Y3QgdHFfc3Ry dWN0ICpiaF9wb2ludGVyLCB0YXNrX3F1ZXVlICpiaF9saXN0KQp7CiAgICAgICAgaW50IHJldCA9 IDA7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsJmJoX3BvaW50ZXItPnN5bmMpKSB7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICAgICAgICAgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxh Z3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRxdWV1ZV9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAg ICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZiaF9wb2ludGVyLT5saXN0LCBiaF9saXN0KTsKICAg ICAgICAgICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi cHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUg KDApOwogICAgICAgICAgICAgICAgcmV0ID0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJl dDsKfQoKCgoKCmV4dGVybiB2b2lkIF9fcnVuX3Rhc2tfcXVldWUodGFza19xdWV1ZSAqbGlzdCk7 CgpzdGF0aWMgaW5saW5lIHZvaWQgcnVuX3Rhc2tfcXVldWUodGFza19xdWV1ZSAqbGlzdCkKewog ICAgICAgIGlmICgoIWxpc3RfZW1wdHkoJipsaXN0KSkpCiAgICAgICAgICAgICAgICBfX3J1bl90 YXNrX3F1ZXVlKGxpc3QpOwp9CiMgOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yZWlz ZXJmc19mc19zYi5oIiAyCiMgMjYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2Vy ZnNfZnNfc2IuaCIKc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrCnsKICBfX3UzMiBzX2Jsb2Nr X2NvdW50OwogIF9fdTMyIHNfZnJlZV9ibG9ja3M7CiAgX191MzIgc19yb290X2Jsb2NrOwogIF9f dTMyIHNfam91cm5hbF9ibG9jazsKICBfX3UzMiBzX2pvdXJuYWxfZGV2OwojIDQzICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCiAgX191MzIgc19vcmlnX2pv dXJuYWxfc2l6ZTsKICBfX3UzMiBzX2pvdXJuYWxfdHJhbnNfbWF4IDsKICBfX3UzMiBzX2pvdXJu YWxfYmxvY2tfY291bnQgOwogIF9fdTMyIHNfam91cm5hbF9tYXhfYmF0Y2ggOwogIF9fdTMyIHNf am91cm5hbF9tYXhfY29tbWl0X2FnZSA7CiAgX191MzIgc19qb3VybmFsX21heF90cmFuc19hZ2Ug OwogIF9fdTE2IHNfYmxvY2tzaXplOwogIF9fdTE2IHNfb2lkX21heHNpemU7CiAgX191MTYgc19v aWRfY3Vyc2l6ZTsKICBfX3UxNiBzX3N0YXRlOwogIGNoYXIgc19tYWdpY1sxMl07CiAgX191MzIg c19oYXNoX2Z1bmN0aW9uX2NvZGU7CiAgX191MTYgc190cmVlX2hlaWdodDsKICBfX3UxNiBzX2Jt YXBfbnI7CiAgX191MTYgc192ZXJzaW9uOwoKCgoKICBfX3UxNiBzX3Jlc2VydmVkOwogIF9fdTMy IHNfaW5vZGVfZ2VuZXJhdGlvbjsKICBjaGFyIHNfdW51c2VkWzEyNF0gOwp9IF9fYXR0cmlidXRl X18gKChfX3BhY2tlZF9fKSk7CiMgMTIxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Jl aXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MQp7CiAgX191MzIg c19ibG9ja19jb3VudDsKICBfX3UzMiBzX2ZyZWVfYmxvY2tzOwogIF9fdTMyIHNfcm9vdF9ibG9j azsKICBfX3UzMiBzX2pvdXJuYWxfYmxvY2s7CiAgX191MzIgc19qb3VybmFsX2RldjsKICBfX3Uz MiBzX29yaWdfam91cm5hbF9zaXplOwogIF9fdTMyIHNfam91cm5hbF90cmFuc19tYXggOwogIF9f dTMyIHNfam91cm5hbF9ibG9ja19jb3VudCA7CiAgX191MzIgc19qb3VybmFsX21heF9iYXRjaCA7 CiAgX191MzIgc19qb3VybmFsX21heF9jb21taXRfYWdlIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4 X3RyYW5zX2FnZSA7CiAgX191MTYgc19ibG9ja3NpemU7CiAgX191MTYgc19vaWRfbWF4c2l6ZTsK ICBfX3UxNiBzX29pZF9jdXJzaXplOwogIF9fdTE2IHNfc3RhdGU7CiAgY2hhciBzX21hZ2ljWzE2 XTsKICBfX3UxNiBzX3RyZWVfaGVpZ2h0OwogIF9fdTE2IHNfYm1hcF9ucjsKICBfX3UzMiBzX3Jl c2VydmVkOwp9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiMgMjAwICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJmc19qb3Vy bmFsX2Nub2RlIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoIDsKICBrZGV2X3QgZGV2IDsKICB1 bnNpZ25lZCBsb25nIGJsb2NrbnIgOwogIGludCBzdGF0ZSA7CiAgc3RydWN0IHJlaXNlcmZzX2pv dXJuYWxfbGlzdCAqamxpc3QgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpuZXh0 IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqcHJldiA7CiAgc3RydWN0IHJlaXNl cmZzX2pvdXJuYWxfY25vZGUgKmhwcmV2IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9k ZSAqaG5leHQgOwp9OwoKc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlIHsKICBpbnQgaWQgOwog IGNoYXIgKmRhdGEgOwogIHN0cnVjdCBsaXN0X2hlYWQgbGlzdCA7Cn0gOwoKc3RydWN0IHJlaXNl cmZzX2xpc3RfYml0bWFwIHsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqb3VybmFs X2xpc3QgOwogIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqKmJpdG1hcHMgOwp9IDsKCgoK CnN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgewoKICBjaGFyICp0X2NhbGxlciA7 CiAgaW50IHRfYmxvY2tzX2xvZ2dlZCA7CiAgaW50IHRfYmxvY2tzX2FsbG9jYXRlZCA7CiAgdW5z aWduZWQgbG9uZyB0X3RyYW5zX2lkIDsKICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnRfc3VwZXIgOwoK fSA7CgoKCgoKCgpzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0IHsKICB1bnNpZ25lZCBsb25n IGpfc3RhcnQgOwogIHVuc2lnbmVkIGxvbmcgal9sZW4gOwogIGF0b21pY190IGpfbm9uemVyb2xl biA7CiAgYXRvbWljX3Qgal9jb21taXRfbGVmdCA7CiAgYXRvbWljX3Qgal9mbHVzaGluZyA7CiAg YXRvbWljX3Qgal9jb21taXRfZmx1c2hpbmcgOwogIGF0b21pY190IGpfb2xkZXJfY29tbWl0c19k b25lIDsKICB1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQgOwogIHRpbWVfdCBqX3RpbWVzdGFtcCA7 CiAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqX2xpc3RfYml0bWFwIDsKICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKmpfY29tbWl0X2JoIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9k ZSAqal9yZWFsYmxvY2sgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2ZyZWVk bGlzdCA7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgal9jb21taXRfd2FpdCA7CiAgd2FpdF9xdWV1ZV9o ZWFkX3Qgal9mbHVzaF93YWl0IDsKfSA7CgpzdHJ1Y3QgcmVpc2VyZnNfcGFnZV9saXN0IDsKCnN0 cnVjdCByZWlzZXJmc19qb3VybmFsIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogal9hcF9ibG9j a3MgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2xhc3QgOwogIHN0cnVjdCBy ZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2ZpcnN0IDsKCiAgaW50IGpfc3RhdGUgOwogIHVuc2ln bmVkIGxvbmcgal90cmFuc19pZCA7CiAgdW5zaWduZWQgbG9uZyBqX21vdW50X2lkIDsKICB1bnNp Z25lZCBsb25nIGpfc3RhcnQgOwogIHVuc2lnbmVkIGxvbmcgal9sZW4gOwogIHVuc2lnbmVkIGxv bmcgal9sZW5fYWxsb2MgOwogIGF0b21pY190IGpfd2NvdW50IDsKICB1bnNpZ25lZCBsb25nIGpf YmNvdW50IDsKICB1bnNpZ25lZCBsb25nIGpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA7CiAgdW5z aWduZWQgbG9uZyBqX2xhc3RfZmx1c2hfdHJhbnNfaWQgOwogIHN0cnVjdCBidWZmZXJfaGVhZCAq al9oZWFkZXJfYmggOwoKCgoKICBzdHJ1Y3QgcmVpc2VyZnNfcGFnZV9saXN0ICpqX2ZsdXNoX3Bh Z2VzIDsKICB0aW1lX3Qgal90cmFuc19zdGFydF90aW1lIDsKICB3YWl0X3F1ZXVlX2hlYWRfdCBq X3dhaXQgOwogIGF0b21pY190IGpfd2xvY2sgOwogIHdhaXRfcXVldWVfaGVhZF90IGpfam9pbl93 YWl0IDsKICBhdG9taWNfdCBqX2psb2NrIDsKICBpbnQgal9qb3VybmFsX2xpc3RfaW5kZXggOwog IGludCBqX2xpc3RfYml0bWFwX2luZGV4IDsKICBpbnQgal9tdXN0X3dhaXQgOwogIGludCBqX25l eHRfZnVsbF9mbHVzaCA7CiAgaW50IGpfbmV4dF9hc3luY19mbHVzaCA7CgogIGludCBqX2Nub2Rl X3VzZWQgOwogIGludCBqX2Nub2RlX2ZyZWUgOwoKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9j bm9kZSAqal9jbm9kZV9mcmVlX2xpc3QgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2Rl ICpqX2Nub2RlX2ZyZWVfb3JpZyA7CgogIGludCBqX2ZyZWVfYml0bWFwX25vZGVzIDsKICBpbnQg al91c2VkX2JpdG1hcF9ub2RlcyA7CiAgc3RydWN0IGxpc3RfaGVhZCBqX2JpdG1hcF9ub2RlcyA7 CiAgc3RydWN0IGlub2RlIGpfZHVtbXlfaW5vZGUgOwogIHN0cnVjdCByZWlzZXJmc19saXN0X2Jp dG1hcCBqX2xpc3RfYml0bWFwWzVdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0IGpf am91cm5hbF9saXN0WzY0XSA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfaGFz aF90YWJsZVs4MTkyXSA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfbGlzdF9o YXNoX3RhYmxlWzgxOTJdIDsKCiAgc3RydWN0IGxpc3RfaGVhZCBqX3ByZWFsbG9jX2xpc3Q7Cn07 CgoKCgp0eXBlZGVmIF9fdTMyICgqaGFzaGZfdCkgKGNvbnN0IHNpZ25lZCBjaGFyICosIGludCk7 CgoKc3RydWN0IHJlaXNlcmZzX3NiX2luZm8KewogICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19z Ymg7CgoKICAgIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqIHNfcnM7CiAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKiogc19hcF9iaXRtYXA7CiAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAq c19qb3VybmFsIDsKICAgIHVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CgoKICAgIHZvaWQg KCplbmRfaW9faGFuZGxlcikoc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiAgICBoYXNoZl90 IHNfaGFzaF9mdW5jdGlvbjsKCgogICAgdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsKCgoKCiAg ICB3YWl0X3F1ZXVlX2hlYWRfdCBzX3dhaXQ7CgogICAgYXRvbWljX3Qgc19nZW5lcmF0aW9uX2Nv dW50ZXI7CgoKCiAgICBpbnQgc19rbWFsbG9jczsKICAgIGludCBzX2Rpc2tfcmVhZHM7CiAgICBp bnQgc19kaXNrX3dyaXRlczsKICAgIGludCBzX2ZpeF9ub2RlczsKICAgIGludCBzX2RvX2JhbGFu Y2U7CiAgICBpbnQgc191bm5lZWRlZF9sZWZ0X25laWdoYm9yOwogICAgaW50IHNfZ29vZF9zZWFy Y2hfYnlfa2V5X3JlYWRhOwogICAgaW50IHNfYm1hcHM7CiAgICBpbnQgc19ibWFwc193aXRob3V0 X3NlYXJjaDsKICAgIGludCBzX2RpcmVjdDJpbmRpcmVjdDsKICAgIGludCBzX2luZGlyZWN0MmRp cmVjdDsKfTsKIyA0MTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNf c2IuaCIKdm9pZCByZWlzZXJmc19maWxlX2J1ZmZlciAoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgs IGludCBsaXN0KTsKaW50IHJlaXNlcmZzX2lzX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykg OwppbnQgam91cm5hbF9tYXJrX2RpcnR5KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5k bGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIDsKaW50 IGZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50KSA7CmludCBzaG93 X3JlaXNlcmZzX2xvY2tzKHZvaWQpIDsKaW50IHJlaXNlcmZzX3Jlc2l6ZShzdHJ1Y3Qgc3VwZXJf YmxvY2sgKiwgdW5zaWduZWQgbG9uZykgOwojIDY3NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfc2Iu aCIgMQojIDEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Jmc19mc19zYi5oIgpzdHJ1 Y3QgYmZzX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfYmxvY2tzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2lfZnJlZWI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9mcmVlaTsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2xmX2lvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz aV9sZl9zYmxrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGZfZWJsazsKICAgICAgICB1bnNp Z25lZCBsb25nIHNpX2xhc3RpOwogICAgICAgIGNoYXIgKiBzaV9pbWFwOwogICAgICAgIHN0cnVj dCBidWZmZXJfaGVhZCAqIHNpX3NiaDsKICAgICAgICBzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICog c2lfYmZzX3NiOwp9OwojIDY3NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCIgMQojIDIxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oIgojcHJhZ21hIHBhY2soMSkK IyAzMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCIKc3RydWN0IHVk Zl9zcGFyaW5nX2RhdGEKewogICAgICAgIF9fdTE2IHNfcGFja2V0X2xlbjsKICAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKnNfc3Bhcl9tYXBbNF07Cn07CgpzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0 YQp7CiAgICAgICAgX191MzIgc19udW1fZW50cmllczsKICAgICAgICBfX3UxNiBzX3N0YXJ0X29m ZnNldDsKfTsKCnN0cnVjdCB1ZGZfYml0bWFwCnsKICAgICAgICBfX3UzMiBzX2V4dExlbmd0aDsK ICAgICAgICBfX3UzMiBzX2V4dFBvc2l0aW9uOwogICAgICAgIF9fdTE2IHNfbnJfZ3JvdXBzOwog ICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnNfYmxvY2tfYml0bWFwOwp9OwoKc3RydWN0IHVk Zl9wYXJ0X21hcAp7CiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgdWRmX2JpdG1hcCAqc19iaXRtYXA7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKnNf dGFibGU7CiAgICAgICAgfSBzX3VzcGFjZTsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAg ICAgICAgICAgIHN0cnVjdCB1ZGZfYml0bWFwICpzX2JpdG1hcDsKICAgICAgICAgICAgICAgIHN0 cnVjdCBpbm9kZSAqc190YWJsZTsKICAgICAgICB9IHNfZnNwYWNlOwogICAgICAgIF9fdTMyIHNf cGFydGl0aW9uX3Jvb3Q7CiAgICAgICAgX191MzIgc19wYXJ0aXRpb25fbGVuOwogICAgICAgIF9f dTE2IHNfcGFydGl0aW9uX3R5cGU7CiAgICAgICAgX191MTYgc19wYXJ0aXRpb25fbnVtOwogICAg ICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RydWN0IHVkZl9zcGFyaW5nX2Rh dGEgc19zcGFyaW5nOwogICAgICAgICAgICAgICAgc3RydWN0IHVkZl92aXJ0dWFsX2RhdGEgc192 aXJ0dWFsOwogICAgICAgIH0gc190eXBlX3NwZWNpZmljOwogICAgICAgIF9fdTMyICgqc19wYXJ0 aXRpb25fZnVuYykoc3RydWN0IHN1cGVyX2Jsb2NrICosIF9fdTMyLCBfX3UxNiwgX191MzIpOwog ICAgICAgIF9fdTE2IHNfdm9sdW1lc2VxbnVtOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uX2Zs YWdzOwp9OwoKI3ByYWdtYSBwYWNrKCkKCnN0cnVjdCB1ZGZfc2JfaW5mbwp7CiAgICAgICAgc3Ry dWN0IHVkZl9wYXJ0X21hcCAqc19wYXJ0bWFwczsKICAgICAgICBfX3U4IHNfdm9saWRlbnRbMzJd OwoKCiAgICAgICAgX191MTYgc19wYXJ0aXRpb25zOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9u OwoKCiAgICAgICAgX19zMzIgc19zZXNzaW9uOwogICAgICAgIF9fdTMyIHNfYW5jaG9yWzRdOwog ICAgICAgIF9fdTMyIHNfbGFzdGJsb2NrOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNf bHZpZGJoOwoKCiAgICAgICAgbW9kZV90IHNfdW1hc2s7CiAgICAgICAgZ2lkX3Qgc19naWQ7CiAg ICAgICAgdWlkX3Qgc191aWQ7CgoKICAgICAgICB0aW1lX3Qgc19yZWNvcmR0aW1lOwoKCiAgICAg ICAgX191MTYgc19zZXJpYWxudW07CgoKICAgICAgICBfX3UxNiBzX3VkZnJldjsKCgogICAgICAg IF9fdTMyIHNfZmxhZ3M7CgoKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpzX25sc19tYXA7CgoK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKnNfdmF0Owp9OwojIDY3OCAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3Bf ZnNfc2IuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5o IgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDEyICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L25jcF9tb3VudC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv dHlwZXMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3AuaCIgMQojIDEzICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvdHlwZXMuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25j cC5oIiAyCiMgMjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmNwLmgiCnN0cnVjdCBu Y3BfcmVxdWVzdF9oZWFkZXIgewogICAgICAgIF9fdTE2IHR5cGUgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191OCBzZXF1ZW5jZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3U4IGNvbm5fbG93IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTgg dGFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGNvbm5faGlnaCBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGZ1bmN0aW9uIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK fTsKCgoKCnN0cnVjdCBuY3BfcmVwbHlfaGVhZGVyIHsKICAgICAgICBfX3UxNiB0eXBlIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3U4IHRhc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBj b25uX2hpZ2ggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb21wbGV0aW9u X2NvZGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uZWN0aW9uX3N0 YXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggZGF0YVswXSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKc3RydWN0IG5jcF92b2x1bWVfaW5mbyB7CiAgICAgICAg X191MzIgdG90YWxfYmxvY2tzOwogICAgICAgIF9fdTMyIGZyZWVfYmxvY2tzOwogICAgICAgIF9f dTMyIHB1cmdlYWJsZV9ibG9ja3M7CiAgICAgICAgX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxv Y2tzOwogICAgICAgIF9fdTMyIHRvdGFsX2Rpcl9lbnRyaWVzOwogICAgICAgIF9fdTMyIGF2YWls YWJsZV9kaXJfZW50cmllczsKICAgICAgICBfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOwogICAgICAg IGNoYXIgdm9sdW1lX25hbWVbKDE2KSArIDFdOwp9OwojIDExMiAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9uY3AuaCIKc3RydWN0IG53X2luZm9fc3RydWN0IHsKICAgICAgICBfX3UzMiBz cGFjZUFsbG9jIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGF0dHJpYnV0 ZXMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgZmxhZ3MgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgZGF0YVN0cmVhbVNpemUgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191MzIgdG90YWxTdHJlYW1TaXplIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG51bWJlck9mU3RyZWFtcyBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3UxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191MTYgY3JlYXRpb25EYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTMyIGNyZWF0b3JJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3UxNiBtb2RpZnlUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1v ZGlmeURhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgbW9kaWZpZXJJ RCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBsYXN0QWNjZXNzRGF0ZSBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBhcmNoaXZlVGltZSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBhcmNoaXZlRGF0ZSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBhcmNoaXZlcklEIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwogICAgICAgIF9fdTE2IGluaGVyaXRlZFJpZ2h0c01hc2sgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191MzIgZGlyRW50TnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTMyIERvc0Rpck51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3UzMiB2b2xOdW1iZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRUFE YXRhU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBFQUtleUNvdW50 IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIEVBS2V5U2l6ZSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBOU0NyZWF0b3IgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191OCBuYW1lTGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTggZW50cnlOYW1lWzI1Nl0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CiMg MTU2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbndfbW9kaWZ5 X2Rvc19pbmZvIHsKICAgICAgICBfX3UzMiBhdHRyaWJ1dGVzIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwogICAgICAgIF9fdTE2IGNyZWF0aW9uRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3UxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAg ICAgX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2 IG1vZGlmeURhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbW9kaWZ5 VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBtb2RpZmllcklEIF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGFyY2hpdmVySUQgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191MTYgbGFzdEFjY2Vzc0RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CiAgICAgICAgX191MTYgaW5oZXJpdGFuY2VHcmFudE1hc2sgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191MTYgaW5oZXJpdGFuY2VSZXZva2VNYXNrIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTMyIG1heGltdW1TcGFjZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsKfTsKCnN0cnVjdCBud19zZWFyY2hfc2VxdWVuY2UgewogICAgICAgIF9fdTggdm9sTnVtYmVy IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGRpckJhc2UgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7Cn07CiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmNwX21vdW50Lmgi IDIKIyAyNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaCIKc3RydWN0 IG5jcF9tb3VudF9kYXRhIHsKICAgICAgICBpbnQgdmVyc2lvbjsKICAgICAgICB1bnNpZ25lZCBp bnQgbmNwX2ZkOwogICAgICAgIF9fa2VybmVsX3VpZF90IG1vdW50ZWRfdWlkOwogICAgICAgIF9f a2VybmVsX3BpZF90IHdkb2dfcGlkOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIG1vdW50ZWRfdm9s WygxNikgKyAxXTsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVuc2ln bmVkIGludCByZXRyeV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CgogICAgICAg IF9fa2VybmVsX3VpZF90IHVpZDsKICAgICAgICBfX2tlcm5lbF9naWRfdCBnaWQ7CiAgICAgICAg X19rZXJuZWxfbW9kZV90IGZpbGVfbW9kZTsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgZGlyX21v ZGU7Cn07CgoKCnN0cnVjdCBuY3BfbW91bnRfZGF0YV92NCB7CiAgICAgICAgaW50IHZlcnNpb247 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgbW91 bnRlZF91aWQ7CgogICAgICAgIGxvbmcgd2RvZ19waWQ7CgogICAgICAgIHVuc2lnbmVkIGludCBu Y3BfZmQ7CiAgICAgICAgdW5zaWduZWQgaW50IHRpbWVfb3V0OwoKICAgICAgICB1bnNpZ25lZCBp bnQgcmV0cnlfY291bnQ7CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyB1aWQ7CiAgICAgICAgdW5z aWduZWQgbG9uZyBnaWQ7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZmlsZV9tb2RlOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZGlyX21vZGU7Cn07CgoKCnN0cnVjdCBuY3BfbW91bnRfZGF0YV9rZXJu ZWwgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgaW50IGlu dF9mbGFnczsKCiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCBtb3VudGVkX3VpZDsKICAgICAgICBf X2tlcm5lbF9waWRfdCB3ZG9nX3BpZDsKICAgICAgICB1bnNpZ25lZCBpbnQgbmNwX2ZkOwogICAg ICAgIHVuc2lnbmVkIGludCB0aW1lX291dDsKCiAgICAgICAgdW5zaWduZWQgaW50IHJldHJ5X2Nv dW50OwogICAgICAgIHVuc2lnbmVkIGNoYXIgbW91bnRlZF92b2xbKDE2KSArIDFdOwogICAgICAg IF9fa2VybmVsX3VpZDMyX3QgdWlkOwogICAgICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOwogICAg ICAgIF9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CiAgICAgICAgX19rZXJuZWxfbW9kZV90IGRp cl9tb2RlOwp9OwojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5o IiAyCgoKCgoKc3RydWN0IG5jcF9zZXJ2ZXIgewoKICAgICAgICBzdHJ1Y3QgbmNwX21vdW50X2Rh dGFfa2VybmVsIG07CgoKCiAgICAgICAgX191OCBuYW1lX3NwYWNlWyg2NCkgKyAyXTsKCiAgICAg ICAgc3RydWN0IGZpbGUgKm5jcF9maWxwOwoKICAgICAgICB1OCBzZXF1ZW5jZTsKICAgICAgICB1 OCB0YXNrOwogICAgICAgIHUxNiBjb25uZWN0aW9uOwoKICAgICAgICB1OCBjb21wbGV0aW9uOwog ICAgICAgIHU4IGNvbm5fc3RhdHVzOwoKCgogICAgICAgIGludCBidWZmZXJfc2l6ZTsKCiAgICAg ICAgaW50IHJlcGx5X3NpemU7CgogICAgICAgIGludCBwYWNrZXRfc2l6ZTsKICAgICAgICB1bnNp Z25lZCBjaGFyICpwYWNrZXQ7CgoKICAgICAgICBpbnQgbG9jazsKICAgICAgICBzdHJ1Y3Qgc2Vt YXBob3JlIHNlbTsKCiAgICAgICAgaW50IGN1cnJlbnRfc2l6ZTsKICAgICAgICBpbnQgaGFzX3N1 YmZ1bmN0aW9uOwogICAgICAgIGludCBuY3BfcmVwbHlfc2l6ZTsKCiAgICAgICAgaW50IHJvb3Rf c2V0dXBlZDsKCgogICAgICAgIGludCBzaWduX3dhbnRlZDsKICAgICAgICBpbnQgc2lnbl9hY3Rp dmU7CiAgICAgICAgY2hhciBzaWduX3Jvb3RbOF07CiAgICAgICAgY2hhciBzaWduX2xhc3RbMTZd OwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIGludCBhdXRoX3R5cGU7CiAgICAg ICAgICAgICAgICBzaXplX3Qgb2JqZWN0X25hbWVfbGVuOwogICAgICAgICAgICAgICAgdm9pZCog b2JqZWN0X25hbWU7CiAgICAgICAgICAgICAgICBpbnQgb2JqZWN0X3R5cGU7CiAgICAgICAgfSBh dXRoOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgc2l6ZV90IGxlbjsKICAgICAg ICAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgICAgfSBwcml2OwoKCiAgICAgICAgc3RydWN0IG5s c190YWJsZSAqbmxzX3ZvbDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfaW87CgoKICAg ICAgICBpbnQgZGVudHJ5X3R0bDsKCgogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKfTsKIyA5 MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIKc3RhdGljIGlubGlu ZSBpbnQgbmNwX2Nvbm5fdmFsaWQoc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKewogICAgICAg IHJldHVybiAoKHNlcnZlci0+Y29ubl9zdGF0dXMgJiAweDExKSA9PSAwKTsKfQoKc3RhdGljIGlu bGluZSB2b2lkIG5jcF9pbnZhbGlkYXRlX2Nvbm4oc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikK ewogICAgICAgIHNlcnZlci0+Y29ubl9zdGF0dXMgfD0gMHgwMTsKfQojIDY3OSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC91c2JkZXZfZnNfc2IuaCIgMQpzdHJ1Y3QgdXNiZGV2X3NiX2luZm8gewogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgc2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbGlzdDsKICAg ICAgICB1aWRfdCBkZXZ1aWQ7CiAgICAgICAgZ2lkX3QgZGV2Z2lkOwogICAgICAgIHVtb2RlX3Qg ZGV2bW9kZTsKICAgICAgICB1aWRfdCBidXN1aWQ7CiAgICAgICAgZ2lkX3QgYnVzZ2lkOwogICAg ICAgIHVtb2RlX3QgYnVzbW9kZTsKICAgICAgICB1aWRfdCBsaXN0dWlkOwogICAgICAgIGdpZF90 IGxpc3RnaWQ7CiAgICAgICAgdW1vZGVfdCBsaXN0bW9kZTsKfTsKIyA2ODAgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvY3JhbWZzX2ZzX3NiLmgiIDEKIyA2ODEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIg MQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNyAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgOCAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9jb21wbGV0aW9uLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0Lmgi IDEKIyAxMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDIKCnN0 cnVjdCBjb21wbGV0aW9uIHsKICAgICAgICB1bnNpZ25lZCBpbnQgZG9uZTsKICAgICAgICB3YWl0 X3F1ZXVlX2hlYWRfdCB3YWl0Owp9OwoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29t cGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqeCkKewogICAgICAgIHgtPmRvbmUgPSAwOwogICAg ICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJngtPndhaXQpOwp9CgpleHRlcm4gdm9pZCB3YWl0X2Zv cl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKZXh0ZXJuIHZvaWQgY29tcGxldGUoc3RydWN0IGNvbXBsZXRpb24gKikgX19hdHRyaWJ1 dGVfXygocmVncGFybSgzKSkpOwojIDkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvamZm czJfZnNfc2IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5o IiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIgMgojIDIwICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiCnN0cnVjdCBqZmZzMl9zYl9pbmZvIHsKICAg ICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKCiAgICAgICAgX191MzIgaGlnaGVzdF9pbm87CiAg ICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHNwaW5sb2NrX3Qgbm9kZWxpc3RfbG9j azsKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIGdjX3RocmVhZF9zdGFydDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBnY190 aHJlYWRfZXhpdDsKCgoKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGFsbG9jX3NlbTsKCgoKCiAg ICAgICAgX191MzIgZmxhc2hfc2l6ZTsKICAgICAgICBfX3UzMiB1c2VkX3NpemU7CiAgICAgICAg X191MzIgZGlydHlfc2l6ZTsKICAgICAgICBfX3UzMiBmcmVlX3NpemU7CiAgICAgICAgX191MzIg ZXJhc2luZ19zaXplOwogICAgICAgIF9fdTMyIGJhZF9zaXplOwogICAgICAgIF9fdTMyIHNlY3Rv cl9zaXplOwoKCgogICAgICAgIF9fdTMyIG5yX2ZyZWVfYmxvY2tzOwogICAgICAgIF9fdTMyIG5y X2VyYXNpbmdfYmxvY2tzOwoKICAgICAgICBfX3UzMiBucl9ibG9ja3M7CiAgICAgICAgc3RydWN0 IGpmZnMyX2VyYXNlYmxvY2sgKmJsb2NrczsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxv Y2sgKm5leHRibG9jazsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmdjYmxvY2s7 CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xlYW5fbGlzdDsKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIGRpcnR5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzaW5nX2xpc3Q7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9wZW5kaW5nX2xpc3Q7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBlcmFzZV9jb21wbGV0ZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZnJlZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBiYWRfdXNlZF9saXN0OwoKICAgICAgICBzcGlubG9ja190IGVyYXNl X2NvbXBsZXRpb25fbG9jazsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZXJhc2Vfd2FpdDsK ICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlX2xpc3RbMV07CiAgICAg ICAgc3BpbmxvY2tfdCBpbm9jYWNoZV9sb2NrOwp9OwojIDY4MiAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9mcy5oIiAyCgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzdXBlcl9ibG9ja3M7 CmV4dGVybiBzcGlubG9ja190IHNiX2xvY2s7CgoKCnN0cnVjdCBzdXBlcl9ibG9jayB7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBzX2xpc3Q7CiAgICAgICAga2Rldl90IHNfZGV2OwogICAgICAg IHVuc2lnbmVkIGxvbmcgc19ibG9ja3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX2Jsb2Nr c2l6ZV9iaXRzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19kaXJ0OwogICAgICAgIHVuc2lnbmVk IGxvbmcgbG9uZyBzX21heGJ5dGVzOwogICAgICAgIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpz X3R5cGU7CiAgICAgICAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgKnNfb3A7CiAgICAgICAgc3Ry dWN0IGRxdW90X29wZXJhdGlvbnMgKmRxX29wOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mbGFn czsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWFnaWM7CiAgICAgICAgc3RydWN0IGRlbnRyeSAq c19yb290OwogICAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgc191bW91bnQ7CiAgICAgICAgc3Ry dWN0IHNlbWFwaG9yZSBzX2xvY2s7CiAgICAgICAgaW50IHNfY291bnQ7CiAgICAgICAgYXRvbWlj X3Qgc19hY3RpdmU7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc19kaXJ0eTsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIHNfbG9ja2VkX2lub2RlczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk IHNfZmlsZXM7CgogICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKnNfYmRldjsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIHNfaW5zdGFuY2VzOwogICAgICAgIHN0cnVjdCBxdW90YV9tb3VudF9v cHRpb25zIHNfZHF1b3Q7CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBt aW5peF9zYl9pbmZvIG1pbml4X3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGV4dDJfc2JfaW5m byBleHQyX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGhwZnNfc2JfaW5mbyBocGZzX3NiOwog ICAgICAgICAgICAgICAgc3RydWN0IG50ZnNfc2JfaW5mbyBudGZzX3NiOwogICAgICAgICAgICAg ICAgc3RydWN0IG1zZG9zX3NiX2luZm8gbXNkb3Nfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg aXNvZnNfc2JfaW5mbyBpc29mc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfc2JfaW5m byBuZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzdl9zYl9pbmZvIHN5c3Zfc2I7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgYWZmc19zYl9pbmZvIGFmZnNfc2I7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgdWZzX3NiX2luZm8gdWZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGVmc19z Yl9pbmZvIGVmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHNobWVt X3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHJvbWZzX3NiX2luZm8gcm9tZnNfc2I7CiAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc21iX3NiX2luZm8gc21iZnNfc2I7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgaGZzX3NiX2luZm8gaGZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGFkZnNfc2Jf aW5mbyBhZGZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHFueDRfc2JfaW5mbyBxbng0X3Ni OwogICAgICAgICAgICAgICAgc3RydWN0IHJlaXNlcmZzX3NiX2luZm8gcmVpc2VyZnNfc2I7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgYmZzX3NiX2luZm8gYmZzX3NiOwogICAgICAgICAgICAgICAg c3RydWN0IHVkZl9zYl9pbmZvIHVkZl9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBuY3Bfc2Vy dmVyIG5jcGZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHVzYmRldl9zYl9pbmZvIHVzYmRl dmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGpmZnMyX3NiX2luZm8gamZmczJfc2I7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgY3JhbWZzX3NiX2luZm8gY3JhbWZzX3NiOwogICAgICAgICAg ICAgICAgdm9pZCAqZ2VuZXJpY19zYnA7CiAgICAgICAgfSB1OwoKCgoKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIHNfdmZzX3JlbmFtZV9zZW07CiMgNzU0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L2ZzLmgiCiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzX25mc2RfZnJlZV9wYXRoX3Nl bTsKfTsKCgoKCmV4dGVybiBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRl bnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19ta25vZChzdHJ1Y3QgaW5vZGUgKiwgc3Ry dWN0IGRlbnRyeSAqLCBpbnQsIGRldl90KTsKZXh0ZXJuIGludCB2ZnNfc3ltbGluayhzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHZmc19s aW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4 dGVybiBpbnQgdmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRl cm4gaW50IHZmc191bmxpbmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVy biBpbnQgdmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKIyA3ODggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvZnMuaCIKdHlwZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQgKiwgY29uc3QgY2hhciAq LCBpbnQsIGxvZmZfdCwgaW5vX3QsIHVuc2lnbmVkKTsKCnN0cnVjdCBibG9ja19kZXZpY2Vfb3Bl cmF0aW9ucyB7CiAgICAgICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmls ZSAqKTsKICAgICAgICBpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxl ICopOwogICAgICAgIGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICos IHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICBpbnQgKCpjaGVja19tZWRpYV9jaGFu Z2UpIChrZGV2X3QpOwogICAgICAgIGludCAoKnJldmFsaWRhdGUpIChrZGV2X3QpOwp9OwoKCgoK CgpzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcjsK ICAgICAgICBsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAg ICAgICAgc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9m Zl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNo YXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgICAgICAgaW50ICgqcmVhZGRpcikgKHN0cnVjdCBm aWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpwb2xsKSAo c3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogICAgICAgIGludCAo KmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5z aWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqKTsKICAgICAgICBpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICosIHN0 cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7CiAgICAg ICAgaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAgICAg ICBpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50IGRhdGFz eW5jKTsKICAgICAgICBpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGludCk7CiAg ICAgICAgaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAq KTsKICAgICAgICBzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3Qg aW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0 ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywg bG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0 cnVjdCBwYWdlICosIGludCwgc2l6ZV90LCBsb2ZmX3QgKiwgaW50KTsKICAgICAgICB1bnNpZ25l ZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcs IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwp9OwoKc3RydWN0 IGlub2RlX29wZXJhdGlvbnMgewogICAgICAgIGludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAq LHN0cnVjdCBkZW50cnkgKixpbnQpOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiAoKmxvb2t1cCkg KHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50ICgqbGluaykgKHN0 cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGlu dCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50 ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25zdCBjaGFyICop OwogICAgICAgIGludCAoKm1rZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGlu dCk7CiAgICAgICAgaW50ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICop OwogICAgICAgIGludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGlu dCxpbnQpOwogICAgICAgIGludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVu dHJ5ICosCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVu dHJ5ICopOwogICAgICAgIGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyICos aW50KTsKICAgICAgICBpbnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0 IG5hbWVpZGF0YSAqKTsKICAgICAgICB2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7 CiAgICAgICAgaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogICAgICAg IGludCAoKnJldmFsaWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnNldGF0 dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKICAgICAgICBpbnQgKCpnZXRh dHRyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgoKCgoKc3RydWN0IHN1 cGVyX29wZXJhdGlvbnMgewogICAgICAgIHZvaWQgKCpyZWFkX2lub2RlKSAoc3RydWN0IGlub2Rl ICopOwoKCgoKCgoKICAgICAgICB2b2lkICgqcmVhZF9pbm9kZTIpIChzdHJ1Y3QgaW5vZGUgKiwg dm9pZCAqKSA7CiAgICAgICAgdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOwog ICAgICAgIHZvaWQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogICAgICAg IHZvaWQgKCpwdXRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAgdm9pZCAoKmRlbGV0 ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqcHV0X3N1cGVyKSAoc3Ry dWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBz dXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2ZzKSAoc3RydWN0 IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp1bmxvY2tmcykgKHN0cnVjdCBzdXBlcl9i bG9jayAqKTsKICAgICAgICBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3Ry dWN0IHN0YXRmcyAqKTsKICAgICAgICBpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Js b2NrICosIGludCAqLCBjaGFyICopOwogICAgICAgIHZvaWQgKCpjbGVhcl9pbm9kZSkgKHN0cnVj dCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0IHN1cGVyX2Js b2NrICopOwojIDg5MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgogICAgICAg IHN0cnVjdCBkZW50cnkgKiAoKmZoX3RvX2RlbnRyeSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwg X191MzIgKmZoLCBpbnQgbGVuLCBpbnQgZmh0eXBlLCBpbnQgcGFyZW50KTsKICAgICAgICBpbnQg KCpkZW50cnlfdG9fZmgpKHN0cnVjdCBkZW50cnkgKiwgX191MzIgKmZoLCBpbnQgKmxlbnAsIGlu dCBuZWVkX3BhcmVudCk7Cn07CiMgOTA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Zz LmgiCmV4dGVybiB2b2lkIF9fbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsK c3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkK ewogICAgICAgIF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgKDEgfCAyIHwgNCkpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUp CnsKICAgICAgICBfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIDEpOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQgbWFya19pbm9kZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAg ICAgX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCA0KTsKfQoKc3RydWN0IGRxdW90X29wZXJhdGlv bnMgewogICAgICAgIHZvaWQgKCppbml0aWFsaXplKSAoc3RydWN0IGlub2RlICosIHNob3J0KTsK ICAgICAgICB2b2lkICgqZHJvcCkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICBpbnQgKCphbGxv Y19ibG9jaykgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyKTsKICAgICAgICBp bnQgKCphbGxvY19pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsK ICAgICAgICB2b2lkICgqZnJlZV9ibG9jaykgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25n KTsKICAgICAgICB2b2lkICgqZnJlZV9pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNp Z25lZCBsb25nKTsKICAgICAgICBpbnQgKCp0cmFuc2ZlcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgaWF0dHIgKik7Cn07CgpzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB7CiAgICAgICAgY29uc3Qg Y2hhciAqbmFtZTsKICAgICAgICBpbnQgZnNfZmxhZ3M7CiAgICAgICAgc3RydWN0IHN1cGVyX2Js b2NrICooKnJlYWRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqLCBpbnQpOwog ICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyOwogICAgICAgIHN0cnVjdCBmaWxlX3N5c3RlbV90 eXBlICogbmV4dDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGZzX3N1cGVyczsKfTsKIyA5NjUg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIGludCByZWdpc3Rlcl9m aWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwpleHRlcm4gaW50IHVucmVnaXN0 ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIHN0cnVjdCB2 ZnNtb3VudCAqa2Vybl9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGlu dCBtYXlfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqKTsKZXh0ZXJuIGxvbmcgZG9fbW91bnQoY2hh ciAqLCBjaGFyICosIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKCgoKZXh0ZXJuIGlu dCB2ZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qgc3RhdGZzICopOwojIDk4 MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgpleHRlcm4gaW50IGxvY2tzX21h bmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGxvY2tzX21hbmRhdG9y eV9hcmVhKGludCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCwgc2l6ZV90 KTsKIyA5OTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKc3RhdGljIGlubGlu ZSBpbnQgbG9ja3NfdmVyaWZ5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAg aWYgKCgoKGlub2RlKS0+aV9zYi0+c19mbGFncyAmICg2NCkpICYmICgoaW5vZGUpLT5pX21vZGUg JiAoMDAwMjAwMCB8IDAwMDEwKSkgPT0gMDAwMjAwMCkpCiAgICAgICAgICAgICAgICByZXR1cm4g bG9ja3NfbWFuZGF0b3J5X2xvY2tlZChpbm9kZSk7CiAgICAgICAgcmV0dXJuIDA7Cn0KCnN0YXRp YyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgaW5v ZGUgKmlub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmls ZSAqZmlscCwgbG9mZl90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGNvdW50KQp7CiAgICAgICAgaWYgKGlub2RlLT5pX2Zsb2NrICYmICgoKGlub2Rl KS0+aV9zYi0+c19mbGFncyAmICg2NCkpICYmICgoaW5vZGUpLT5pX21vZGUgJiAoMDAwMjAwMCB8 IDAwMDEwKSkgPT0gMDAwMjAwMCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbG9ja3NfbWFuZGF0 b3J5X2FyZWEocmVhZF93cml0ZSwgaW5vZGUsIGZpbHAsIG9mZnNldCwgY291bnQpOwogICAgICAg IHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoc3Ry dWN0IGlub2RlICppbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGZpbGUgKmZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZf dCBzaXplKQp7CiAgICAgICAgaWYgKGlub2RlLT5pX2Zsb2NrICYmICgoKGlub2RlKS0+aV9zYi0+ c19mbGFncyAmICg2NCkpICYmICgoaW5vZGUpLT5pX21vZGUgJiAoMDAwMjAwMCB8IDAwMDEwKSkg PT0gMDAwMjAwMCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbG9ja3NfbWFuZGF0b3J5X2FyZWEo CiAgICAgICAgICAgICAgICAgICAgICAgIDIsIGlub2RlLCBmaWxwLAogICAgICAgICAgICAgICAg ICAgICAgICBzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IHNpemUgOiBpbm9kZS0+aV9zaXplLAogICAg ICAgICAgICAgICAgICAgICAgICAoc2l6ZSA8IGlub2RlLT5pX3NpemUgPyBpbm9kZS0+aV9zaXpl IC0gc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgOiBzaXplIC0gaW5vZGUtPmlfc2l6ZSkK ICAgICAgICAgICAgICAgICk7CiAgICAgICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50 IGdldF9sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSkKewogICAg ICAgIGlmIChpbm9kZS0+aV9mbG9jayAmJiAoaW5vZGUtPmlfZmxvY2stPmZsX2ZsYWdzICYgMzIp KQogICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2V0X2xlYXNlKGlub2RlLCBtb2RlKTsKICAgICAg ICByZXR1cm4gMDsKfQoKCgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX29w ZW4oY29uc3QgY2hhciAqLCBpbnQsIGludCk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkg bG9uZyBzeXNfY2xvc2UodW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBkb190cnVuY2F0ZShzdHJ1 Y3QgZGVudHJ5ICosIGxvZmZfdCBzdGFydCk7CgpleHRlcm4gc3RydWN0IGZpbGUgKmZpbHBfb3Bl bihjb25zdCBjaGFyICosIGludCwgaW50KTsKZXh0ZXJuIHN0cnVjdCBmaWxlICogZGVudHJ5X29w ZW4oc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgaW50KTsKZXh0ZXJuIGludCBm aWxwX2Nsb3NlKHN0cnVjdCBmaWxlICosIGZsX293bmVyX3QgaWQpOwpleHRlcm4gY2hhciAqIGdl dG5hbWUoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9pZCB2ZnNfY2FjaGVzX2luaXQodW5zaWdu ZWQgbG9uZyk7CgoKCgplbnVtIHtCREVWX0ZJTEUsIEJERVZfU1dBUCwgQkRFVl9GUywgQkRFVl9S QVd9OwpleHRlcm4gaW50IHJlZ2lzdGVyX2Jsa2Rldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIg Kiwgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICopOwpleHRlcm4gaW50IHVucmVnaXN0 ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHN0cnVjdCBibG9j a19kZXZpY2UgKmJkZ2V0KGRldl90KTsKZXh0ZXJuIGludCBiZF9hY3F1aXJlKHN0cnVjdCBpbm9k ZSAqaW5vZGUpOwpleHRlcm4gdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSk7CmV4 dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CmV4dGVybiBzdHJ1Y3QgY2hh cl9kZXZpY2UgKmNkZ2V0KGRldl90KTsKZXh0ZXJuIHZvaWQgY2RwdXQoc3RydWN0IGNoYXJfZGV2 aWNlICopOwpleHRlcm4gaW50IGJsa2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmls ZSAqKTsKZXh0ZXJuIGludCBibGtkZXZfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxl ICopOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHM7CmV4dGVybiBz dHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wczsKZXh0ZXJuIHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgZGVmX2ZpZm9fZm9wczsKZXh0ZXJuIGludCBpb2N0bF9ieV9iZGV2 KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4g aW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkLCBp bnQpOwpleHRlcm4gaW50IGJsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBpbnQpOwoK CmV4dGVybiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmdldF9ibGtmb3Bz KHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgcmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCwg Y29uc3QgY2hhciAqLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopOwpleHRlcm4gaW50IHVucmVn aXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaHJk ZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4dGVybiBjb25zdCBjaGFy ICogYmRldm5hbWUoa2Rldl90KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjZGV2bmFtZShrZGV2X3Qp OwpleHRlcm4gY29uc3QgY2hhciAqIGtkZXZuYW1lKGtkZXZfdCk7CmV4dGVybiB2b2lkIGluaXRf c3BlY2lhbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwgaW50KTsKCgpleHRlcm4gdm9p ZCBtYWtlX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgaXNfYmFkX2lub2Rl KHN0cnVjdCBpbm9kZSAqKTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfZmlm b19mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9maWZvX2ZvcHM7CmV4 dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfZmlmb19mb3BzOwpleHRlcm4gc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgd3JpdGVfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZHdy X3BpcGVfZm9wczsKCmV4dGVybiBpbnQgZnNfbWF5X3JlbW91bnRfcm8oc3RydWN0IHN1cGVyX2Js b2NrICopOwoKZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9idWZmZXJzKHN0cnVjdCBwYWdlICosIHVu c2lnbmVkIGludCk7CmV4dGVybiB2b2lkIHJlZmlsZV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFk ICogYnVmKTsKZXh0ZXJuIHZvaWQgZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBidWZmZXJfaGVh ZCAqYmgsIGludCB1cHRvZGF0ZSk7CgoKZXh0ZXJuIHZvaWQgc2V0X2J1ZmZlcl9hc3luY19pbyhz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSA7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYmgo c3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBhdG9taWNfaW5jKCYoYmgpLT5iX2Nv dW50KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHB1dF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJo KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAgICAg ICBhdG9taWNfZGVjKCZiaC0+Yl9jb3VudCk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJr X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgaW50IG9uKQp7CiAgICAg ICAgaWYgKG9uKQogICAgICAgICAgICAgICAgc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0 YXRlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjbGVhcl9iaXQoQkhfVXB0b2RhdGUs ICZiaC0+Yl9zdGF0ZSk7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9fbWFya19idWZmZXJfY2xl YW4oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewogICAgICAgIHJlZmlsZV9idWZmZXIoYmgpOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfY2xlYW4oc3RydWN0IGJ1ZmZlcl9oZWFk ICogYmgpCnsKICAgICAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJIX0RpcnR5LCAmKGJoKS0+ Yl9zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX21hcmtfYnVmZmVyX2NsZWFuKGJoKTsKfQoKZXh0 ZXJuIHZvaWQgX19tYXJrX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX19tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3Qg YnVmZmVyX2hlYWQgKmJoKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lk IG1hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9kYXRhX3F1ZXVl KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgaW5vZGUgKikgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfYXN5bmMoc3RydWN0 IGJ1ZmZlcl9oZWFkICogYmgsIGludCBvbikKewogICAgICAgIGlmIChvbikKICAgICAgICAgICAg ICAgIHNldF9iaXQoQkhfQXN5bmMsICZiaC0+Yl9zdGF0ZSk7CiAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgY2xlYXJfYml0KEJIX0FzeW5jLCAmYmgtPmJfc3RhdGUpOwp9CgoKCgoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgYnVmZmVyX0lPX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQp7 CiAgICAgICAgbWFya19idWZmZXJfY2xlYW4oYmgpOwoKCgogICAgICAgIGJoLT5iX2VuZF9pbyhi aCwgMCk7Cn0KCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbnNlcnRfaW5vZGVfcXVldWUoc3RydWN0IGJ1 ZmZlcl9oZWFkICosIHN0cnVjdCBpbm9kZSAqKTsKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVm ZmVyX2RpcnR5X2lub2RlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBpbm9kZSAqaW5v ZGUpCnsKICAgICAgICBtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAgICAgICAgYnVmZmVyX2luc2Vy dF9pbm9kZV9xdWV1ZShiaCwgaW5vZGUpOwp9CgpleHRlcm4gdm9pZCBiYWxhbmNlX2RpcnR5KHZv aWQpOwpleHRlcm4gaW50IGNoZWNrX2Rpc2tfY2hhbmdlKGtkZXZfdCk7CmV4dGVybiBpbnQgaW52 YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gaW50IGludmFsaWRh dGVfZGV2aWNlKGtkZXZfdCwgaW50KTsKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9wYWdl cyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfcGFnZXMyKHN0 cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2lub2RlX2J1ZmZl cnMoc3RydWN0IGlub2RlICopOwoKCmV4dGVybiB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3Qg YmxvY2tfZGV2aWNlICosIGludCk7CmV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9idWZmZXJzKGtk ZXZfdCBkZXYsIGludCk7CmV4dGVybiB2b2lkIHN5bmNfaW5vZGVzKGtkZXZfdCk7CmV4dGVybiB2 b2lkIHN5bmNfdW5sb2NrZWRfaW5vZGVzKHZvaWQpOwpleHRlcm4gdm9pZCB3cml0ZV9pbm9kZV9u b3coc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBpbnQgc3luY19idWZmZXJzKGtkZXZfdCwg aW50KTsKZXh0ZXJuIHZvaWQgc3luY19kZXYoa2Rldl90KTsKZXh0ZXJuIGludCBmc3luY19kZXYo a2Rldl90KTsKZXh0ZXJuIGludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4 dGVybiBpbnQgZnN5bmNfbm9fc3VwZXIoa2Rldl90KTsKZXh0ZXJuIHZvaWQgc3luY19pbm9kZXNf c2Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gaW50IG9zeW5jX2lub2RlX2J1ZmZlcnMo c3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IG9zeW5jX2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1 Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgZnN5bmNfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiBpbnQgZnN5bmNfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsK ZXh0ZXJuIGludCBpbm9kZV9oYXNfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lk IGZpbGVtYXBfZmRhdGFzeW5jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4gdm9pZCBm aWxlbWFwX2ZkYXRhd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKZXh0ZXJuIHZvaWQgc3lu Y19zdXBlcnMoa2Rldl90KTsKZXh0ZXJuIGludCBibWFwKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpl eHRlcm4gaW50IG5vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7 CmV4dGVybiBpbnQgcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCB2 ZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBnZXRfd3JpdGVf YWNjZXNzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBkZW55X3dyaXRlX2FjY2VzcyhzdHJ1 Y3QgZmlsZSAqKTsKc3RhdGljIGlubGluZSB2b2lkIHB1dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlu b2RlICogaW5vZGUpCnsKICAgICAgICBhdG9taWNfZGVjKCZpbm9kZS0+aV93cml0ZWNvdW50KTsK fQpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb3dfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxl KQp7CiAgICAgICAgaWYgKGZpbGUpCiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZmaWxlLT5m X2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKfQpleHRlcm4gaW50IGRvX3BpcGUoaW50 ICopOwoKZXh0ZXJuIGludCBvcGVuX25hbWVpKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVj dCBuYW1laWRhdGEgKik7CgpleHRlcm4gaW50IGtlcm5lbF9yZWFkKHN0cnVjdCBmaWxlICosIHVu c2lnbmVkIGxvbmcsIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBzdHJ1Y3QgZmlsZSAq IG9wZW5fZXhlYyhjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQgaXNfc3ViZGlyKHN0cnVjdCBk ZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGlub190IGZpbmRfaW5vZGVfbnVtYmVy KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiMgMTIzNCAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJv cikKewogICAgICAgIHJldHVybiAodm9pZCAqKSBlcnJvcjsKfQoKc3RhdGljIGlubGluZSBsb25n IFBUUl9FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuIChsb25nKSBwdHI7Cn0K CnN0YXRpYyBpbmxpbmUgbG9uZyBJU19FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0 dXJuICh1bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTDsKfQojIDEyNjUg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKZW51bSB7TEFTVF9OT1JNLCBMQVNU X1JPT1QsIExBU1RfRE9ULCBMQVNUX0RPVERPVCwgTEFTVF9CSU5EfTsKIyAxMjc2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBzaXpl X3Qgd3JpdHRlbjsKICAgICAgICBzaXplX3QgY291bnQ7CiAgICAgICAgY2hhciAqIGJ1ZjsKICAg ICAgICBpbnQgZXJyb3I7Cn0gcmVhZF9kZXNjcmlwdG9yX3Q7Cgp0eXBlZGVmIGludCAoKnJlYWRf YWN0b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9u ZywgdW5zaWduZWQgbG9uZyk7CgoKZXh0ZXJuIGxvZmZfdCBkZWZhdWx0X2xsc2VlayhzdHJ1Y3Qg ZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CgpleHRlcm4gaW50IF9fdXNl cl93YWxrKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1laWRhdGEgKikgX19hdHRy aWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50IHBhdGhfaW5pdChjb25zdCBjaGFyICos IHVuc2lnbmVkLCBzdHJ1Y3QgbmFtZWlkYXRhICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykp KTsKZXh0ZXJuIGludCBwYXRoX3dhbGsoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmFtZWlkYXRhICop IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGludCBsaW5rX3BhdGhfd2Fsayhj b25zdCBjaGFyICosIHN0cnVjdCBuYW1laWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwpleHRlcm4gdm9pZCBwYXRoX3JlbGVhc2Uoc3RydWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJu IGludCBmb2xsb3dfZG93bihzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiopOwpl eHRlcm4gaW50IGZvbGxvd191cChzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiop OwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3Ry dWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9oYXNoKHN0 cnVjdCBxc3RyICosIHN0cnVjdCBkZW50cnkgKik7CgoKCmV4dGVybiB2b2lkIGlwdXQoc3RydWN0 IGlub2RlICopOwpleHRlcm4gdm9pZCBmb3JjZV9kZWxldGUoc3RydWN0IGlub2RlICopOwpleHRl cm4gc3RydWN0IGlub2RlICogaWdyYWIoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW5vX3QgaXVu aXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwoKdHlwZWRlZiBpbnQgKCpmaW5kX2lu b2RlX3QpKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwpleHRlcm4gc3Ry dWN0IGlub2RlICogaWdldDQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIGZp bmRfaW5vZGVfdCwgdm9pZCAqKTsKc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKmlnZXQoc3Ry dWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCnsKICAgICAgICByZXR1cm4g aWdldDQoc2IsIGlubywgKCh2b2lkICopMCksICgodm9pZCAqKTApKTsKfQoKZXh0ZXJuIHZvaWQg Y2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGlub2RlICogZ2V0X2Vt cHR5X2lub2RlKHZvaWQpOwoKc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKiBuZXdfaW5vZGUo c3RydWN0IHN1cGVyX2Jsb2NrICpzYikKewogICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBn ZXRfZW1wdHlfaW5vZGUoKTsKICAgICAgICBpZiAoaW5vZGUpIHsKICAgICAgICAgICAgICAgIGlu b2RlLT5pX3NiID0gc2I7CiAgICAgICAgICAgICAgICBpbm9kZS0+aV9kZXYgPSBzYi0+c19kZXY7 CiAgICAgICAgICAgICAgICBpbm9kZS0+aV9ibGtiaXRzID0gc2ItPnNfYmxvY2tzaXplX2JpdHM7 CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbm9kZTsKfQpleHRlcm4gdm9pZCByZW1vdmVfc3Vp ZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKCmV4dGVybiB2b2lkIGluc2VydF9pbm9kZV9oYXNoKHN0 cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX2hhc2goc3RydWN0IGlub2Rl ICopOwpleHRlcm4gc3RydWN0IGZpbGUgKiBnZXRfZW1wdHlfZmlscCh2b2lkKTsKZXh0ZXJuIHZv aWQgZmlsZV9tb3ZlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKZXh0 ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGdldF9oYXNoX3RhYmxlKGtkZXZfdCwgaW50LCBpbnQp OwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0YmxrKGtkZXZfdCwgaW50LCBpbnQpOwpl eHRlcm4gdm9pZCBsbF9yd19ibG9jayhpbnQsIGludCwgc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhb XSk7CmV4dGVybiB2b2lkIHN1Ym1pdF9iaChpbnQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKZXh0 ZXJuIGludCBpc19yZWFkX29ubHkoa2Rldl90KTsKZXh0ZXJuIHZvaWQgX19icmVsc2Uoc3RydWN0 IGJ1ZmZlcl9oZWFkICopOwpzdGF0aWMgaW5saW5lIHZvaWQgYnJlbHNlKHN0cnVjdCBidWZmZXJf aGVhZCAqYnVmKQp7CiAgICAgICAgaWYgKGJ1ZikKICAgICAgICAgICAgICAgIF9fYnJlbHNlKGJ1 Zik7Cn0KZXh0ZXJuIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKc3RhdGlj IGlubGluZSB2b2lkIGJmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpidWYpCnsKICAgICAgICBp ZiAoYnVmKQogICAgICAgICAgICAgICAgX19iZm9yZ2V0KGJ1Zik7Cn0KZXh0ZXJuIGludCBzZXRf YmxvY2tzaXplKGtkZXZfdCwgaW50KTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJyZWFk KGtkZXZfdCwgaW50LCBpbnQpOwpleHRlcm4gdm9pZCB3YWtldXBfYmRmbHVzaCh2b2lkKTsKCmV4 dGVybiBpbnQgYnJ3X3BhZ2UoaW50LCBzdHJ1Y3QgcGFnZSAqLCBrZGV2X3QsIGludCBbXSwgaW50 KTsKCnR5cGVkZWYgaW50IChnZXRfYmxvY2tfdCkoc3RydWN0IGlub2RlKixsb25nLHN0cnVjdCBi dWZmZXJfaGVhZCosaW50KTsKCgpleHRlcm4gaW50IGRpc2NhcmRfYmhfcGFnZShzdHJ1Y3QgcGFn ZSAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwoKCmV4dGVybiBpbnQgYmxvY2tfc3ltbGluayhzdHJ1 Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IGJsb2NrX3dyaXRlX2Z1 bGxfcGFnZShzdHJ1Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tfcmVh ZF9mdWxsX3BhZ2Uoc3RydWN0IHBhZ2UqLCBnZXRfYmxvY2tfdCopOwpleHRlcm4gaW50IGJsb2Nr X3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9j a190Kik7CmV4dGVybiBpbnQgY29udF9wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlKiwgdW5zaWdu ZWQsIHVuc2lnbmVkLCBnZXRfYmxvY2tfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyAqKTsKZXh0ZXJuIGludCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0 IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKZXh0ZXJuIGludCBibG9j a19zeW5jX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgppbnQgZ2VuZXJpY19ibG9ja19ibWFwKHN0cnVj dCBhZGRyZXNzX3NwYWNlICosIGxvbmcsIGdldF9ibG9ja190ICopOwppbnQgZ2VuZXJpY19jb21t aXRfd3JpdGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVk KTsKaW50IGJsb2NrX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90 LCBnZXRfYmxvY2tfdCAqKTsKZXh0ZXJuIHZvaWQgY3JlYXRlX2VtcHR5X2J1ZmZlcnMoc3RydWN0 IHBhZ2UgKiwga2Rldl90LCB1bnNpZ25lZCBsb25nKTsKCmV4dGVybiBpbnQgd2FpdGZvcl9vbmVf cGFnZShzdHJ1Y3QgcGFnZSopOwpleHRlcm4gaW50IGdlbmVyaWNfZmlsZV9tbWFwKHN0cnVjdCBm aWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBmaWxlX3JlYWRfYWN0 b3IocmVhZF9kZXNjcmlwdG9yX3QgKiBkZXNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQg bG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNf ZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVy biBzc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICos IHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gdm9pZCBkb19nZW5lcmljX2ZpbGVfcmVhZChzdHJ1 Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsK ZXh0ZXJuIGxvZmZfdCBub19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQs IGludCBvcmlnaW4pOwpleHRlcm4gbG9mZl90IGdlbmVyaWNfZmlsZV9sbHNlZWsoc3RydWN0IGZp bGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOwpleHRlcm4gc3NpemVfdCBnZW5l cmljX3JlYWRfZGlyKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4 dGVybiBpbnQgZ2VuZXJpY19maWxlX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBm aWxlICogZmlscCk7CgpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW5lcmljX3JvX2Zv cHM7CgpleHRlcm4gaW50IHZmc19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgaW50 LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHZmc19mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlk YXRhICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcGFnZV9yZWFkbGluayhzdHJ1Y3QgZGVu dHJ5ICosIGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBwYWdlX2ZvbGxvd19saW5rKHN0cnVjdCBk ZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRp b25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwoKZXh0ZXJuIGludCB2ZnNfcmVhZGRp cihzdHJ1Y3QgZmlsZSAqLCBmaWxsZGlyX3QsIHZvaWQgKik7CmV4dGVybiBpbnQgZGNhY2hlX3Jl YWRkaXIoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOwoKZXh0ZXJuIHN0cnVjdCBm aWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0 cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyKGtkZXZfdCk7CmV4dGVybiB2b2lkIGRyb3Bfc3Vw ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0YXRpYyBpbmxpbmUgaW50IGlzX21vdW50ZWQo a2Rldl90IGRldikKewogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBnZXRfc3VwZXIo ZGV2KTsKICAgICAgICBpZiAoc2IpIHsKICAgICAgICAgICAgICAgIGRyb3Bfc3VwZXIoc2IpOwog ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwp9CnVu c2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3RlcihrZGV2X3QsIGludCBiW10sIGludCk7CnVuc2ln bmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3Rlcl9zd2FiMzIoa2Rldl90LCBpbnQgYltdLCBpbnQpOwpl eHRlcm4ga2Rldl90IFJPT1RfREVWOwpleHRlcm4gY2hhciByb290X2RldmljZV9uYW1lW107CgoK ZXh0ZXJuIHZvaWQgc2hvd19idWZmZXJzKHZvaWQpOwpleHRlcm4gdm9pZCBtb3VudF9yb290KHZv aWQpOwoKCgoKCgpleHRlcm4gc3NpemVfdCBjaGFyX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciAq LCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgYmxvY2tfcmVhZChzdHJ1Y3QgZmls ZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gaW50IHJlYWRfYWhlYWRbXTsK CmV4dGVybiBzc2l6ZV90IGNoYXJfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBz aXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgYmxvY2tfd3JpdGUoc3RydWN0IGZpbGUg KiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKCmV4dGVybiBpbnQgZmlsZV9mc3lu YyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgZ2VuZXJp Y19idWZmZXJfZmRhdGFzeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgc3Rh cnRfaWR4LCB1bnNpZ25lZCBsb25nIGVuZF9pZHgpOwpleHRlcm4gaW50IGdlbmVyaWNfb3N5bmNf aW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CgoKCgpleHRlcm4gaW50IGlub2RlX2NoYW5nZV9v ayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwpleHRlcm4gaW50IGlub2RlX3NldGF0 dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKIyAxNDU4ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9ja19w YXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZGly ID0gZGdldChkZW50cnktPmRfcGFyZW50KTsKCiAgICAgICAgZG93bigmZGlyLT5kX2lub2RlLT5p X3NlbSk7CiAgICAgICAgcmV0dXJuIGRpcjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5 ICpnZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBkZ2V0 KGRlbnRyeS0+ZF9wYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2RpcihzdHJ1 Y3QgZGVudHJ5ICpkaXIpCnsKICAgICAgICB1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAg ICAgZHB1dChkaXIpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9kb3duKHN0cnVj dCBzZW1hcGhvcmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewogICAgICAgIGlmIChzMSAh PSBzMikgewogICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25l ZCBsb25nKSBzMikgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0 bXAgPSBzMjsKICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsgczEgPSB0bXA7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb3duKHMxKTsKICAgICAgICB9CiAgICAgICAg ZG93bihzMik7Cn0KIyAxNTAyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCB0cmlwbGVfZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqczMpCnsKICAgICAgICBpZiAo czEgIT0gczIpIHsKICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5z aWduZWQgbG9uZykgczIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBs b25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMykgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMzID0gczE7IHMxID0gdG1wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQg bG9uZykgczIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBo b3JlICp0bXAgPSBzMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHMxOyBz MSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNp Z25lZCBsb25nKSBzMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz ZW1hcGhvcmUgKnRtcCA9IHMzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0g czE7IHMxID0gdG1wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczIgPCAodW5zaWduZWQgbG9uZykgczMpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHMyOyBzMiA9IHRtcDsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZG93 bihzMSk7CiAgICAgICAgfSBlbHNlIGlmICgodW5zaWduZWQgbG9uZykgczIgPCAodW5zaWduZWQg bG9uZykgczMpIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwog ICAgICAgICAgICAgICAgczMgPSBzMjsgczIgPSB0bXA7CiAgICAgICAgfQogICAgICAgIGRvd24o czIpOwogICAgICAgIGRvd24oczMpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZG91YmxlX3VwKHN0 cnVjdCBzZW1hcGhvcmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewogICAgICAgIHVwKHMx KTsKICAgICAgICBpZiAoczEgIT0gczIpCiAgICAgICAgICAgICAgICB1cChzMik7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCB0cmlwbGVfdXAoc3RydWN0IHNlbWFwaG9yZSAqczEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqczMpCnsKICAgICAgICB1cChzMSk7CiAgICAg ICAgaWYgKHMxICE9IHMyKQogICAgICAgICAgICAgICAgdXAoczIpOwogICAgICAgIHVwKHMzKTsK fQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9sb2NrKHN0cnVjdCBkZW50cnkgKmQxLCBzdHJ1 Y3QgZGVudHJ5ICpkMikKewogICAgICAgIGRvdWJsZV9kb3duKCZkMS0+ZF9pbm9kZS0+aV9zZW0s ICZkMi0+ZF9pbm9kZS0+aV9zZW0pOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZG91YmxlX3VubG9j ayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0IGRlbnRyeSAqZDIpCnsKICAgICAgICBkb3VibGVf dXAoJmQxLT5kX2lub2RlLT5pX3NlbSwmZDItPmRfaW5vZGUtPmlfc2VtKTsKICAgICAgICBkcHV0 KGQxKTsKICAgICAgICBkcHV0KGQyKTsKfQojIDE4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2NhcGFiaWxpdHkuaCIgMgojIDMyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Nh cGFiaWxpdHkuaCIKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKICAg ICAgICBfX3UzMiB2ZXJzaW9uOwogICAgICAgIGludCBwaWQ7Cn0gKmNhcF91c2VyX2hlYWRlcl90 OwoKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCB7CiAgICAgICAgX191MzIg ZWZmZWN0aXZlOwogICAgICAgIF9fdTMyIHBlcm1pdHRlZDsKICAgICAgICBfX3UzMiBpbmhlcml0 YWJsZTsKfSAqY2FwX3VzZXJfZGF0YV90OwojIDU1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRlZiBfX3UzMiBrZXJuZWxfY2FwX3Q7CiMgMjg0ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKZXh0ZXJuIGtlcm5lbF9jYXBf dCBjYXBfYnNldDsKIyAzMTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0 eS5oIgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfY29tYmluZShrZXJuZWxfY2FwX3Qg YSwga2VybmVsX2NhcF90IGIpCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVzdCkg PSAoYSkgfCAoYik7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KCnN0YXRpYyBpbmxpbmUga2VybmVsX2Nh cF90IGNhcF9pbnRlcnNlY3Qoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAgICAg a2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3QpID0gKGEpICYgKGIpOwogICAgIHJldHVybiBk ZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfZHJvcChrZXJuZWxfY2FwX3Qg YSwga2VybmVsX2NhcF90IGRyb3ApCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVz dCkgPSAoYSkgJiB+KGRyb3ApOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtl cm5lbF9jYXBfdCBjYXBfaW52ZXJ0KGtlcm5lbF9jYXBfdCBjKQp7CiAgICAga2VybmVsX2NhcF90 IGRlc3Q7CiAgICAgKGRlc3QpID0gfihjKTsKICAgICByZXR1cm4gZGVzdDsKfQojIDYgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYmluZm10cy5oIiAyCiMgMjIgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvYmluZm10cy5oIgpzdHJ1Y3QgbGludXhfYmlucHJtewogICAgICAgIGNo YXIgYnVmWzEyOF07CiAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2VbMzJdOwogICAgICAgIHVuc2ln bmVkIGxvbmcgcDsKICAgICAgICBpbnQgc2hfYmFuZzsKICAgICAgICBzdHJ1Y3QgZmlsZSAqIGZp bGU7CiAgICAgICAgaW50IGVfdWlkLCBlX2dpZDsKICAgICAgICBrZXJuZWxfY2FwX3QgY2FwX2lu aGVyaXRhYmxlLCBjYXBfcGVybWl0dGVkLCBjYXBfZWZmZWN0aXZlOwogICAgICAgIGludCBhcmdj LCBlbnZjOwogICAgICAgIGNoYXIgKiBmaWxlbmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxv YWRlciwgZXhlYzsKfTsKCgoKCgpzdHJ1Y3QgbGludXhfYmluZm10IHsKICAgICAgICBzdHJ1Y3Qg bGludXhfYmluZm10ICogbmV4dDsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAgICAg ICAgaW50ICgqbG9hZF9iaW5hcnkpKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IHB0X3Jl Z3MgKiByZWdzKTsKICAgICAgICBpbnQgKCpsb2FkX3NobGliKShzdHJ1Y3QgZmlsZSAqKTsKICAg ICAgICBpbnQgKCpjb3JlX2R1bXApKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICogcmVncywg c3RydWN0IGZpbGUgKiBmaWxlKTsKICAgICAgICB1bnNpZ25lZCBsb25nIG1pbl9jb3JlZHVtcDsK fTsKCmV4dGVybiBpbnQgcmVnaXN0ZXJfYmluZm10KHN0cnVjdCBsaW51eF9iaW5mbXQgKik7CmV4 dGVybiBpbnQgdW5yZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKCmV4dGVy biBpbnQgcHJlcGFyZV9iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIHZvaWQg cmVtb3ZlX2FyZ196ZXJvKHN0cnVjdCBsaW51eF9iaW5wcm0gKik7CmV4dGVybiBpbnQgc2VhcmNo X2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKixzdHJ1Y3QgcHRfcmVncyAqKTsK ZXh0ZXJuIGludCBmbHVzaF9vbGRfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSk7CmV4 dGVybiBpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0 ZXJuIGludCBjb3B5X3N0cmluZ3MoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9i aW5wcm0gKmJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsY2hh ciAqKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwpleHRlcm4gdm9pZCBjb21wdXRl X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJpbnBybSk7CmV4dGVybiBpbnQgZG9fY29yZWR1 bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKZXh0ZXJuIHZvaWQgc2V0X2Jp bmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICpuZXcpOwojIDEwICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Ro cmVhZHMuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTIgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWVzLmgiIDEK CgoKc3RydWN0IHRtcyB7CiAgICAgICAgY2xvY2tfdCB0bXNfdXRpbWU7CiAgICAgICAgY2xvY2tf dCB0bXNfc3RpbWU7CiAgICAgICAgY2xvY2tfdCB0bXNfY3V0aW1lOwogICAgICAgIGNsb2NrX3Qg dG1zX2NzdGltZTsKfTsKIyAxNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1leC5oIiAxCiMgNTQgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZXguaCIKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv dGltZXguaCIgMgojIDE1MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1leC5oIgoj IDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3RpbWV4LmgiIDEKIyA5ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdGltZXguaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL21zci5oIiAxCiMgMTEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3RpbWV4LmgiIDIKIyAzMiAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vdGltZXguaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CgpleHRl cm4gY3ljbGVzX3QgY2FjaGVmbHVzaF90aW1lOwoKc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRf Y3ljbGVzICh2b2lkKQp7CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHJldDsKCiAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHJldCkpOwogICAgICAgIHJl dHVybiByZXQ7Cgp9CgpleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfa2h6OwojIDE1MyAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC90aW1leC5oIiAyCiMgMTYxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3RpbWV4LmgiCnN0cnVjdCB0aW1leCB7CiAgICAgICAgdW5zaWduZWQgaW50 IG1vZGVzOwogICAgICAgIGxvbmcgb2Zmc2V0OwogICAgICAgIGxvbmcgZnJlcTsKICAgICAgICBs b25nIG1heGVycm9yOwogICAgICAgIGxvbmcgZXN0ZXJyb3I7CiAgICAgICAgaW50IHN0YXR1czsK ICAgICAgICBsb25nIGNvbnN0YW50OwogICAgICAgIGxvbmcgcHJlY2lzaW9uOwogICAgICAgIGxv bmcgdG9sZXJhbmNlOwoKCiAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZTsKICAgICAgICBsb25n IHRpY2s7CgogICAgICAgIGxvbmcgcHBzZnJlcTsKICAgICAgICBsb25nIGppdHRlcjsKICAgICAg ICBpbnQgc2hpZnQ7CiAgICAgICAgbG9uZyBzdGFiaWw7CiAgICAgICAgbG9uZyBqaXRjbnQ7CiAg ICAgICAgbG9uZyBjYWxjbnQ7CiAgICAgICAgbG9uZyBlcnJjbnQ7CiAgICAgICAgbG9uZyBzdGJj bnQ7CgogICAgICAgIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CiAgICAgICAg aW50IDozMjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKICAgICAgICBpbnQgOjMyOyBpbnQg OjMyOyBpbnQgOjMyOyBpbnQgOjMyOwp9OwojIDI1MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC90aW1leC5oIgpleHRlcm4gbG9uZyB0aWNrOwpleHRlcm4gaW50IHRpY2thZGo7CgoKCgpl eHRlcm4gaW50IHRpbWVfc3RhdGU7CmV4dGVybiBpbnQgdGltZV9zdGF0dXM7CmV4dGVybiBsb25n IHRpbWVfb2Zmc2V0OwpleHRlcm4gbG9uZyB0aW1lX2NvbnN0YW50OwpleHRlcm4gbG9uZyB0aW1l X3RvbGVyYW5jZTsKZXh0ZXJuIGxvbmcgdGltZV9wcmVjaXNpb247CmV4dGVybiBsb25nIHRpbWVf bWF4ZXJyb3I7CmV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CgpleHRlcm4gbG9uZyB0aW1lX3Bo YXNlOwpleHRlcm4gbG9uZyB0aW1lX2ZyZXE7CmV4dGVybiBsb25nIHRpbWVfYWRqOwpleHRlcm4g bG9uZyB0aW1lX3JlZnRpbWU7CgpleHRlcm4gbG9uZyB0aW1lX2FkanVzdDsKCgpleHRlcm4gbG9u ZyBwcHNfb2Zmc2V0OwpleHRlcm4gbG9uZyBwcHNfaml0dGVyOwpleHRlcm4gbG9uZyBwcHNfZnJl cTsKZXh0ZXJuIGxvbmcgcHBzX3N0YWJpbDsKZXh0ZXJuIGxvbmcgcHBzX3ZhbGlkOwoKCmV4dGVy biBpbnQgcHBzX3NoaWZ0OwpleHRlcm4gbG9uZyBwcHNfaml0Y250OwpleHRlcm4gbG9uZyBwcHNf Y2FsY250OwpleHRlcm4gbG9uZyBwcHNfZXJyY250OwpleHRlcm4gbG9uZyBwcHNfc3RiY250Owoj IDE1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIiAxCiMgOTcgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvcmJ0cmVlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9r ZXJuZWwuaCIgMQojIDk4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDk5ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIiAyCgp0eXBlZGVmIHN0cnVjdCByYl9u b2RlX3MKewogICAgICAgIHN0cnVjdCByYl9ub2RlX3MgKiByYl9wYXJlbnQ7CiAgICAgICAgaW50 IHJiX2NvbG9yOwoKCiAgICAgICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX3JpZ2h0OwogICAgICAg IHN0cnVjdCByYl9ub2RlX3MgKiByYl9sZWZ0Owp9CnJiX25vZGVfdDsKCnR5cGVkZWYgc3RydWN0 IHJiX3Jvb3Rfcwp7CiAgICAgICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX25vZGU7Cn0KcmJfcm9v dF90OwoKCgoKCmV4dGVybiB2b2lkIHJiX2luc2VydF9jb2xvcihyYl9ub2RlX3QgKiwgcmJfcm9v dF90ICopOwpleHRlcm4gdm9pZCByYl9lcmFzZShyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwoK c3RhdGljIGlubGluZSB2b2lkIHJiX2xpbmtfbm9kZShyYl9ub2RlX3QgKiBub2RlLCByYl9ub2Rl X3QgKiBwYXJlbnQsIHJiX25vZGVfdCAqKiByYl9saW5rKQp7CiAgICAgICAgbm9kZS0+cmJfcGFy ZW50ID0gcGFyZW50OwogICAgICAgIG5vZGUtPnJiX2NvbG9yID0gMDsKICAgICAgICBub2RlLT5y Yl9sZWZ0ID0gbm9kZS0+cmJfcmlnaHQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgKnJiX2xpbmsg PSBub2RlOwp9CiMgMTYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoK IyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMQojIDE4ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2FzbS9zZW1hcGhvcmUuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAy MCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vbW11Lmgi IDEKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB2b2lkICpzZWdtZW50czsKICAgICAg ICB1bnNpZ25lZCBsb25nIGNwdXZhbGlkOwp9IG1tX2NvbnRleHRfdDsKIyAyMiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvc21wLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NtcC5o IgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbXAuaCIgMgojIDI0ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3R0eS5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5LmgiCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDIwICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9mcy5oIiAxCiMgMjEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21ham9yLmgiIDEKIyAxNzcgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWFqb3IuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHNj c2lfYmxrX21ham9yKGludCBtKSB7CiAgICAgICAgcmV0dXJuICgoKG0pID09IDggfHwgKChtKSA+ PSA2NSAmJiAobSkgPD0gNzEpKSB8fCAobSkgPT0gMTEpOwp9CiMgMTkwICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L21ham9yLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBpZGVfYmxrX21h am9yKGludCBtKQp7CiAgICAgICAgcmV0dXJuICgobSkgPT0gMyB8fCAobSkgPT0gMjIgfHwgKG0p ID09IDMzIHx8IChtKSA9PSAzNCB8fCAobSkgPT0gNTYgfHwgKG0pID09IDU3IHx8IChtKSA9PSA4 OCB8fCAobSkgPT0gODkgfHwgKG0pID09IDkwIHx8IChtKSA9PSA5MSk7Cn0KIyAyMiAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvdGVybWlvcy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90ZXJtaW9zLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiIDEKCgoKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9hc20vdGVybWJpdHMuaCIgMgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNjX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHNwZWVkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHRjZmxhZ190 OwoKCnN0cnVjdCB0ZXJtaW9zIHsKICAgICAgICB0Y2ZsYWdfdCBjX2lmbGFnOwogICAgICAgIHRj ZmxhZ190IGNfb2ZsYWc7CiAgICAgICAgdGNmbGFnX3QgY19jZmxhZzsKICAgICAgICB0Y2ZsYWdf dCBjX2xmbGFnOwogICAgICAgIGNjX3QgY19saW5lOwogICAgICAgIGNjX3QgY19jY1sxOV07Cn07 CiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2FzbS9pb2N0bC5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vaW9j dGxzLmgiIDIKIyA2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiIDIKCnN0 cnVjdCB3aW5zaXplIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB3c19yb3c7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgd3NfY29sOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cn07CgoKc3RydWN0IHRlcm1pbyB7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgY19pZmxhZzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjX29mbGFn OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg Y19sZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNfbGluZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIGNfY2NbOF07Cn07CiMgNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90ZXJtaW9z LmgiIDIKIyAyMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdHR5X2RyaXZlci5oIiAxCiMgMTE4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R0 eV9kcml2ZXIuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyAx MTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIiAyCgpzdHJ1Y3Qg dHR5X2RyaXZlciB7CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGNvbnN0IGNoYXIgKmRyaXZl cl9uYW1lOwogICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgaW50IG5hbWVfYmFzZTsK ICAgICAgICBzaG9ydCBtYWpvcjsKICAgICAgICBzaG9ydCBtaW5vcl9zdGFydDsKICAgICAgICBz aG9ydCBudW07CiAgICAgICAgc2hvcnQgdHlwZTsKICAgICAgICBzaG9ydCBzdWJ0eXBlOwogICAg ICAgIHN0cnVjdCB0ZXJtaW9zIGluaXRfdGVybWlvczsKICAgICAgICBpbnQgZmxhZ3M7CiAgICAg ICAgaW50ICpyZWZjb3VudDsKICAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50 cnk7CiAgICAgICAgc3RydWN0IHR0eV9kcml2ZXIgKm90aGVyOwoKCgoKICAgICAgICBzdHJ1Y3Qg dHR5X3N0cnVjdCAqKnRhYmxlOwogICAgICAgIHN0cnVjdCB0ZXJtaW9zICoqdGVybWlvczsKICAg ICAgICBzdHJ1Y3QgdGVybWlvcyAqKnRlcm1pb3NfbG9ja2VkOwogICAgICAgIHZvaWQgKmRyaXZl cl9zdGF0ZTsKCgoKCgogICAgICAgIGludCAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5 LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogICAgICAgIHZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9z dHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAgICAgICAgaW50ICgqd3JpdGUpKHN0 cnVjdCB0dHlfc3RydWN0ICogdHR5LCBpbnQgZnJvbV91c2VyLAogICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogICAgICAgIHZvaWQgKCpw dXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CiAgICAg ICAgdm9pZCAoKmZsdXNoX2NoYXJzKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBp bnQgKCp3cml0ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBpbnQgKCpj aGFyc19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIGludCAoKmlv Y3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogICAgICAg IHZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1p b3MgKiBvbGQpOwogICAgICAgIHZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0 dHkpOwogICAgICAgIHZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7 CiAgICAgICAgdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZv aWQgKCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKmhhbmd1 cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKmJyZWFrX2N0bCkoc3Ry dWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKTsKICAgICAgICB2b2lkICgqZmx1c2hfYnVm ZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqc2V0X2xkaXNjKShz dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqd2FpdF91bnRpbF9zZW50KShz dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CiAgICAgICAgdm9pZCAoKnNlbmRf eGNoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogICAgICAgIGludCAoKnJl YWRfcHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiAgICAgICAg aW50ICgqd3JpdGVfcHJvYykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRh KTsKCgoKCiAgICAgICAgc3RydWN0IHR0eV9kcml2ZXIgKm5leHQ7CiAgICAgICAgc3RydWN0IHR0 eV9kcml2ZXIgKnByZXY7Cn07CiMgMjUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5 LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAxCiMg MTAwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMQojIDEwMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC90dHlfbGRpc2MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvd2FpdC5oIiAxCiMgMTAyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eV9sZGlz Yy5oIiAyCgpzdHJ1Y3QgdHR5X2xkaXNjIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgY2hh ciAqbmFtZTsKICAgICAgICBpbnQgbnVtOwogICAgICAgIGludCBmbGFnczsKCgoKICAgICAgICBp bnQgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAgICB2b2lkICgqY2xvc2UpKHN0 cnVjdCB0dHlfc3RydWN0ICopOwogICAgICAgIHZvaWQgKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0 dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHNzaXplX3QgKCpjaGFyc19pbl9idWZmZXIpKHN0cnVj dCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHNzaXplX3QgKCpyZWFkKShzdHJ1Y3QgdHR5X3N0 cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICogYnVmLCBzaXplX3QgbnIpOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSko c3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBucik7CiAgICAg ICAgaW50ICgqaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZp bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBs b25nIGFyZyk7CiAgICAgICAgdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CiAgICAgICAgdW5zaWduZWQgaW50ICgqcG9sbCko c3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CgoKCgogICAgICAgIHZvaWQgKCpy ZWNlaXZlX2J1Zikoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3As CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKICAg ICAgICBpbnQgKCpyZWNlaXZlX3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICopOwogICAgICAgIHZv aWQgKCp3cml0ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwp9OwojIDI2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL3N5c3RlbS5oIiAxCiMgMjggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5 LmgiIDIKIyA1OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0IHNj cmVlbl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdfeDsKICAgICAgICB1bnNpZ25l ZCBjaGFyIG9yaWdfeTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkb250dXNlMTsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBvcmlnX3ZpZGVvX3BhZ2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmln X3ZpZGVvX21vZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmlnX3ZpZGVvX2NvbHM7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgdW51c2VkMjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBvcmlnX3Zp ZGVvX2VnYV9ieDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB1bnVzZWQzOwogICAgICAgIHVuc2ln bmVkIGNoYXIgb3JpZ192aWRlb19saW5lczsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdfdmlk ZW9faXNWR0E7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgb3JpZ192aWRlb19wb2ludHM7CgoKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBsZmJfd2lkdGg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbGZi X2hlaWdodDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZmJfZGVwdGg7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBsZmJfYmFzZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxmYl9zaXplOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGRvbnR1c2UyLCBkb250dXNlMzsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBsZmJfbGluZWxlbmd0aDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZF9zaXplOwogICAgICAg IHVuc2lnbmVkIGNoYXIgcmVkX3BvczsKICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuX3NpemU7 CiAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbl9wb3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBi bHVlX3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciBibHVlX3BvczsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHJzdmRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJzdmRfcG9zOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHZlc2FwbV9zZWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVzYXBt X29mZjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWdlczsKCn07CgpleHRlcm4gc3RydWN0IHNj cmVlbl9pbmZvIHNjcmVlbl9pbmZvOwojIDEzOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC90dHkuaCIKc3RydWN0IHR0eV9mbGlwX2J1ZmZlciB7CiAgICAgICAgc3RydWN0IHRxX3N0cnVj dCB0cXVldWU7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBwdHlfc2VtOwogICAgICAgIGNoYXIg KmNoYXJfYnVmX3B0cjsKICAgICAgICB1bnNpZ25lZCBjaGFyICpmbGFnX2J1Zl9wdHI7CiAgICAg ICAgaW50IGNvdW50OwogICAgICAgIGludCBidWZfbnVtOwogICAgICAgIHVuc2lnbmVkIGNoYXIg Y2hhcl9idWZbMio1MTJdOwogICAgICAgIGNoYXIgZmxhZ19idWZbMio1MTJdOwogICAgICAgIHVu c2lnbmVkIGNoYXIgc2xvcFs0XTsKfTsKIyAyNTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdHR5LmgiCnN0cnVjdCB0dHlfc3RydWN0IHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAg c3RydWN0IHR0eV9kcml2ZXIgZHJpdmVyOwogICAgICAgIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2M7 CiAgICAgICAgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsICp0ZXJtaW9zX2xvY2tlZDsKICAgICAg ICBpbnQgcGdycDsKICAgICAgICBpbnQgc2Vzc2lvbjsKICAgICAgICBrZGV2X3QgZGV2aWNlOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgaW50IGNvdW50OwogICAgICAgIHN0 cnVjdCB3aW5zaXplIHdpbnNpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzdG9wcGVkOjEsIGh3 X3N0b3BwZWQ6MSwgZmxvd19zdG9wcGVkOjEsIHBhY2tldDoxOwogICAgICAgIHVuc2lnbmVkIGNo YXIgbG93X2xhdGVuY3k6MSwgd2FybmVkOjE7CiAgICAgICAgdW5zaWduZWQgY2hhciBjdHJsX3N0 YXR1czsKCiAgICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKmxpbms7CiAgICAgICAgc3RydWN0IGZh c3luY19zdHJ1Y3QgKmZhc3luYzsKICAgICAgICBzdHJ1Y3QgdHR5X2ZsaXBfYnVmZmVyIGZsaXA7 CiAgICAgICAgaW50IG1heF9mbGlwX2NudDsKICAgICAgICBpbnQgYWx0X3NwZWVkOwogICAgICAg IHdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qg cmVhZF93YWl0OwogICAgICAgIHN0cnVjdCB0cV9zdHJ1Y3QgdHFfaGFuZ3VwOwogICAgICAgIHZv aWQgKmRpc2NfZGF0YTsKICAgICAgICB2b2lkICpkcml2ZXJfZGF0YTsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIHR0eV9maWxlczsKCgoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IGNvbHVtbjsK ICAgICAgICB1bnNpZ25lZCBjaGFyIGxuZXh0OjEsIGVyYXNpbmc6MSwgcmF3OjEsIHJlYWxfcmF3 OjEsIGljYW5vbjoxOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY2xvc2luZzoxOwogICAgICAgIHVu c2lnbmVkIHNob3J0IG1pbmltdW1fdG9fd2FrZTsKICAgICAgICB1bnNpZ25lZCBvdmVycnVuX3Rp bWU7CiAgICAgICAgaW50IG51bV9vdmVycnVuOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvY2Vz c19jaGFyX21hcFsyNTYvKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CiAgICAgICAgY2hhciAq cmVhZF9idWY7CiAgICAgICAgaW50IHJlYWRfaGVhZDsKICAgICAgICBpbnQgcmVhZF90YWlsOwog ICAgICAgIGludCByZWFkX2NudDsKICAgICAgICB1bnNpZ25lZCBsb25nIHJlYWRfZmxhZ3NbNDA5 Ni8oOCpzaXplb2YodW5zaWduZWQgbG9uZykpXTsKICAgICAgICBpbnQgY2Fub25fZGF0YTsKICAg ICAgICB1bnNpZ25lZCBsb25nIGNhbm9uX2hlYWQ7CiAgICAgICAgdW5zaWduZWQgaW50IGNhbm9u X2NvbHVtbjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGF0b21pY19yZWFkOwogICAgICAgIHN0 cnVjdCBzZW1hcGhvcmUgYXRvbWljX3dyaXRlOwogICAgICAgIHNwaW5sb2NrX3QgcmVhZF9sb2Nr OwoKICAgICAgICBzdHJ1Y3QgdHFfc3RydWN0IFNBS190cTsKfTsKIyAzNDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvdHR5LmgiCmV4dGVybiB2b2lkIHR0eV93cml0ZV9mbHVzaChzdHJ1 Y3QgdHR5X3N0cnVjdCAqKTsKCmV4dGVybiBzdHJ1Y3QgdGVybWlvcyB0dHlfc3RkX3Rlcm1pb3M7 CmV4dGVybiBzdHJ1Y3QgdHR5X3N0cnVjdCAqIHJlZGlyZWN0OwpleHRlcm4gc3RydWN0IHR0eV9s ZGlzYyBsZGlzY3NbXTsKZXh0ZXJuIGludCBmZ19jb25zb2xlLCBsYXN0X2NvbnNvbGUsIHdhbnRf Y29uc29sZTsKCmV4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKCmV4dGVybiB2b2lkIGNvbl9pbml0 KHZvaWQpOwpleHRlcm4gdm9pZCBjb25zb2xlX2luaXQodm9pZCk7CgpleHRlcm4gaW50IGxwX2lu aXQodm9pZCk7CmV4dGVybiBpbnQgcHR5X2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHR0eV9pbml0 KHZvaWQpOwpleHRlcm4gaW50IG14c2VyX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbW94YV9pbml0 KHZvaWQpOwpleHRlcm4gaW50IGlwMl9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBjeGVfaW5pdCh2 b2lkKTsKZXh0ZXJuIGludCBwY19pbml0KHZvaWQpOwpleHRlcm4gaW50IHZjc19pbml0KHZvaWQp OwpleHRlcm4gaW50IHJwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgY3lfaW5pdCh2b2lkKTsKZXh0 ZXJuIGludCBzdGxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzdGxpX2luaXQodm9pZCk7CmV4dGVy biBpbnQgc3BlY2lhbGl4X2luaXQodm9pZCk7CmV4dGVybiBpbnQgZXNwc2VyaWFsX2luaXQodm9p ZCk7CmV4dGVybiBpbnQgbWFjc2VyaWFsX2luaXQodm9pZCk7CmV4dGVybiBpbnQgYTIyMzJib2Fy ZF9pbml0KHZvaWQpOwoKZXh0ZXJuIGludCB0dHlfcGFyYW5vaWFfY2hlY2soc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSwga2Rldl90IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqcm91dGluZSk7CmV4dGVybiBjaGFyICp0dHlfbmFtZShzdHJ1Y3QgdHR5X3N0 cnVjdCAqdHR5LCBjaGFyICpidWYpOwpleHRlcm4gdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50KHN0 cnVjdCB0dHlfc3RydWN0ICogdHR5LCBsb25nIHRpbWVvdXQpOwpleHRlcm4gaW50IHR0eV9jaGVj a19jaGFuZ2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCBzdG9wX3R0eShz dHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0YXJ0X3R0eShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSk7CmV4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2xkaXNjKGludCBkaXNjLCBz dHJ1Y3QgdHR5X2xkaXNjICpuZXdfbGRpc2MpOwpleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9kcml2 ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiBpbnQgdHR5X3VucmVnaXN0ZXJf ZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpOwpleHRlcm4gdm9pZCB0dHlfcmVnaXN0 ZXJfZGV2ZnMgKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHVuc2lnbmVkIGludCBmbGFncywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vcik7CmV4dGVybiB2 b2lkIHR0eV91bnJlZ2lzdGVyX2RldmZzIChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCB1bnNp Z25lZCBtaW5vcik7CmV4dGVybiBpbnQgdHR5X3JlYWRfcmF3X2RhdGEoc3RydWN0IHR0eV9zdHJ1 Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqYnVmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgYnVmbGVuKTsKZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX21lc3NhZ2Uoc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSwgY2hhciAqbXNnKTsKCmV4dGVybiBpbnQgaXNfb3JwaGFuZWRfcGdycChpbnQg cGdycCk7CmV4dGVybiBpbnQgaXNfaWdub3JlZChpbnQgc2lnKTsKZXh0ZXJuIGludCB0dHlfc2ln bmFsKGludCBzaWcsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpleHRlcm4gdm9pZCB0dHlfaGFu Z3VwKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXAoc3Ry dWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCB0dHlfdW5oYW5ndXAoc3RydWN0IGZp bGUgKmZpbHApOwpleHRlcm4gaW50IHR0eV9odW5nX3VwX3Aoc3RydWN0IGZpbGUgKiBmaWxwKTsK ZXh0ZXJuIHZvaWQgZG9fU0FLKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpleHRlcm4gdm9pZCBk aXNhc3NvY2lhdGVfY3R0eShpbnQgcHJpdik7CmV4dGVybiB2b2lkIHR0eV9mbGlwX2J1ZmZlcl9w dXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpleHRlcm4gaW50IHR0eV9nZXRfYmF1ZF9yYXRl KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoKCmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9s ZGlzY19OX1RUWTsKCgpleHRlcm4gaW50IG5fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICog dHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwoKCgpleHRlcm4gdm9pZCBzZXJpYWxfY29uc29s ZV9pbml0KHZvaWQpOwoKCgpleHRlcm4gaW50IHBjeGVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CgoKCmV4dGVybiB2b2lkIGNvbnNvbGVfcHJpbnQoY29u c3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5 LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNt ZCwgdW5zaWduZWQgbG9uZyBhcmcpOwojIDI1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NlbS5oIiAxCgoK CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcGMuaCIgMQoKCgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvaXBjLmgiIDIKCgoKCnN0cnVjdCBpcGNfcGVybQp7CiAgICAgICAgX19rZXJu ZWxfa2V5X3Qga2V5OwogICAgICAgIF9fa2VybmVsX3VpZF90IHVpZDsKICAgICAgICBfX2tlcm5l bF9naWRfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgY3VpZDsKICAgICAgICBfX2tlcm5l bF9naWRfdCBjZ2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBtb2RlOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHNlcTsKfTsKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lwY2J1 Zi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lwY2J1Zi5oIgpzdHJ1Y3Qg aXBjNjRfcGVybQp7CiAgICAgICAgX19rZXJuZWxfa2V5X3Qga2V5OwogICAgICAgIF9fa2VybmVs X3VpZDMyX3QgdWlkOwogICAgICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOwogICAgICAgIF9fa2Vy bmVsX3VpZDMyX3QgY3VpZDsKICAgICAgICBfX2tlcm5lbF9naWQzMl90IGNnaWQ7CiAgICAgICAg X19rZXJuZWxfbW9kZV90IG1vZGU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgX19wYWQxOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHNlcTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3Vu dXNlZDI7Cn07CiMgMjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaXBjLmgiIDIKIyA1 NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcGMuaCIKc3RydWN0IGtlcm5faXBjX3Bl cm0KewogICAgICAgIGtleV90IGtleTsKICAgICAgICB1aWRfdCB1aWQ7CiAgICAgICAgZ2lkX3Qg Z2lkOwogICAgICAgIHVpZF90IGN1aWQ7CiAgICAgICAgZ2lkX3QgY2dpZDsKICAgICAgICBtb2Rl X3QgbW9kZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcTsKfTsKIyA1ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2xpbnV4L3NlbS5oIiAyCiMgMjMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvc2VtLmgiCnN0cnVjdCBzZW1pZF9kcyB7CiAgICAgICAgc3RydWN0IGlwY19wZXJtIHNlbV9w ZXJtOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAgX19rZXJuZWxf dGltZV90IHNlbV9jdGltZTsKICAgICAgICBzdHJ1Y3Qgc2VtICpzZW1fYmFzZTsKICAgICAgICBz dHJ1Y3Qgc2VtX3F1ZXVlICpzZW1fcGVuZGluZzsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICoq c2VtX3BlbmRpbmdfbGFzdDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKnVuZG87CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc2VtX25zZW1zOwp9OwoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9hc20vc2VtYnVmLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYnVm LmgiCnN0cnVjdCBzZW1pZDY0X2RzIHsKICAgICAgICBzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVy bTsKICAgICAgICBfX2tlcm5lbF90aW1lX3Qgc2VtX290aW1lOwogICAgICAgIHVuc2lnbmVkIGxv bmcgX191bnVzZWQxOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZW1fbnNlbXM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBf X3VudXNlZDQ7Cn07CiMgMzYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2VtLmgiIDIK CgpzdHJ1Y3Qgc2VtYnVmIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZW1fbnVtOwogICAgICAg IHNob3J0IHNlbV9vcDsKICAgICAgICBzaG9ydCBzZW1fZmxnOwp9OwoKCnVuaW9uIHNlbXVuIHsK ICAgICAgICBpbnQgdmFsOwogICAgICAgIHN0cnVjdCBzZW1pZF9kcyAqYnVmOwogICAgICAgIHVu c2lnbmVkIHNob3J0ICphcnJheTsKICAgICAgICBzdHJ1Y3Qgc2VtaW5mbyAqX19idWY7CiAgICAg ICAgdm9pZCAqX19wYWQ7Cn07CgpzdHJ1Y3Qgc2VtaW5mbyB7CiAgICAgICAgaW50IHNlbW1hcDsK ICAgICAgICBpbnQgc2VtbW5pOwogICAgICAgIGludCBzZW1tbnM7CiAgICAgICAgaW50IHNlbW1u dTsKICAgICAgICBpbnQgc2VtbXNsOwogICAgICAgIGludCBzZW1vcG07CiAgICAgICAgaW50IHNl bXVtZTsKICAgICAgICBpbnQgc2VtdXN6OwogICAgICAgIGludCBzZW12bXg7CiAgICAgICAgaW50 IHNlbWFlbTsKfTsKIyA4MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zZW0uaCIKc3Ry dWN0IHNlbSB7CiAgICAgICAgaW50IHNlbXZhbDsKICAgICAgICBpbnQgc2VtcGlkOwp9OwoKCnN0 cnVjdCBzZW1fYXJyYXkgewogICAgICAgIHN0cnVjdCBrZXJuX2lwY19wZXJtIHNlbV9wZXJtOwog ICAgICAgIHRpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAgdGltZV90IHNlbV9jdGltZTsKICAgICAg ICBzdHJ1Y3Qgc2VtICpzZW1fYmFzZTsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICpzZW1fcGVu ZGluZzsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICoqc2VtX3BlbmRpbmdfbGFzdDsKICAgICAg ICBzdHJ1Y3Qgc2VtX3VuZG8gKnVuZG87CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZW1fbnNlbXM7 Cn07CgoKc3RydWN0IHNlbV9xdWV1ZSB7CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqIG5leHQ7 CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqKiBwcmV2OwogICAgICAgIHN0cnVjdCB0YXNrX3N0 cnVjdCogc2xlZXBlcjsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiB1bmRvOwogICAgICAgIGlu dCBwaWQ7CiAgICAgICAgaW50IHN0YXR1czsKICAgICAgICBzdHJ1Y3Qgc2VtX2FycmF5ICogc21h OwogICAgICAgIGludCBpZDsKICAgICAgICBzdHJ1Y3Qgc2VtYnVmICogc29wczsKICAgICAgICBp bnQgbnNvcHM7CiAgICAgICAgaW50IGFsdGVyOwp9OwoKCgoKc3RydWN0IHNlbV91bmRvIHsKICAg ICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiBwcm9jX25leHQ7CiAgICAgICAgc3RydWN0IHNlbV91bmRv ICogaWRfbmV4dDsKICAgICAgICBpbnQgc2VtaWQ7CiAgICAgICAgc2hvcnQgKiBzZW1hZGo7Cn07 CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NlbWdldCAoa2V5X3Qga2V5 LCBpbnQgbnNlbXMsIGludCBzZW1mbGcpOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxv bmcgc3lzX3NlbW9wIChpbnQgc2VtaWQsIHN0cnVjdCBzZW1idWYgKnNvcHMsIHVuc2lnbmVkIG5z b3BzKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zZW1jdGwgKGludCBz ZW1pZCwgaW50IHNlbW51bSwgaW50IGNtZCwgdW5pb24gc2VtdW4gYXJnKTsKIyAyNiAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9zaWduYWwuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L3NpZ25hbC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5o IiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2lnbmFsLmgiIDIKCgpzdHJ1Y3Qg c2lnaW5mbzsKIyAxNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2lnbmFsLmgiCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzaWdbKDY0IC8gMzIpXTsKfSBzaWdzZXRfdDsKIyAxMjkgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgp0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJf dCkoaW50KTsKCgoKCgoKc3RydWN0IG9sZF9zaWdhY3Rpb24gewogICAgICAgIF9fc2lnaGFuZGxl cl90IHNhX2hhbmRsZXI7CiAgICAgICAgb2xkX3NpZ3NldF90IHNhX21hc2s7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzYV9mbGFnczsKICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwp9 OwoKc3RydWN0IHNpZ2FjdGlvbiB7CiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwogICAgICAgIHZvaWQgKCpzYV9yZXN0b3Jl cikodm9pZCk7CiAgICAgICAgc2lnc2V0X3Qgc2FfbWFzazsKfTsKCnN0cnVjdCBrX3NpZ2FjdGlv biB7CiAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKfTsKIyAxNzEgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgp0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CiAgICAg ICAgdm9pZCAqc3Nfc3A7CiAgICAgICAgaW50IHNzX2ZsYWdzOwogICAgICAgIHNpemVfdCBzc19z aXplOwp9IHN0YWNrX3Q7CgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zaWdjb250 ZXh0LmgiIDEKIyAxNzkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAyCgoK CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2ln KQp7CiAgICAgICAgX19hc21fXygiYnRzbCAlMSwlMCIgOiAiPW0iKCpzZXQpIDogIklyIihfc2ln IC0gMSkgOiAiY2MiKTsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBzaWdkZWxzZXQoc2lnc2V0 X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBfX2FzbV9fKCJidHJsICUxLCUwIiA6ICI9bSIo KnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQg X19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIHVu c2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CiAgICAgICAgcmV0dXJuIDEgJiAoc2V0LT5zaWdb c2lnIC8gMzJdID4+IChzaWcgJSAzMikpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19nZW5f c2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBpbnQgcmV0Owog ICAgICAgIF9fYXNtX18oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAg OiAiPXIiKHJldCkgOiAibSIoKnNldCksICJJciIoX3NpZy0xKSA6ICJjYyIpOwogICAgICAgIHJl dHVybiByZXQ7Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgpz dGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCnsK ICAgICAgICBfX2FzbV9fKCJic2ZsICUxLCUwIiA6ICI9ciIod29yZCkgOiAicm0iKHdvcmQpIDog ImNjIik7CiAgICAgICAgcmV0dXJuIHdvcmQ7Cn0KIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3NpZ25hbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2lnaW5m by5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMg NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc2lnaW5mby5oIiAyCgoKCnR5cGVkZWYgdW5p b24gc2lndmFsIHsKICAgICAgICBpbnQgc2l2YWxfaW50OwogICAgICAgIHZvaWQgKnNpdmFsX3B0 cjsKfSBzaWd2YWxfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewogICAgICAgIGludCBz aV9zaWdubzsKICAgICAgICBpbnQgc2lfZXJybm87CiAgICAgICAgaW50IHNpX2NvZGU7CgogICAg ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGludCBfcGFkWygoMTI4L3NpemVvZihpbnQpKSAt IDMpXTsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAg cGlkX3QgX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX3VpZDsKICAgICAgICAg ICAgICAgIH0gX2tpbGw7CgoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIxOwogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX3RpbWVyMjsKICAgICAgICAgICAgICAgIH0gX3RpbWVyOwoKCiAgICAgICAg ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfcGlkOwogICAg ICAgICAgICAgICAgICAgICAgICB1aWRfdCBfdWlkOwogICAgICAgICAgICAgICAgICAgICAgICBz aWd2YWxfdCBfc2lndmFsOwogICAgICAgICAgICAgICAgfSBfcnQ7CgoKICAgICAgICAgICAgICAg IHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9waWQ7CiAgICAgICAgICAg ICAgICAgICAgICAgIHVpZF90IF91aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfc3Rh dHVzOwogICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF91dGltZTsKICAgICAgICAgICAg ICAgICAgICAgICAgY2xvY2tfdCBfc3RpbWU7CiAgICAgICAgICAgICAgICB9IF9zaWdjaGxkOwoK CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpf YWRkcjsKICAgICAgICAgICAgICAgIH0gX3NpZ2ZhdWx0OwoKCiAgICAgICAgICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2JhbmQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfZmQ7CiAgICAgICAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICAgIH0gX3Np ZmllbGRzOwp9IHNpZ2luZm9fdDsKIyAxOTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Np Z2luZm8uaCIKdHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQgewogICAgICAgIHNpZ3ZhbF90IHNpZ2V2 X3ZhbHVlOwogICAgICAgIGludCBzaWdldl9zaWdubzsKICAgICAgICBpbnQgc2lnZXZfbm90aWZ5 OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGludCBfcGFkWygoNjQvc2l6ZW9mKGlu dCkpIC0gMyldOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqX2F0dHJpYnV0ZTsKICAgICAgICAgICAgICAgIH0gX3NpZ2V2X3RocmVhZDsKICAgICAg ICB9IF9zaWdldl91bjsKfSBzaWdldmVudF90OwoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9zdHJpbmcuaCIgMQojIDIxOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20v c2lnaW5mby5oIiAyCgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHNpZ2luZm9fdCAq dG8sIHNpZ2luZm9fdCAqZnJvbSkKewogICAgICAgIGlmIChmcm9tLT5zaV9jb2RlIDwgMCkKICAg ICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2Yoc2lnaW5mb190KSkgPyBf X2NvbnN0YW50X21lbWNweSgodG8pLChmcm9tKSwoc2l6ZW9mKHNpZ2luZm9fdCkpKSA6IF9fbWVt Y3B5KCh0byksKGZyb20pLChzaXplb2Yoc2lnaW5mb190KSkpKTsKICAgICAgICBlbHNlCgogICAg ICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDMqc2l6ZW9mKGludCkgKyBzaXplb2Yo ZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSkgPyBfX2NvbnN0YW50X21lbWNweSgodG8pLChmcm9t KSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKSkgOiBf X21lbWNweSgodG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVs ZHMuX3NpZ2NobGQpKSkpOwp9CgpleHRlcm4gaW50IGNvcHlfc2lnaW5mb190b191c2VyKHNpZ2lu Zm9fdCAqdG8sIHNpZ2luZm9fdCAqZnJvbSk7CiMgNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9zaWduYWwuaCIgMgoKCgoKCgpzdHJ1Y3Qgc2lncXVldWUgewogICAgICAgIHN0cnVjdCBz aWdxdWV1ZSAqbmV4dDsKICAgICAgICBzaWdpbmZvX3QgaW5mbzsKfTsKCnN0cnVjdCBzaWdwZW5k aW5nIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKmhlYWQsICoqdGFpbDsKICAgICAgICBzaWdz ZXRfdCBzaWduYWw7Cn07CiMgNjggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2lnbmFs LmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQojIDY5ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAyCiMgMTA4ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnb3JzZXRz KHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsgdW5z aWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxvbmcg aTsgZm9yIChpID0gMDsgaSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCppKzBd OyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCpp KzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdb NCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChiMCkp OyByLT5zaWdbNCppKzFdID0gKChhMSkgfCAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpIHwg KGIyKSk7IHItPnNpZ1s0KmkrM10gPSAoKGEzKSB8IChiMykpOyB9IHN3aXRjaCAoKDY0IC8gMzIp ICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBh MiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFd OyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChiMCkpOyByLT5z aWdbNCppKzFdID0gKChhMSkgfCAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpIHwgKGIyKSk7 IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBi MCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9ICgo YTApIHwgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyBicmVhazsgY2FzZSAx OiBhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+c2lnWzQqaSswXSA9 ICgoYTApIHwgKGIwKSk7IGJyZWFrOyB9IH0KCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnYW5kc2V0 cyhzaWdzZXRfdCAqciwgY29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSB7IHVu c2lnbmVkIGxvbmcgYTAsIGExLCBhMiwgYTMsIGIwLCBiMSwgYjIsIGIzOyB1bnNpZ25lZCBsb25n IGk7IGZvciAoaSA9IDA7IGkgPCAoNjQgLyAzMikvNDsgKytpKSB7IGEwID0gYS0+c2lnWzQqaSsw XTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGEzID0gYS0+c2lnWzQq aSszXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2ln WzQqaSsyXTsgYjMgPSBiLT5zaWdbNCppKzNdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAoYjAp KTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAm IChiMikpOyByLT5zaWdbNCppKzNdID0gKChhMykgJiAoYjMpKTsgfSBzd2l0Y2ggKCg2NCAvIDMy KSAlIDQpIHsgY2FzZSAzOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsg YTIgPSBhLT5zaWdbNCppKzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsx XTsgYjIgPSBiLT5zaWdbNCppKzJdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAoYjApKTsgci0+ c2lnWzQqaSsxXSA9ICgoYTEpICYgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAmIChiMikp OyBicmVhazsgY2FzZSAyOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsg YjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAo KGEwKSAmIChiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgYnJlYWs7IGNhc2Ug MTogYTAgPSBhLT5zaWdbNCppKzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0KmkrMF0g PSAoKGEwKSAmIChiMCkpOyBicmVhazsgfSB9CgoKc3RhdGljIGlubGluZSB2b2lkIHNpZ25hbmRz ZXRzKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsg dW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxv bmcgaTsgZm9yIChpID0gMDsgaSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCpp KzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdb NCppKzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5z aWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIH4o YjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgfihiMSkpOyByLT5zaWdbNCppKzJdID0gKChh MikgJiB+KGIyKSk7IHItPnNpZ1s0KmkrM10gPSAoKGEzKSAmIH4oYjMpKTsgfSBzd2l0Y2ggKCg2 NCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQq aSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2ln WzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIw KSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSAmIH4oYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIp ICYgfihiMikpOyBicmVhazsgY2FzZSAyOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2ln WzQqaSsxXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0 KmkrMF0gPSAoKGEwKSAmIH4oYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgfihiMSkpOyBi cmVhazsgY2FzZSAxOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+ c2lnWzQqaSswXSA9ICgoYTApICYgfihiMCkpOyBicmVhazsgfSB9CiMgMTQwICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbm90c2V0 KHNpZ3NldF90ICpzZXQpIHsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8g MzIpLzQ7ICsraSkgeyBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0pKTsgc2V0 LT5zaWdbNCppKzFdID0gKH4oc2V0LT5zaWdbNCppKzFdKSk7IHNldC0+c2lnWzQqaSsyXSA9ICh+ KHNldC0+c2lnWzQqaSsyXSkpOyBzZXQtPnNpZ1s0KmkrM10gPSAofihzZXQtPnNpZ1s0KmkrM10p KTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBzZXQtPnNpZ1s0KmkrMl0gPSAo fihzZXQtPnNpZ1s0KmkrMl0pKTsgY2FzZSAyOiBzZXQtPnNpZ1s0KmkrMV0gPSAofihzZXQtPnNp Z1s0KmkrMV0pKTsgY2FzZSAxOiBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0p KTsgfSB9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCkK ewogICAgICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo c2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQp KSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihzaWdzZXRfdCkp KSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoc2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVk IGNoYXIpKDApKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRf cCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKChzZXQpKSksKCgoMCkp KSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKDAp KSwoKHNpemVvZihzaWdzZXRfdCkpKSkpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg IGNhc2UgMjogc2V0LT5zaWdbMV0gPSAwOwogICAgICAgIGNhc2UgMTogc2V0LT5zaWdbMF0gPSAw OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQg c2lnZmlsbHNldChzaWdzZXRfdCAqc2V0KQp7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsK ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0x KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFu dF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoLTEpKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKHNl dCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgtMSkpKSwoKHNpemVvZihzaWdzZXRf dCkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX21l bXNldF9nZW5lcmljKCgoKHNldCkpKSwoKCgtMSkpKSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6 IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKC0xKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSk7 CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7 CiAgICAgICAgY2FzZSAxOiBzZXQtPnNpZ1swXSA9IC0xOwogICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgfQp9CgpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRfdChzaWdzZXRfdCAqc2V0 LCBjaGFyICpidWZmZXIpOwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0bWFzayhzaWdz ZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSB8PSBt YXNrOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1 bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSAmPSB+bWFzazsKfQoKc3Rh dGljIGlubGluZSBpbnQgc2lndGVzdHNldG1hc2soc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9u ZyBtYXNrKQp7CiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcg bWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gbWFzazsKICAgICAgICBzd2l0Y2ggKCg2NCAv IDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0 YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIp LTEpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCZzZXQtPnNpZ1sxXSkpLCgo MHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAz MiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEw MTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkp KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkg PyBfX21lbXNldF9nZW5lcmljKCgoKCZzZXQtPnNpZ1sxXSkpKSwoKCgwKSkpLCgoKHNpemVvZihs b25nKSooKDY0IC8gMzIpLTEpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgmc2V0LT5zaWdbMV0p KSwoKDApKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gMDsKICAgICAgICBjYXNlIDE6 IDsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0aW52KHNpZ3NldF90 ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gfm1hc2s7 CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAg ICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo c2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVt c2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkp LCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgo JnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6 ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXpl b2YobG9uZykqKCg2NCAvIDMyKS0xKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgmc2V0LT5zaWdb MV0pKSksKCgoLTEpKSksKCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogX19tZW1z ZXRfZ2VuZXJpYygoKCZzZXQtPnNpZ1sxXSkpLCgoLTEpKSwoKHNpemVvZihsb25nKSooKDY0IC8g MzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+ c2lnWzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiA7CiAgICAgICAgfQp9CgoKCnN0YXRpYyBpbmxp bmUgdm9pZCBpbml0X3NpZ3BlbmRpbmcoc3RydWN0IHNpZ3BlbmRpbmcgKnNpZykKewogICAgICAg IHNpZ2VtcHR5c2V0KCZzaWctPnNpZ25hbCk7CiAgICAgICAgc2lnLT5oZWFkID0gKCh2b2lkICop MCk7CiAgICAgICAgc2lnLT50YWlsID0gJnNpZy0+aGVhZDsKfQoKZXh0ZXJuIGxvbmcgZG9fc2ln cGVuZGluZyh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDI3ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Nl Y3VyZWJpdHMuaCIgMQoKCgoKCmV4dGVybiB1bnNpZ25lZCBzZWN1cmViaXRzOwojIDI4ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIiAxCgoKCgpzdHJ1Y3QgZnNfc3RydWN0IHsKICAgICAg ICBhdG9taWNfdCBjb3VudDsKICAgICAgICByd2xvY2tfdCBsb2NrOwogICAgICAgIGludCB1bWFz azsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgKiBwd2QsICogYWx0cm9vdDsKICAgICAg ICBzdHJ1Y3QgdmZzbW91bnQgKiByb290bW50LCAqIHB3ZG1udCwgKiBhbHRyb290bW50Owp9Owoj IDIwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIgpleHRlcm4gdm9p ZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgc2V0X2ZzX2FsdHJv b3Qodm9pZCk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNf c3RydWN0ICpmcywKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKICAgICAgICBzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnkpCnsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfcm9vdDsKICAgICAg ICBzdHJ1Y3QgdmZzbW91bnQgKm9sZF9yb290bW50OwogICAgICAgICh2b2lkKSgmZnMtPmxvY2sp OwogICAgICAgIG9sZF9yb290ID0gZnMtPnJvb3Q7CiAgICAgICAgb2xkX3Jvb3RtbnQgPSBmcy0+ cm9vdG1udDsKICAgICAgICBmcy0+cm9vdG1udCA9IG1udGdldChtbnQpOwogICAgICAgIGZzLT5y b290ID0gZGdldChkZW50cnkpOwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAgICAgICBpZiAo b2xkX3Jvb3QpIHsKICAgICAgICAgICAgICAgIGRwdXQob2xkX3Jvb3QpOwogICAgICAgICAgICAg ICAgbW50cHV0KG9sZF9yb290bW50KTsKICAgICAgICB9Cn0KCgoKCgoKc3RhdGljIGlubGluZSB2 b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsCiAgICAgICAgc3RydWN0IHZmc21v dW50ICptbnQsCiAgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgc3RydWN0 IGRlbnRyeSAqb2xkX3B3ZDsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm9sZF9wd2RtbnQ7CiAg ICAgICAgKHZvaWQpKCZmcy0+bG9jayk7CiAgICAgICAgb2xkX3B3ZCA9IGZzLT5wd2Q7CiAgICAg ICAgb2xkX3B3ZG1udCA9IGZzLT5wd2RtbnQ7CiAgICAgICAgZnMtPnB3ZG1udCA9IG1udGdldCht bnQpOwogICAgICAgIGZzLT5wd2QgPSBkZ2V0KGRlbnRyeSk7CiAgICAgICAgZG8geyB9IHdoaWxl KDApOwogICAgICAgIGlmIChvbGRfcHdkKSB7CiAgICAgICAgICAgICAgICBkcHV0KG9sZF9wd2Qp OwogICAgICAgICAgICAgICAgbW50cHV0KG9sZF9wd2RtbnQpOwogICAgICAgIH0KfQoKc3RydWN0 IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKTsKdm9pZCBw dXRfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKTsKIyAyOSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgpzdHJ1Y3QgZXhlY19kb21haW47CiMgNTggIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXZl bnJ1bltdOwojIDc1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCmV4dGVy biBpbnQgbnJfcnVubmluZywgbnJfdGhyZWFkczsKZXh0ZXJuIGludCBsYXN0X3BpZDsKCiMgMSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAxCiMgNzkgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdGltZS5oIiAxCiMgODAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L3BhcmFtLmgiIDIKIyA4MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lLmgiIDEKIyA1ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDIKIyAyMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIgpzdHJ1Y3QgcnVzYWdlIHsKICAgICAgICBz dHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsK ICAgICAgICBsb25nIHJ1X21heHJzczsKICAgICAgICBsb25nIHJ1X2l4cnNzOwogICAgICAgIGxv bmcgcnVfaWRyc3M7CiAgICAgICAgbG9uZyBydV9pc3JzczsKICAgICAgICBsb25nIHJ1X21pbmZs dDsKICAgICAgICBsb25nIHJ1X21hamZsdDsKICAgICAgICBsb25nIHJ1X25zd2FwOwogICAgICAg IGxvbmcgcnVfaW5ibG9jazsKICAgICAgICBsb25nIHJ1X291YmxvY2s7CiAgICAgICAgbG9uZyBy dV9tc2dzbmQ7CiAgICAgICAgbG9uZyBydV9tc2dyY3Y7CiAgICAgICAgbG9uZyBydV9uc2lnbmFs czsKICAgICAgICBsb25nIHJ1X252Y3N3OwogICAgICAgIGxvbmcgcnVfbml2Y3N3Owp9OwoKc3Ry dWN0IHJsaW1pdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBybGltX2N1cjsKICAgICAgICB1bnNp Z25lZCBsb25nIHJsaW1fbWF4Owp9OwojIDU2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3Jlc291cmNlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCIg MQojIDU3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDIKIyA4MiAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC90aW1lci5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGlt ZXIuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgNiAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5oIiAyCiMgMTYgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvdGltZXIuaCIKc3RydWN0IHRpbWVyX2xpc3QgewogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZXM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBkYXRhOwogICAgICAgIHZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQg bG9uZyk7Cn07CgpleHRlcm4gdm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1l cik7CmV4dGVybiBpbnQgZGVsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpOwojIDQx ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWVyLmgiCmludCBtb2RfdGltZXIoc3Ry dWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwoKZXh0ZXJuIHZv aWQgaXRfcmVhbF9mbih1bnNpZ25lZCBsb25nKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3Rp bWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKICAgICAgICB0aW1lci0+bGlzdC5uZXh0 ID0gdGltZXItPmxpc3QucHJldiA9ICgodm9pZCAqKTApOwp9CgpzdGF0aWMgaW5saW5lIGludCB0 aW1lcl9wZW5kaW5nIChjb25zdCBzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQp7CiAgICAgICAg cmV0dXJuIHRpbWVyLT5saXN0Lm5leHQgIT0gKCh2b2lkICopMCk7Cn0KIyA4MyAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL3Byb2Nlc3Nvci5oIiAxCiMgODUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv c2NoZWQuaCIgMgojIDEyNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpz dHJ1Y3Qgc2NoZWRfcGFyYW0gewogICAgICAgIGludCBzY2hlZF9wcmlvcml0eTsKfTsKCnN0cnVj dCBjb21wbGV0aW9uOwoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3Bpbmxv Y2suaCIgMQojIDEzNCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgoK CgoKCgpleHRlcm4gcndsb2NrX3QgdGFza2xpc3RfbG9jazsKZXh0ZXJuIHNwaW5sb2NrX3QgcnVu cXVldWVfbG9jazsKZXh0ZXJuIHNwaW5sb2NrX3QgbW1saXN0X2xvY2s7CgpleHRlcm4gdm9pZCBz Y2hlZF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X2lkbGUodm9pZCk7CmV4dGVybiB2b2lk IHNob3dfc3RhdGUodm9pZCk7CmV4dGVybiB2b2lkIGNwdV9pbml0ICh2b2lkKTsKZXh0ZXJuIHZv aWQgdHJhcF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCB1cGRhdGVfcHJvY2Vzc190aW1lcyhpbnQg dXNlcik7CmV4dGVybiB2b2lkIHVwZGF0ZV9vbmVfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnAsIHVuc2lnbmVkIGxvbmcgdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgc3lzdGVtLCBpbnQgY3B1KTsKCgpleHRlcm4gc2lnbmVkIGxvbmcgc2NoZWR1 bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBzY2hlZHVsZSh2b2lkKTsKCmV4 dGVybiBpbnQgc2NoZWR1bGVfdGFzayhzdHJ1Y3QgdHFfc3RydWN0ICp0YXNrKTsKZXh0ZXJuIHZv aWQgZmx1c2hfc2NoZWR1bGVkX3Rhc2tzKHZvaWQpOwpleHRlcm4gaW50IHN0YXJ0X2NvbnRleHRf dGhyZWFkKHZvaWQpOwpleHRlcm4gaW50IGN1cnJlbnRfaXNfa2V2ZW50ZCh2b2lkKTsKIyAxNzIg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IGZpbGVzX3N0cnVj dCB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgcndsb2NrX3QgZmlsZV9sb2NrOwog ICAgICAgIGludCBtYXhfZmRzOwogICAgICAgIGludCBtYXhfZmRzZXQ7CiAgICAgICAgaW50IG5l eHRfZmQ7CiAgICAgICAgc3RydWN0IGZpbGUgKiogZmQ7CiAgICAgICAgZmRfc2V0ICpjbG9zZV9v bl9leGVjOwogICAgICAgIGZkX3NldCAqb3Blbl9mZHM7CiAgICAgICAgZmRfc2V0IGNsb3NlX29u X2V4ZWNfaW5pdDsKICAgICAgICBmZF9zZXQgb3Blbl9mZHNfaW5pdDsKICAgICAgICBzdHJ1Y3Qg ZmlsZSAqIGZkX2FycmF5WzMyXTsKfTsKIyAyMDQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvc2NoZWQuaCIKc3RydWN0IG1tX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICogbW1hcDsKICAgICAgICByYl9yb290X3QgbW1fcmI7CiAgICAgICAgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICogbW1hcF9jYWNoZTsKICAgICAgICBwZ2RfdCAqIHBnZDsKICAgICAgICBhdG9t aWNfdCBtbV91c2VyczsKICAgICAgICBhdG9taWNfdCBtbV9jb3VudDsKICAgICAgICBpbnQgbWFw X2NvdW50OwogICAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgbW1hcF9zZW07CiAgICAgICAgc3Bp bmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW1saXN0 OwoKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGUsIGVuZF9jb2RlLCBzdGFydF9k YXRhLCBlbmRfZGF0YTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2JyaywgYnJrLCBzdGFy dF9zdGFjazsKICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ19zdGFydCwgYXJnX2VuZCwgZW52X3N0 YXJ0LCBlbnZfZW5kOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnNzLCB0b3RhbF92bSwgbG9ja2Vk X3ZtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVmX2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgY3B1X3ZtX21hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzd2FwX2FkZHJlc3M7CgogICAg ICAgIHVuc2lnbmVkIGR1bXBhYmxlOjE7CgoKICAgICAgICBtbV9jb250ZXh0X3QgY29udGV4dDsK fTsKCmV4dGVybiBpbnQgbW1saXN0X25yOwojIDI0NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9zY2hlZC5oIgpzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgY291 bnQ7CiAgICAgICAgc3RydWN0IGtfc2lnYWN0aW9uIGFjdGlvbls2NF07CiAgICAgICAgc3Bpbmxv Y2tfdCBzaWdsb2NrOwp9OwojIDI2MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hl ZC5oIgpzdHJ1Y3QgdXNlcl9zdHJ1Y3QgewogICAgICAgIGF0b21pY190IF9fY291bnQ7CiAgICAg ICAgYXRvbWljX3QgcHJvY2Vzc2VzOwogICAgICAgIGF0b21pY190IGZpbGVzOwoKCiAgICAgICAg c3RydWN0IHVzZXJfc3RydWN0ICpuZXh0LCAqKnBwcmV2OwogICAgICAgIHVpZF90IHVpZDsKfTsK CgoKCgoKZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCByb290X3VzZXI7CgoKc3RydWN0IHRhc2tf c3RydWN0IHsKCgoKICAgICAgICB2b2xhdGlsZSBsb25nIHN0YXRlOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7CiAgICAgICAgaW50IHNpZ3BlbmRpbmc7CiAgICAgICAgbW1fc2VnbWVudF90 IGFkZHJfbGltaXQ7CgoKCiAgICAgICAgc3RydWN0IGV4ZWNfZG9tYWluICpleGVjX2RvbWFpbjsK ICAgICAgICB2b2xhdGlsZSBsb25nIG5lZWRfcmVzY2hlZDsKICAgICAgICB1bnNpZ25lZCBsb25n IHB0cmFjZTsKCiAgICAgICAgaW50IGxvY2tfZGVwdGg7CgoKCgoKCiAgICAgICAgbG9uZyBjb3Vu dGVyOwogICAgICAgIGxvbmcgbmljZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBvbGljeTsKICAg ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbTsKICAgICAgICBpbnQgaGFzX2NwdSwgcHJvY2Vzc29y OwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1c19hbGxvd2VkOwoKCgoKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIHJ1bl9saXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2xlZXBfdGltZTsKCiAg ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3Rhc2ssICpwcmV2X3Rhc2s7CiAgICAgICAg c3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbG9j YWxfcGFnZXM7CiAgICAgICAgdW5zaWduZWQgaW50IGFsbG9jYXRpb25fb3JkZXIsIG5yX2xvY2Fs X3BhZ2VzOwoKCiAgICAgICAgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10OwogICAgICAgIGlu dCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogICAgICAgIGludCBwZGVhdGhfc2lnbmFsOwoKICAg ICAgICB1bnNpZ25lZCBsb25nIHBlcnNvbmFsaXR5OwogICAgICAgIGludCBkaWRfZXhlYzoxOwog ICAgICAgIHBpZF90IHBpZDsKICAgICAgICBwaWRfdCBwZ3JwOwogICAgICAgIHBpZF90IHR0eV9v bGRfcGdycDsKICAgICAgICBwaWRfdCBzZXNzaW9uOwogICAgICAgIHBpZF90IHRnaWQ7CgogICAg ICAgIGludCBsZWFkZXI7CgoKCgoKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBfb3BwdHIs ICpwX3BwdHIsICpwX2NwdHIsICpwX3lzcHRyLCAqcF9vc3B0cjsKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIHRocmVhZF9ncm91cDsKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkaGFz aF9uZXh0OwogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKnBpZGhhc2hfcHByZXY7CgogICAg ICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfY2hsZGV4aXQ7CiAgICAgICAgc3RydWN0IGNvbXBs ZXRpb24gKnZmb3JrX2RvbmU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBydF9wcmlvcml0eTsKICAg ICAgICB1bnNpZ25lZCBsb25nIGl0X3JlYWxfdmFsdWUsIGl0X3Byb2ZfdmFsdWUsIGl0X3ZpcnRf dmFsdWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpdF9yZWFsX2luY3IsIGl0X3Byb2ZfaW5jciwg aXRfdmlydF9pbmNyOwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHJlYWxfdGltZXI7CiAgICAg ICAgc3RydWN0IHRtcyB0aW1lczsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiAg ICAgICAgbG9uZyBwZXJfY3B1X3V0aW1lWzFdLCBwZXJfY3B1X3N0aW1lWzFdOwoKICAgICAgICB1 bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1hal9mbHQsIG5zd2FwLCBjbWluX2ZsdCwgY21hal9mbHQs IGNuc3dhcDsKICAgICAgICBpbnQgc3dhcHBhYmxlOjE7CgogICAgICAgIHVpZF90IHVpZCxldWlk LHN1aWQsZnN1aWQ7CiAgICAgICAgZ2lkX3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKICAgICAgICBp bnQgbmdyb3VwczsKICAgICAgICBnaWRfdCBncm91cHNbMzJdOwogICAgICAgIGtlcm5lbF9jYXBf dCBjYXBfZWZmZWN0aXZlLCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQ7CiAgICAgICAg aW50IGtlZXBfY2FwYWJpbGl0aWVzOjE7CiAgICAgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2Vy OwoKICAgICAgICBzdHJ1Y3QgcmxpbWl0IHJsaW1bMTFdOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHVzZWRfbWF0aDsKICAgICAgICBjaGFyIGNvbW1bMTZdOwoKICAgICAgICBpbnQgbGlua19jb3Vu dCwgdG90YWxfbGlua19jb3VudDsKICAgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogICAg ICAgIHVuc2lnbmVkIGludCBsb2NrczsKCiAgICAgICAgc3RydWN0IHNlbV91bmRvICpzZW11bmRv OwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKnNlbXNsZWVwaW5nOwoKICAgICAgICBzdHJ1Y3Qg dGhyZWFkX3N0cnVjdCB0aHJlYWQ7CgogICAgICAgIHN0cnVjdCBmc19zdHJ1Y3QgKmZzOwoKICAg ICAgICBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlczsKCiAgICAgICAgc3BpbmxvY2tfdCBzaWdt YXNrX2xvY2s7CiAgICAgICAgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKCiAgICAgICAgc2ln c2V0X3QgYmxvY2tlZDsKICAgICAgICBzdHJ1Y3Qgc2lncGVuZGluZyBwZW5kaW5nOwoKICAgICAg ICB1bnNpZ25lZCBsb25nIHNhc19zc19zcDsKICAgICAgICBzaXplX3Qgc2FzX3NzX3NpemU7CiAg ICAgICAgaW50ICgqbm90aWZpZXIpKHZvaWQgKnByaXYpOwogICAgICAgIHZvaWQgKm5vdGlmaWVy X2RhdGE7CiAgICAgICAgc2lnc2V0X3QgKm5vdGlmaWVyX21hc2s7CgoKICAgICAgICB1MzIgcGFy ZW50X2V4ZWNfaWQ7CiAgICAgICAgdTMyIHNlbGZfZXhlY19pZDsKCiAgICAgICAgc3BpbmxvY2tf dCBhbGxvY19sb2NrOwp9OwojIDQ0NCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hl ZC5oIgpleHRlcm4gc3RydWN0IGV4ZWNfZG9tYWluIGRlZmF1bHRfZXhlY19kb21haW47CiMgNDk2 ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnVuaW9uIHRhc2tfdW5pb24g ewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCB0YXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcg c3RhY2tbMjA0OCpzaXplb2YobG9uZykvc2l6ZW9mKGxvbmcpXTsKfTsKCmV4dGVybiB1bmlvbiB0 YXNrX3VuaW9uIGluaXRfdGFza191bmlvbjsKCmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0IGluaXRf bW07CmV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmluaXRfdGFza3NbMV07CgoKCmV4dGVybiBz dHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGhhc2hbKDQwOTYgPj4gMildOwoKCgpzdGF0aWMgaW5saW5l IHZvaWQgaGFzaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgc3RydWN0IHRh c2tfc3RydWN0ICoqaHRhYmxlID0gJnBpZGhhc2hbKCgoKHAtPnBpZCkgPj4gOCkgXiAocC0+cGlk KSkgJiAoKDQwOTYgPj4gMikgLSAxKSldOwoKICAgICAgICBpZigocC0+cGlkaGFzaF9uZXh0ID0g Kmh0YWJsZSkgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICAoKmh0YWJsZSktPnBpZGhh c2hfcHByZXYgPSAmcC0+cGlkaGFzaF9uZXh0OwogICAgICAgICpodGFibGUgPSBwOwogICAgICAg IHAtPnBpZGhhc2hfcHByZXYgPSBodGFibGU7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhhc2hf cGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIGlmKHAtPnBpZGhhc2hfbmV4dCkK ICAgICAgICAgICAgICAgIHAtPnBpZGhhc2hfbmV4dC0+cGlkaGFzaF9wcHJldiA9IHAtPnBpZGhh c2hfcHByZXY7CiAgICAgICAgKnAtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX25leHQ7Cn0K CnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkKGludCBw aWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICoqaHRhYmxlID0gJnBpZGhhc2hb KCgoKHBpZCkgPj4gOCkgXiAocGlkKSkgJiAoKDQwOTYgPj4gMikgLSAxKSldOwoKICAgICAgICBm b3IocCA9ICpodGFibGU7IHAgJiYgcC0+cGlkICE9IHBpZDsgcCA9IHAtPnBpZGhhc2hfbmV4dCkK ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHA7Cn0KCgpleHRlcm4gc3RydWN0IHVz ZXJfc3RydWN0ICogYWxsb2NfdWlkKHVpZF90KTsKZXh0ZXJuIHZvaWQgZnJlZV91aWQoc3RydWN0 IHVzZXJfc3RydWN0ICopOwoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9jdXJyZW50 LmgiIDEKCgoKc3RydWN0IHRhc2tfc3RydWN0OwoKc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19z dHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQp7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpj dXJyZW50OwogICAgICAgIF9fYXNtX18oImFuZGwgJSVlc3AsJTA7ICI6Ij1yIiAoY3VycmVudCkg OiAiMCIgKH44MTkxVUwpKTsKICAgICAgICByZXR1cm4gY3VycmVudDsKIH0KIyA1NDQgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg dm9sYXRpbGUgamlmZmllczsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaXRpbWVyX3RpY2tzOwpleHRl cm4gdW5zaWduZWQgbG9uZyBpdGltZXJfbmV4dDsKZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHh0aW1l OwpleHRlcm4gdm9pZCBkb190aW1lcihzdHJ1Y3QgcHRfcmVncyAqKTsKCmV4dGVybiB1bnNpZ25l ZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9sZW47CmV4dGVy biB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgoKCmV4dGVybiB2b2lkIF9fd2FrZV91cCh3YWl0 X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikgX19hdHRyaWJ1dGVf XygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hl YWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwpleHRlcm4gdm9pZCBzbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkgX19hdHRy aWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gbG9uZyBzbGVlcF9vbl90aW1lb3V0KHdhaXRf cXVldWVfaGVhZF90ICpxLCBzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CgpleHRlcm4gdm9pZCBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKHdhaXRfcXVldWVf aGVhZF90ICpxKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBsb25nIGludGVy cnVwdGlibGVfc2xlZXBfb25fdGltZW91dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgc2lnbmVkIGxv bmcgdGltZW91dCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKZXh0ZXJuIGludCB3YWtl X3VwX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CiMgNTc3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCiBf X2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfd2FpdDQocGlkX3QgcGlkLHVuc2ln bmVkIGludCAqIHN0YXRfYWRkciwgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKiBydSk7Cgpl eHRlcm4gaW50IGluX2dyb3VwX3AoZ2lkX3QpOwpleHRlcm4gaW50IGluX2Vncm91cF9wKGdpZF90 KTsKCmV4dGVybiB2b2lkIHByb2NfY2FjaGVzX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGZsdXNo X3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBmbHVzaF9zaWduYWxf aGFuZGxlcnMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGRlcXVldWVfc2lnbmFs KHNpZ3NldF90ICosIHNpZ2luZm9fdCAqKTsKZXh0ZXJuIHZvaWQgYmxvY2tfYWxsX3NpZ25hbHMo aW50ICgqbm90aWZpZXIpKHZvaWQgKnByaXYpLCB2b2lkICpwcml2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaWdzZXRfdCAqbWFzayk7CmV4dGVybiB2b2lkIHVuYmxvY2tfYWxsX3Np Z25hbHModm9pZCk7CmV4dGVybiBpbnQgc2VuZF9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZv ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBmb3JjZV9zaWdfaW5mbyhpbnQs IHN0cnVjdCBzaWdpbmZvICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBraWxs X3BnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9z bF9pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gaW50IGtpbGxfcHJv Y19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gdm9pZCBub3RpZnlf cGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gdm9pZCBkb19ub3RpZnlf cGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gdm9pZCBmb3JjZV9zaWco aW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgc2VuZF9zaWcoaW50LCBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKZXh0ZXJuIGludCBraWxsX3BnKHBpZF90LCBpbnQsIGlu dCk7CmV4dGVybiBpbnQga2lsbF9zbChwaWRfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50IGtpbGxf cHJvYyhwaWRfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50IGRvX3NpZ2FjdGlvbihpbnQsIGNvbnN0 IHN0cnVjdCBrX3NpZ2FjdGlvbiAqLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKik7CmV4dGVybiBpbnQg ZG9fc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCAqLCBzdGFja190ICosIHVuc2lnbmVkIGxvbmcp OwoKc3RhdGljIGlubGluZSBpbnQgc2lnbmFsX3BlbmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpw KQp7CiAgICAgICAgcmV0dXJuIChwLT5zaWdwZW5kaW5nICE9IDApOwp9CgoKCgoKc3RhdGljIGlu bGluZSBpbnQgaGFzX3BlbmRpbmdfc2lnbmFscyhzaWdzZXRfdCAqc2lnbmFsLCBzaWdzZXRfdCAq YmxvY2tlZCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVhZHk7CiAgICAgICAgbG9uZyBpOwoK ICAgICAgICBzd2l0Y2ggKCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg ICAgICBmb3IgKGkgPSAoNjQgLyAzMiksIHJlYWR5ID0gMDsgLS1pID49IDAgOykKICAgICAgICAg ICAgICAgICAgICAgICAgcmVhZHkgfD0gc2lnbmFsLT5zaWdbaV0gJn4gYmxvY2tlZC0+c2lnW2ld OwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNDogcmVhZHkgPSBzaWduYWwt PnNpZ1szXSAmfiBibG9ja2VkLT5zaWdbM107CiAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWdu YWwtPnNpZ1syXSAmfiBibG9ja2VkLT5zaWdbMl07CiAgICAgICAgICAgICAgICByZWFkeSB8PSBz aWduYWwtPnNpZ1sxXSAmfiBibG9ja2VkLT5zaWdbMV07CiAgICAgICAgICAgICAgICByZWFkeSB8 PSBzaWduYWwtPnNpZ1swXSAmfiBibG9ja2VkLT5zaWdbMF07CiAgICAgICAgICAgICAgICBicmVh azsKCiAgICAgICAgY2FzZSAyOiByZWFkeSA9IHNpZ25hbC0+c2lnWzFdICZ+IGJsb2NrZWQtPnNp Z1sxXTsKICAgICAgICAgICAgICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzBdICZ+IGJsb2NrZWQt PnNpZ1swXTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDE6IHJlYWR5ID0g c2lnbmFsLT5zaWdbMF0gJn4gYmxvY2tlZC0+c2lnWzBdOwogICAgICAgIH0KICAgICAgICByZXR1 cm4gcmVhZHkgIT0gMDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCByZWNhbGNfc2lncGVuZGlu ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCnsKICAgICAgICB0LT5zaWdwZW5kaW5nID0gaGFzX3Bl bmRpbmdfc2lnbmFscygmdC0+cGVuZGluZy5zaWduYWwsICZ0LT5ibG9ja2VkKTsKfQoKCgpzdGF0 aWMgaW5saW5lIGludCBvbl9zaWdfc3RhY2sodW5zaWduZWQgbG9uZyBzcCkKewogICAgICAgIHJl dHVybiAoc3AgLSBnZXRfY3VycmVudCgpLT5zYXNfc3Nfc3AgPCBnZXRfY3VycmVudCgpLT5zYXNf c3Nfc2l6ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNhc19zc19mbGFncyh1bnNpZ25lZCBsb25n IHNwKQp7CiAgICAgICAgcmV0dXJuIChnZXRfY3VycmVudCgpLT5zYXNfc3Nfc2l6ZSA9PSAwID8g MgogICAgICAgICAgICAgICAgOiBvbl9zaWdfc3RhY2soc3ApID8gMSA6IDApOwp9CgpleHRlcm4g aW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwKICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAogICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKZXh0ZXJuIHZv aWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwojIDY4MCAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdGF0aWMgaW5saW5lIGludCBzdXNlcih2b2lkKQp7CiAg ICAgICAgaWYgKCEoICgxIDw8ICgwICsxKSkgJiAweDAwMDAwMDAwID8gKDEgPDwgKDApKSAmIDB4 MDAwMDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0cyApICYmIGdldF9jdXJyZW50KCktPmV1 aWQgPT0gMCkgewogICAgICAgICAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZmxhZ3MgfD0gMHgwMDAw MDEwMDsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4g MDsKfQoKc3RhdGljIGlubGluZSBpbnQgZnN1c2VyKHZvaWQpCnsKICAgICAgICBpZiAoISggKDEg PDwgKDAgKzEpKSAmIDB4MDAwMDAwMDAgPyAoMSA8PCAoMCkpICYgMHgwMDAwMDAwMCA6ICgxIDw8 ICgwKSkgJiBzZWN1cmViaXRzICkgJiYgZ2V0X2N1cnJlbnQoKS0+ZnN1aWQgPT0gMCkgewogICAg ICAgICAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZmxhZ3MgfD0gMHgwMDAwMDEwMDsKICAgICAgICAg ICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKCgoKCgoKc3Rh dGljIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7CgogICAgICAgIGlmICgoKGdldF9jdXJy ZW50KCktPmNhcF9lZmZlY3RpdmUpICYgKDEgPDwgKGNhcCkpKSkKCgoKICAgICAgICB7CiAgICAg ICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8PSAweDAwMDAwMTAwOwogICAgICAgICAg ICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwp9CgoKCgpleHRlcm4g c3RydWN0IG1tX3N0cnVjdCAqIG1tX2FsbG9jKHZvaWQpOwoKZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1 Y3QgKiBzdGFydF9sYXp5X3RsYih2b2lkKTsKZXh0ZXJuIHZvaWQgZW5kX2xhenlfdGxiKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKTsKCgpleHRlcm4gaW5saW5lIHZvaWQgX19tbWRyb3Aoc3RydWN0IG1t X3N0cnVjdCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CnN0YXRpYyBpbmxpbmUgdm9p ZCBtbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQp7CiAgICAgICAgaWYgKGF0b21pY19kZWNf YW5kX3Rlc3QoJm1tLT5tbV9jb3VudCkpCiAgICAgICAgICAgICAgICBfX21tZHJvcChtbSk7Cn0K CgpleHRlcm4gdm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0ICopOwoKZXh0ZXJuIHZvaWQgbW1f cmVsZWFzZSh2b2lkKTsKCgoKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqKiBhbGxvY19mZF9hcnJheShp bnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZF9hcnJheShzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGlu dCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3RydWN0IGZpbGUgKiosIGludCk7Cgpl eHRlcm4gZmRfc2V0ICphbGxvY19mZHNldChpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZHNldChz dHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRzZXQoZmRf c2V0ICosIGludCk7CgpleHRlcm4gaW50IGNvcHlfdGhyZWFkKGludCwgdW5zaWduZWQgbG9uZywg dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVj dCBwdF9yZWdzICopOwpleHRlcm4gdm9pZCBmbHVzaF90aHJlYWQodm9pZCk7CmV4dGVybiB2b2lk IGV4aXRfdGhyZWFkKHZvaWQpOwoKZXh0ZXJuIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1 Y3QgKik7CmV4dGVybiB2b2lkIGV4aXRfZmlsZXMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRl cm4gdm9pZCBleGl0X3NpZ2hhbmQoc3RydWN0IHRhc2tfc3RydWN0ICopOwoKZXh0ZXJuIHZvaWQg cmVwYXJlbnRfdG9faW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZGFlbW9uaXplKHZvaWQpOwoKZXh0 ZXJuIGludCBkb19leGVjdmUoY2hhciAqLCBjaGFyICoqLCBjaGFyICoqLCBzdHJ1Y3QgcHRfcmVn cyAqKTsKZXh0ZXJuIGludCBkb19mb3JrKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0 cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIHZvaWQgYWRkX3dhaXRfcXVl dWUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqIHdhaXQpIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHdh aXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHJlbW92ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVh ZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CiMgODQ4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBkZWxfZnJvbV9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7CiAgICAg ICAgbnJfcnVubmluZy0tOwogICAgICAgIHAtPnNsZWVwX3RpbWUgPSBqaWZmaWVzOwogICAgICAg IGxpc3RfZGVsKCZwLT5ydW5fbGlzdCk7CiAgICAgICAgcC0+cnVuX2xpc3QubmV4dCA9ICgodm9p ZCAqKTApOwp9CgpzdGF0aWMgaW5saW5lIGludCB0YXNrX29uX3J1bnF1ZXVlKHN0cnVjdCB0YXNr X3N0cnVjdCAqcCkKewogICAgICAgIHJldHVybiAocC0+cnVuX2xpc3QubmV4dCAhPSAoKHZvaWQg KikwKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhhc2hfcHJvY2VzcyhzdHJ1Y3QgdGFza19z dHJ1Y3QgKnApCnsKICAgICAgICBpZiAodGFza19vbl9ydW5xdWV1ZShwKSkgX19hc21fXyBfX3Zv bGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0 aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgKHZvaWQpKCZ0YXNrbGlzdF9sb2NrKTsgfSB3aGls ZSAoMCk7CiAgICAgICAgbnJfdGhyZWFkcy0tOwogICAgICAgIHVuaGFzaF9waWQocCk7CiAgICAg ICAgZG8geyAocCktPm5leHRfdGFzay0+cHJldl90YXNrID0gKHApLT5wcmV2X3Rhc2s7IChwKS0+ cHJldl90YXNrLT5uZXh0X3Rhc2sgPSAocCktPm5leHRfdGFzazsgaWYgKChwKS0+cF9vc3B0cikg KHApLT5wX29zcHRyLT5wX3lzcHRyID0gKHApLT5wX3lzcHRyOyBpZiAoKHApLT5wX3lzcHRyKSAo cCktPnBfeXNwdHItPnBfb3NwdHIgPSAocCktPnBfb3NwdHI7IGVsc2UgKHApLT5wX3BwdHItPnBf Y3B0ciA9IChwKS0+cF9vc3B0cjsgfSB3aGlsZSAoMCk7CiAgICAgICAgbGlzdF9kZWwoJnAtPnRo cmVhZF9ncm91cCk7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xh dGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CgoKc3RhdGljIGlubGlu ZSB2b2lkIHRhc2tfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKICAgICAgICAodm9pZCko JnAtPmFsbG9jX2xvY2spOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza191bmxvY2soc3RydWN0 IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9CgoKc3RhdGljIGlu bGluZSBjaGFyICogZF9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50 ICp2ZnNtbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBpbnQg YnVmbGVuKQp7CiAgICAgICAgY2hhciAqcmVzOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqcm9v dG1udDsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290OwogICAgICAgICh2b2lkKSgmZ2V0X2N1 cnJlbnQoKS0+ZnMtPmxvY2spOwogICAgICAgIHJvb3RtbnQgPSBtbnRnZXQoZ2V0X2N1cnJlbnQo KS0+ZnMtPnJvb3RtbnQpOwogICAgICAgIHJvb3QgPSBkZ2V0KGdldF9jdXJyZW50KCktPmZzLT5y b290KTsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgKHZvaWQpKCZkY2FjaGVfbG9j ayk7CiAgICAgICAgcmVzID0gX19kX3BhdGgoZGVudHJ5LCB2ZnNtbnQsIHJvb3QsIHJvb3RtbnQs IGJ1ZiwgYnVmbGVuKTsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgZHB1dChyb290 KTsKICAgICAgICBtbnRwdXQocm9vdG1udCk7CiAgICAgICAgcmV0dXJuIHJlczsKfQojIDUgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvZXJybm8uaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bW0uaCIgMgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEK IyAxMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3Qu aCIgMQojIDEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIiAxCgoKCgoKCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvbW16b25lLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Nw aW5sb2NrLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyAxMCAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDIxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L21tem9uZS5oIgp0eXBlZGVmIHN0cnVjdCBmcmVlX2FyZWFfc3RydWN0IHsK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25n ICptYXA7Cn0gZnJlZV9hcmVhX3Q7CgpzdHJ1Y3QgcGdsaXN0X2RhdGE7CiMgMzYgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvbW16b25lLmgiCnR5cGVkZWYgc3RydWN0IHpvbmVfc3RydWN0 IHsKCgoKICAgICAgICBzcGlubG9ja190IGxvY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVl X3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZXNfbWluLCBwYWdlc19sb3csIHBhZ2Vz X2hpZ2g7CiAgICAgICAgaW50IG5lZWRfYmFsYW5jZTsKCgoKCiAgICAgICAgZnJlZV9hcmVhX3Qg ZnJlZV9hcmVhWzEwXTsKCgoKCiAgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICp6b25lX3BnZGF0 OwogICAgICAgIHN0cnVjdCBwYWdlICp6b25lX21lbV9tYXA7CiAgICAgICAgdW5zaWduZWQgbG9u ZyB6b25lX3N0YXJ0X3BhZGRyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9tYXBu cjsKCgoKCiAgICAgICAgY2hhciAqbmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7Cn0g em9uZV90OwojIDgxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIgp0eXBl ZGVmIHN0cnVjdCB6b25lbGlzdF9zdHJ1Y3QgewogICAgICAgIHpvbmVfdCAqIHpvbmVzIFszICsx XTsKfSB6b25lbGlzdF90OwojIDk4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9u ZS5oIgpzdHJ1Y3QgYm9vdG1lbV9kYXRhOwp0eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7CiAg ICAgICAgem9uZV90IG5vZGVfem9uZXNbM107CiAgICAgICAgem9uZWxpc3RfdCBub2RlX3pvbmVs aXN0c1sweDBmICsxXTsKICAgICAgICBpbnQgbnJfem9uZXM7CiAgICAgICAgc3RydWN0IHBhZ2Ug Km5vZGVfbWVtX21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nICp2YWxpZF9hZGRyX2JpdG1hcDsK ICAgICAgICBzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKICAgICAgICB1bnNpZ25lZCBsb25n IG5vZGVfc3RhcnRfcGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X21hcG5y OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZV9zaXplOwogICAgICAgIGludCBub2RlX2lkOwog ICAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9uZXh0Owp9IHBnX2RhdGFfdDsKCmV4dGVy biBpbnQgbnVtbm9kZXM7CmV4dGVybiBwZ19kYXRhX3QgKnBnZGF0X2xpc3Q7CiMgMTIzICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIgpzdHJ1Y3QgcGFnZTsKZXh0ZXJuIHZv aWQgc2hvd19mcmVlX2FyZWFzX2NvcmUocGdfZGF0YV90ICpwZ2RhdCk7CmV4dGVybiB2b2lkIGZy ZWVfYXJlYV9pbml0X2NvcmUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2Ug KipnbWFwLAogIHVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgcGFkZHIs IHVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplLAogIHN0cnVjdCBwYWdlICpwbWFwKTsKCmV4dGVy biBwZ19kYXRhX3QgY29udGlnX3BhZ2VfZGF0YTsKIyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zd2FwLmgi IDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA1 ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvc3dhcC5oIiAyCiMgMjUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3dhcC5oIgp1 bmlvbiBzd2FwX2hlYWRlciB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICAg ICAgY2hhciByZXNlcnZlZFsoMVVMIDw8IDEyKSAtIDEwXTsKICAgICAgICAgICAgICAgIGNoYXIg bWFnaWNbMTBdOwogICAgICAgIH0gbWFnaWM7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAg ICAgICAgICAgICAgY2hhciBib290Yml0c1sxMDI0XTsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCB2ZXJzaW9uOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcGFnZTsKICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9iYWRwYWdlczsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBwYWRkaW5nWzEyNV07CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFk cGFnZXNbMV07CiAgICAgICAgfSBpbmZvOwp9OwojIDUxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3N3YXAuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIg MQojIDUyICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIgMgojIDY0ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qg ewogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICAgICBrZGV2X3Qgc3dhcF9kZXZpY2U7 CiAgICAgICAgc3BpbmxvY2tfdCBzZGV2X2xvY2s7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqIHN3 YXBfZmlsZTsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKnN3YXBfdmZzbW50OwogICAgICAgIHVu c2lnbmVkIHNob3J0ICogc3dhcF9tYXA7CiAgICAgICAgdW5zaWduZWQgaW50IGxvd2VzdF9iaXQ7 CiAgICAgICAgdW5zaWduZWQgaW50IGhpZ2hlc3RfYml0OwogICAgICAgIHVuc2lnbmVkIGludCBj bHVzdGVyX25leHQ7CiAgICAgICAgdW5zaWduZWQgaW50IGNsdXN0ZXJfbnI7CiAgICAgICAgaW50 IHByaW87CiAgICAgICAgaW50IHBhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4OwogICAg ICAgIGludCBuZXh0Owp9OwoKZXh0ZXJuIGludCBucl9zd2FwX3BhZ2VzOwpleHRlcm4gdW5zaWdu ZWQgaW50IG5yX2ZyZWVfcGFnZXModm9pZCk7CmV4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9i dWZmZXJfcGFnZXModm9pZCk7CmV4dGVybiBpbnQgbnJfYWN0aXZlX3BhZ2VzOwpleHRlcm4gaW50 IG5yX2luYWN0aXZlX3BhZ2VzOwpleHRlcm4gYXRvbWljX3QgbnJfYXN5bmNfcGFnZXM7CmV4dGVy biBhdG9taWNfdCBwYWdlX2NhY2hlX3NpemU7CmV4dGVybiBhdG9taWNfdCBidWZmZXJtZW1fcGFn ZXM7CmV4dGVybiBzcGlubG9ja190IHBhZ2VjYWNoZV9sb2NrOwpleHRlcm4gdm9pZCBfX3JlbW92 ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwoKCnN0cnVjdCB0YXNrX3N0cnVjdDsKc3RydWN0 IHZtX2FyZWFfc3RydWN0OwpzdHJ1Y3Qgc3lzaW5mbzsKCnN0cnVjdCB6b25lX3Q7CgoKZXh0ZXJu IHZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CmV4dGVybiB2b2lkIF9fbHJ1X2NhY2hlX2RlbChzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGxydV9jYWNoZV9kZWwoc3RydWN0IHBh Z2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKZXh0ZXJuIHZvaWQgZGVhY3RpdmF0 ZV9wYWdlKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJu IHZvaWQgYWN0aXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CgpleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwoKCmV4dGVybiB3YWl0X3F1ZXVl X2hlYWRfdCBrc3dhcGRfd2FpdDsKZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyh6b25lX3Qg KiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykp KTsKCgpleHRlcm4gdm9pZCByd19zd2FwX3BhZ2UoaW50LCBzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJu IHZvaWQgcndfc3dhcF9wYWdlX25vbG9jayhpbnQsIHN3cF9lbnRyeV90LCBjaGFyICopOwoKCgoK CgpleHRlcm4gdm9pZCBzaG93X3N3YXBfY2FjaGVfaW5mbyh2b2lkKTsKCmV4dGVybiBpbnQgYWRk X3RvX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKiwgc3dwX2VudHJ5X3QpOwpleHRlcm4gdm9pZCBf X2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwpleHRlcm4gdm9pZCBk ZWxldGVfZnJvbV9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHZvaWQgZnJl ZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHN0cnVjdCBw YWdlICogbG9va3VwX3N3YXBfY2FjaGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gc3RydWN0IHBhZ2Ug KiByZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QpOwoKCmV4dGVybiBpbnQgb3V0X29m X21lbW9yeSh2b2lkKTsKZXh0ZXJuIHZvaWQgb29tX2tpbGwodm9pZCk7CgoKZXh0ZXJuIGludCB0 b3RhbF9zd2FwX3BhZ2VzOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX3N3YXBmaWxlczsKZXh0ZXJu IHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHN3YXBfaW5mb1tdOwpleHRlcm4gaW50IGlzX3N3YXBf cGFydGl0aW9uKGtkZXZfdCk7CmV4dGVybiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZv ICopOwpleHRlcm4gc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKTsKZXh0ZXJuIHZvaWQg Z2V0X3N3YXBoYW5kbGVfaW5mbyhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqLCBrZGV2X3Qg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAq Kik7CmV4dGVybiBpbnQgc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gaW50IHN3 YXBfY291bnQoc3RydWN0IHBhZ2UgKik7CmV4dGVybiBpbnQgdmFsaWRfc3dhcGhhbmRsZXMoc3dw X2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcgKik7CmV4dGVybiB2b2lkIHN3YXBfZnJlZShzd3BfZW50 cnlfdCk7CnN0cnVjdCBzd2FwX2xpc3RfdCB7CiAgICAgICAgaW50IGhlYWQ7CiAgICAgICAgaW50 IG5leHQ7Cn07CmV4dGVybiBzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dhcF9saXN0OwogX19hdHRyaWJ1 dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3N3YXBvZmYoY29uc3QgY2hhciAqKTsKIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zd2Fwb24oY29uc3QgY2hhciAqLCBpbnQp OwoKZXh0ZXJuIHNwaW5sb2NrX3QgcGFnZW1hcF9scnVfbG9jazsKCmV4dGVybiB2b2lkIG1hcmtf cGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CiMgMjIwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKZXh0ZXJuIHNwaW5s b2NrX3Qgc3dhcGxvY2s7CgoKCgoKCmV4dGVybiB2b2lkIHNobWVtX3VudXNlKHN3cF9lbnRyeV90 IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcmJ0cmVlLmgi IDEKIyAxNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAyCgpleHRlcm4gdW5z aWduZWQgbG9uZyBtYXhfbWFwbnI7CmV4dGVybiB1bnNpZ25lZCBsb25nIG51bV9waHlzcGFnZXM7 CmV4dGVybiB2b2lkICogaGlnaF9tZW1vcnk7CmV4dGVybiBpbnQgcGFnZV9jbHVzdGVyOwoKZXh0 ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CmV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFk IGluYWN0aXZlX2xpc3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIg MQojIDI1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20v cGd0YWJsZS5oIiAyCiMgMTYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIK IyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQojIDE3ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2FzbS9maXhtYXAuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9m aXhtYXAuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMg MTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2FzbS9maXhtYXAuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2FwaWNk ZWYuaCIgMQojIDEyMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXBpY2RlZi5oIgpzdHJ1 Y3QgbG9jYWxfYXBpYyB7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVk WzRdOyB9IF9fcmVzZXJ2ZWRfMDE7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jl c2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8xIDogMjQsCiAgICAgICAgICAgICAgICAgICAg ICAgIHBoeXNfYXBpY19pZCA6IDQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRf MiA6IDQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAg ICB9IGlkOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdmVyc2lvbiA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2 ZWRfMSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sdnQgOiA4LAogICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiA4OwogICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAgfSB2ZXJzaW9uOwoKICAgICAgICBzdHJ1Y3QgeyB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAzOwoKICAgICAgICBzdHJ1 Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA0OwoKICAgICAg ICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA1OwoK ICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVk XzA2OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByaW9y aXR5IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMjQ7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNdOwogICAgICAgIH0gdHByOwoK ICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgcHJpb3JpdHkgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAy NDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAg fSBhcHI7CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBwcmlvcml0eSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2 ZWRfMSA6IDI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsK ICAgICAgICB9IHBwcjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBlb2k7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAg ICAgICB9IGVvaTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8wNzsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX3Jlc2VydmVkXzEgOiAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNh bF9kZXN0IDogODsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107 CiAgICAgICAgfSBsZHI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX19yZXNlcnZlZF8xIDogMjgsCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIDog NDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAg fSBkZnI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3B1 cmlvdXNfdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgYXBpY19lbmFibGVkIDog MSwKICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNfY3B1IDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXNlcnZlZF8yIDogMjI7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg X19yZXNlcnZlZF8zWzNdOwogICAgICAgIH0gc3ZyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGJpdGZpZWxkOwogICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAgfSBpc3IgWzhdOwoKICAgICAgICBzdHJ1Y3Qgewog ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdGZpZWxkOwogICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAgfSB0bXIgWzhdOwoKICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdGZpZWxkOwogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAgfSBpcnIgWzhdOwoKICAgICAg ICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgc2VuZF9jc19lcnJvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVjZWl2ZV9jc19lcnJvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VuZF9hY2NlcHRfZXJyb3IgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlY2VpdmVfYWNjZXB0X2Vycm9yIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl bmRfaWxsZWdhbF92ZWN0b3IgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Y2VpdmVfaWxsZWdhbF92ZWN0b3IgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlsbGVnYWxfcmVnaXN0ZXJfYWRkcmVzcyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXNlcnZlZF8yIDogMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgICAgICAgICB9IGVycm9yX2JpdHM7CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg ZXJyb3JzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8z WzNdOwogICAgICAgICAgICAgICAgfSBhbGxfZXJyb3JzOwogICAgICAgIH0gZXNyOwoKICAgICAg ICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA4OwoK ICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVk XzA5OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jl c2VydmVkXzEwOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsg fSBfX3Jlc2VydmVkXzExOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZl ZFs0XTsgfSBfX3Jlc2VydmVkXzEyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEzOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE0OwoKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAg ICAgIGRlbGl2ZXJ5X21vZGUgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlv bl9tb2RlIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgbGV2ZWwgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMiwKICAgICAgICAgICAgICAg ICAgICAgICAgc2hvcnRoYW5kIDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZl ZF8zIDogMTI7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwog ICAgICAgIH0gaWNyMTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuaW9uIHsK ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfZGVzdCA6IDQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogNDsKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMyA6IDI0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvZ2ljYWxfZGVzdCA6IDg7CiAgICAgICAgICAgICAgICB9IGRlc3Q7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gaWNy MjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3Ig OiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiA0LAogICAgICAgICAg ICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAg ICAgICAgICAgICAgICAgICAgICAgdGltZXJfbW9kZSA6IDEsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzZXJ2ZWRfMyA6IDE0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVz ZXJ2ZWRfNFszXTsKICAgICAgICB9IGx2dF90aW1lcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNTsKCiAgICAgICAgc3RydWN0IHsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAg ICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8xIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAg ICAgICAgICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6 IDE1OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAg ICB9IGx2dF9wYzsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9s YXJpdHkgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfaXJyIDogMSwKICAgICAg ICAgICAgICAgICAgICAgICAgdHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1h c2sgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAxNTsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgfSBsdnRfbGlu dDA7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9y IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAg IGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5IDog MSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2lyciA6IDEsCiAgICAgICAgICAgICAg ICAgICAgICAgIHRyaWdnZXIgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBtYXNrIDogMSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMTU7CiAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAgICAgIH0gbHZ0X2xpbnQxOwoKICAg ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDQsCiAgICAgICAgICAgICAgICAg ICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz ZXJ2ZWRfMiA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAxLAogICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc2VydmVkXzMgOiAxNTsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX3Jlc2VydmVkXzRbM107CiAgICAgICAgfSBsdnRfZXJyb3I7CgogICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5pdGlhbF9jb3VudDsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9pY3I7 CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBjdXJyX2NvdW50OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRf MlszXTsKICAgICAgICB9IHRpbWVyX2NjcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50 IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNzsKCiAgICAgICAgc3RydWN0IHsg dW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xODsKCiAgICAgICAgc3Ry dWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xOTsKCiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkaXZpc29yIDogNCwKICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMjg7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNdOwogICAgICAgIH0gdGltZXJfZGNyOwoKICAgICAg ICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzIwOwoK fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiMgMTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv YXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAx CiMgMjAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgNTAgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgplbnVtIGZpeGVkX2FkZHJlc3NlcyB7CiMg NjggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIF9fZW5kX29m X2ZpeGVkX2FkZHJlc3Nlcwp9OwoKZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwIChlbnVtIGZpeGVk X2FkZHJlc3NlcyBpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIyA5NCAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9hc20vZml4bWFwLmgiCmV4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3Rf ZXhpc3Qodm9pZCk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmly dChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQp7CiMgMTEyICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9maXhtYXAuaCIKICAgICAgICBpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3Nl cykKICAgICAgICAgICAgICAgIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3QoKTsKCiAgICAg ICAgcmV0dXJuICgoMHhmZmZmZTAwMFVMKSAtICgoaWR4KSA8PCAxMikpOwp9CiMgMTggIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L3BndGFibGUuaCIgMgoKCgoKCmV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKZXh0 ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiMgNjcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv YXNtL3BndGFibGUuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGdrZXJuX21hc2s7CiMgOTUgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg ZW1wdHlfemVyb19wYWdlWzEwMjRdOwojIDEwOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20v cGd0YWJsZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVs LmgiIDEKIyAzMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCIK c3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CnN0YXRp YyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CnN0YXRpYyBpbmxp bmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkgeyByZXR1cm4gMTsgfQojIDUzICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIgpzdGF0aWMgaW5saW5lIHBtZF90 ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAg ICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7Cn0KIyAxMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv YXNtL3BndGFibGUuaCIgMgojIDI0NCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJs ZS5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwZzBbMTAyNF07CiMgMjY1ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90 IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50 IHB0ZV9leGVjKHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0 YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIChwdGUpLnB0ZV9s b3cgJiAweDA0MDsgfQpzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJl dHVybiAocHRlKS5wdGVfbG93ICYgMHgwMjA7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRl KHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDAyOyB9CgpzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4 MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVf dCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgw NDA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRl KSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDIwOyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDI7 IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkg eyAocHRlKS5wdGVfbG93IHw9IDB4MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRl X3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAwNDsgcmV0dXJu IHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeyAocHRl KS5wdGVfbG93IHw9IDB4MDQwOyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21reW91bmcocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgfD0gMHgwMjA7IHJldHVybiBwdGU7 IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsgKHB0ZSkucHRl X2xvdyB8PSAweDAwMjsgcmV0dXJuIHB0ZTsgfQoKc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0 X2FuZF9jbGVhcl9kaXJ0eShwdGVfdCAqcHRlcCkgeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0 KDYsIHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmco cHRlX3QgKnB0ZXApIHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdCg1LCBwdGVwKTsgfQpzdGF0 aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHB0ZV90ICpwdGVwKSB7IGNsZWFyX2Jp dCgxLCBwdGVwKTsgfQpzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9ta2RpcnR5KHB0ZV90ICpwdGVw KSB7IHNldF9iaXQoNiwgcHRlcCk7IH0KIyAyOTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L3BndGFibGUuaCIKc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdw cm90X3QgbmV3cHJvdCkKewogICAgICAgIHB0ZS5wdGVfbG93ICY9ICgofigoMVVMIDw8IDEyKS0x KSkgfCAweDAyMCB8IDB4MDQwKTsKICAgICAgICBwdGUucHRlX2xvdyB8PSAoKG5ld3Byb3QpLnBn cHJvdCk7CiAgICAgICAgcmV0dXJuIHB0ZTsKfQojIDI2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIg MQojIDI3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyA0MyAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIgpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogICAg ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKiB2bV9tbTsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX3N0 YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdm1fZW5kOwoKCiAgICAgICAgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bV9uZXh0OwoKICAgICAgICBwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7CiAgICAg ICAgdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKCiAgICAgICAgcmJfbm9kZV90IHZtX3JiOwoKCgoK CgogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1fbmV4dF9zaGFyZTsKICAgICAgICBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bV9wcHJldl9zaGFyZTsKCgogICAgICAgIHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCAqIHZtX29wczsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgdm1f cGdvZmY7CgogICAgICAgIHN0cnVjdCBmaWxlICogdm1fZmlsZTsKICAgICAgICB1bnNpZ25lZCBs b25nIHZtX3JhZW5kOwogICAgICAgIHZvaWQgKiB2bV9wcml2YXRlX2RhdGE7Cn07CiMgMTE3ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiBwZ3Byb3RfdCBwcm90ZWN0 aW9uX21hcFsxNl07CgoKCgoKCgpzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgewogICAgICAg IHZvaWQgKCpvcGVuKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBhcmVhKTsKICAgICAgICB2b2lk ICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEpOwogICAgICAgIHN0cnVjdCBw YWdlICogKCpub3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEsIHVuc2lnbmVkIGxv bmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7Cn07CiMgMTQ2ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L21tLmgiCnR5cGVkZWYgc3RydWN0IHBhZ2UgewogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKICAg ICAgICB1bnNpZ25lZCBsb25nIGluZGV4OwogICAgICAgIHN0cnVjdCBwYWdlICpuZXh0X2hhc2g7 CgogICAgICAgIGF0b21pY190IGNvdW50OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cgog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbHJ1OwoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3 YWl0OwogICAgICAgIHN0cnVjdCBwYWdlICoqcHByZXZfaGFzaDsKICAgICAgICBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKiBidWZmZXJzOwogICAgICAgIHZvaWQgKnZpcnR1YWw7CgogICAgICAgIHN0cnVj dCB6b25lX3N0cnVjdCAqem9uZTsKfSBtZW1fbWFwX3Q7CiMgMjk5ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiB2b2lkIF9fc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBh Z2UgKik7CgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKiBw YWdlKQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDQsICZwYWdlLT5mbGFncykpCiAg ICAgICAgICAgICAgICBfX3NldF9wYWdlX2RpcnR5KHBhZ2UpOwp9CiMgMzY0ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiBtZW1fbWFwX3QgKiBtZW1fbWFwOwoKCgoK CgoKZXh0ZXJuIHN0cnVjdCBwYWdlICogX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFz aywgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biBzdHJ1Y3QgcGFnZSAqIF9fYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNp Z25lZCBpbnQgb3JkZXIsIHpvbmVsaXN0X3QgKnpvbmVsaXN0KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2VzX25vZGUoaW50IG5pZCwg dW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwoKc3RhdGljIGlubGlu ZSBzdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5zaWdu ZWQgaW50IG9yZGVyKQp7CgoKCiAgICAgICAgaWYgKG9yZGVyID49IDEwKQogICAgICAgICAgICAg ICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHJldHVybiBfYWxsb2NfcGFnZXMoZ2ZwX21h c2ssIG9yZGVyKTsKfQoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKHVu c2lnbmVkIGludCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGdldF96ZXJvZWRfcGFnZSh1bnNpZ25l ZCBpbnQgZ2ZwX21hc2spIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyA0MDUgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIKZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzKHN0 cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMykpKTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2ln bmVkIGludCBvcmRlcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCgoKZXh0ZXJuIHZv aWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfbm9k ZShwZ19kYXRhX3QgKnBnZGF0KTsKCmV4dGVybiB2b2lkIGNsZWFyX3BhZ2VfdGFibGVzKHN0cnVj dCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKCnN0cnVjdCBwYWdlICogc2htZW1f bm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNz LCBpbnQgbm9fc2hhcmUpOwpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjaGFyICogbmFt ZSwgbG9mZl90IHNpemUpOwpleHRlcm4gdm9pZCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICogZmls ZSwgaW50IGxvY2spOwpleHRlcm4gaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFf c3RydWN0ICopOwoKZXh0ZXJuIHZvaWQgemFwX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAq bW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsKZXh0ZXJuIGlu dCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0 ICpzcmMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZXh0ZXJuIGludCByZW1hcF9wYWdl X3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywgdW5zaWduZWQgbG9u ZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIGludCB6ZXJvbWFwX3BhZ2VfcmFuZ2UodW5z aWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwoKZXh0 ZXJuIGludCB2bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb2ZmX3Qgb2Zmc2V0KTsK ZXh0ZXJuIHBtZF90ICpfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBn ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4 dGVybiBwdGVfdCAqcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCB1 bnNpZ25lZCBsb25nIGFkZHJlc3MpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJu IGludCBoYW5kbGVfbW1fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CmV4 dGVybiBpbnQgbWFrZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQg bG9uZyBlbmQpOwpleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRl KTsKZXh0ZXJuIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVu c2lnbmVkIGxvbmcgc3JjLCBjaGFyICpkc3QsIGludCBsZW4pOwpleHRlcm4gaW50IHB0cmFjZV93 cml0ZWRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgKiBzcmMsIHVuc2lnbmVkIGxv bmcgZHN0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdHNrKTsKZXh0ZXJuIGludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAq LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19z dHJ1Y3QgKik7CgoKCgoKCnN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvYyhzdHJ1Y3QgbW1f c3RydWN0ICptbSwgcGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAgICAg aWYgKHBnZF9ub25lKCpwZ2QpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG1kX2FsbG9jKG1t LCBwZ2QsIGFkZHJlc3MpOwogICAgICAgIHJldHVybiBwbWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7 Cn0KCmV4dGVybiBpbnQgcGd0X2NhY2hlX3dhdGVyWzJdOwpleHRlcm4gaW50IGNoZWNrX3BndF9j YWNoZSh2b2lkKTsKCmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0KHVuc2lnbmVkIGxvbmcgKiB6 b25lc19zaXplKTsKZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQgbmlkLCBwZ19k YXRhX3QgKnBnZGF0LCBzdHJ1Y3QgcGFnZSAqcG1hcCwKICAgICAgICB1bnNpZ25lZCBsb25nICog em9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BhZGRyLAogICAgICAgIHVuc2ln bmVkIGxvbmcgKnpob2xlc19zaXplKTsKZXh0ZXJuIHZvaWQgbWVtX2luaXQodm9pZCk7CmV4dGVy biB2b2lkIHNob3dfbWVtKHZvaWQpOwpleHRlcm4gdm9pZCBzaV9tZW1pbmZvKHN0cnVjdCBzeXNp bmZvICogdmFsKTsKZXh0ZXJuIHZvaWQgc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCk7Cgpl eHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcHBlcl9zcGFjZTsKCgpzdGF0aWMgaW5saW5l IGludCBpc19wYWdlX2NhY2hlX2ZyZWVhYmxlKHN0cnVjdCBwYWdlICogcGFnZSkKewogICAgICAg IHJldHVybiAoKCYocGFnZSktPmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1ZmZlcnMgPT0g MTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGV4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBh Z2UgKnBhZ2UpCnsKICAgICAgICBpZiAoIShfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IGNvbnN0 YW50X3Rlc3RfYml0KCgwKSwoJihwYWdlKS0+ZmxhZ3MpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KCgw KSwoJihwYWdlKS0+ZmxhZ3MpKSkpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAgaWYgKCEoKHBhZ2UpLT5tYXBwaW5nID09ICZz d2FwcGVyX3NwYWNlKSkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICgoKCYo cGFnZSktPmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1ZmZlcnMgIT0gMikKICAgICAgICAg ICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiBzd2FwX2NvdW50KHBhZ2UpID09IDE7Cn0K CmV4dGVybiB2b2lkIF9fZnJlZV9wdGUocHRlX3QpOwoKCmV4dGVybiB2b2lkIGxvY2tfdm1hX21h cHBpbmdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgdW5sb2NrX3ZtYV9t YXBwaW5ncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGluc2VydF92bV9z dHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVy biB2b2lkIF9faW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgYnVpbGRfbW1hcF9yYihzdHJ1Y3QgbW1fc3RydWN0 ICopOwpleHRlcm4gdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqKTsKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxv bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgZG9fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQg bG9uZyBhZGRyLAogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3Qs CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKCnN0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25l ZCBsb25nIGFkZHIsCiAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJv dCwKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQp7CiAg ICAgICAgdW5zaWduZWQgbG9uZyByZXQgPSAtMjI7CiAgICAgICAgaWYgKChvZmZzZXQgKyAoKChs ZW4pKygxVUwgPDwgMTIpLTEpJih+KCgxVUwgPDwgMTIpLTEpKSkpIDwgb2Zmc2V0KQogICAgICAg ICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgaWYgKCEob2Zmc2V0ICYgfih+KCgxVUwgPDwgMTIp LTEpKSkpCiAgICAgICAgICAgICAgICByZXQgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFkZHIsIGxl biwgcHJvdCwgZmxhZywgb2Zmc2V0ID4+IDEyKTsKb3V0OgogICAgICAgIHJldHVybiByZXQ7Cn0K CmV4dGVybiBpbnQgZG9fbXVubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywg c2l6ZV90KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nLCB1bnNp Z25lZCBsb25nKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtYV91bmxpbmsoc3RydWN0IG1tX3N0 cnVjdCAqIG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqIHByZXYpCnsKICAgICAgICBwcmV2LT52bV9uZXh0ID0gdm1hLT52bV9uZXh0OwogICAg ICAgIHJiX2VyYXNlKCZ2bWEtPnZtX3JiLCAmbW0tPm1tX3JiKTsKICAgICAgICBpZiAobW0tPm1t YXBfY2FjaGUgPT0gdm1hKQogICAgICAgICAgICAgICAgbW0tPm1tYXBfY2FjaGUgPSBwcmV2Owp9 CgpzdGF0aWMgaW5saW5lIGludCBjYW5fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq IHZtYSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKewogICAgICAgIGlmICghdm1hLT52bV9maWxl ICYmIHZtYS0+dm1fZmxhZ3MgPT0gdm1fZmxhZ3MpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsK ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKfQoKc3RydWN0IHpvbmVfdDsK CmV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gdW5z aWduZWQgbG9uZyBwYWdlX3VudXNlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gdm9pZCB0cnVuY2F0 ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QpOwoKCmV4dGVybiBp bnQgZmlsZW1hcF9zeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBz aXplX3QsIHVuc2lnbmVkIGludCk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqZmlsZW1hcF9ub3BhZ2Uo c3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CiMgNTc1ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCnN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9z dGFjayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykK ewogICAgICAgIHVuc2lnbmVkIGxvbmcgZ3JvdzsKCgoKCgoKICAgICAgICBhZGRyZXNzICY9ICh+ KCgxVUwgPDwgMTIpLTEpKTsKICAgICAgICBncm93ID0gKHZtYS0+dm1fc3RhcnQgLSBhZGRyZXNz KSA+PiAxMjsKICAgICAgICBpZiAodm1hLT52bV9lbmQgLSBhZGRyZXNzID4gZ2V0X2N1cnJlbnQo KS0+cmxpbVszXS5ybGltX2N1ciB8fAogICAgICAgICAgICAoKHZtYS0+dm1fbW0tPnRvdGFsX3Zt ICsgZ3JvdykgPDwgMTIpID4gZ2V0X2N1cnJlbnQoKS0+cmxpbVs5XS5ybGltX2N1cikKICAgICAg ICAgICAgICAgIHJldHVybiAtMTI7CiAgICAgICAgKHZvaWQpKCZ2bWEtPnZtX21tLT5wYWdlX3Rh YmxlX2xvY2spOwogICAgICAgIHZtYS0+dm1fc3RhcnQgPSBhZGRyZXNzOwogICAgICAgIHZtYS0+ dm1fcGdvZmYgLT0gZ3JvdzsKICAgICAgICB2bWEtPnZtX21tLT50b3RhbF92bSArPSBncm93Owog ICAgICAgIGlmICh2bWEtPnZtX2ZsYWdzICYgMHgwMDAwMjAwMCkKICAgICAgICAgICAgICAgIHZt YS0+dm1fbW0tPmxvY2tlZF92bSArPSBncm93OwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAg ICAgICByZXR1cm4gMDsKfQoKCmV4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3Zt YShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CmV4dGVybiBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYV9wcmV2KHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwg dW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcHJldik7CgoKCnN0YXRpYyBpbmxpbmUg c3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfaW50ZXJzZWN0aW9uKHN0cnVjdCBtbV9z dHJ1Y3QgKiBtbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCB1bnNpZ25lZCBsb25nIGVuZF9h ZGRyKQp7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hID0gZmluZF92bWEobW0s c3RhcnRfYWRkcik7CgogICAgICAgIGlmICh2bWEgJiYgZW5kX2FkZHIgPD0gdm1hLT52bV9zdGFy dCkKICAgICAgICAgICAgICAgIHZtYSA9ICgodm9pZCAqKTApOwogICAgICAgIHJldHVybiB2bWE7 Cn0KCmV4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYShzdHJ1Y3Qg bW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIyAxNSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9zbGFiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2NhY2hlLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbGFiLmgiIDIK IyA0OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbGFiLmgiCmV4dGVybiB2b2lkIGtt ZW1fY2FjaGVfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9zaXplc19pbml0KHZv aWQpOwoKZXh0ZXJuIGttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVf dCwgaW50IGdmcGZsYWdzKTsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqa21lbV9jYWNoZV9jcmVhdGUo Y29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikodm9pZCAqLCBrbWVtX2NhY2hlX3Qg KiwgdW5zaWduZWQgbG9uZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCopKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpKTsKZXh0ZXJu IGludCBrbWVtX2NhY2hlX2Rlc3Ryb3koa21lbV9jYWNoZV90ICopOwpleHRlcm4gaW50IGttZW1f Y2FjaGVfc2hyaW5rKGttZW1fY2FjaGVfdCAqKTsKZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxs b2Moa21lbV9jYWNoZV90ICosIGludCk7CmV4dGVybiB2b2lkIGttZW1fY2FjaGVfZnJlZShrbWVt X2NhY2hlX3QgKiwgdm9pZCAqKTsKCmV4dGVybiB2b2lkICprbWFsbG9jKHNpemVfdCwgaW50KTsK ZXh0ZXJuIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsKCmV4dGVybiBpbnQga21lbV9jYWNoZV9y ZWFwKGludCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50IHNsYWJpbmZv X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7 CmV4dGVybiBpbnQgc2xhYmluZm9fd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qg Y2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNv dW50LCB2b2lkICpkYXRhKTsKCgpleHRlcm4ga21lbV9jYWNoZV90ICp2bV9hcmVhX2NhY2hlcDsK ZXh0ZXJuIGttZW1fY2FjaGVfdCAqbW1fY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpuYW1l c19jYWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmZpbGVzX2NhY2hlcDsKZXh0ZXJuIGttZW1f Y2FjaGVfdCAqZmlscF9jYWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmRxdW90X2NhY2hlcDsK ZXh0ZXJuIGttZW1fY2FjaGVfdCAqYmhfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpmc19j YWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKnNpZ2FjdF9jYWNoZXA7CiMgMzEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vc2NhdHRlcmxpc3QuaCIgMQoKCgpzdHJ1Y3Qgc2NhdHRlcmxpc3QgewogICAgY2hhciAqIGFk ZHJlc3M7CgogICAgc3RydWN0IHBhZ2UgKiBwYWdlOwogICAgdW5zaWduZWQgaW50IG9mZnNldDsK CiAgICBkbWFfYWRkcl90IGRtYV9hZGRyZXNzOwogICAgdW5zaWduZWQgaW50IGxlbmd0aDsKfTsK IyAzMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL3BjaS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vaW8uaCIgMQoK CgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2FzbS9pby5oIiAyCiMgNDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL2lvLmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC92bWFsbG9jLmgi IDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDEKIyA1ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvdm1hbGxvYy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9j ay5oIiAxCiMgNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDIKCiMg MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIiAxCiMgOSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDIKCgoKCgpzdHJ1Y3Qgdm1fc3RydWN0IHsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHZvaWQgKiBhZGRyOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2l6ZTsKICAgICAgICBzdHJ1Y3Qgdm1fc3RydWN0ICogbmV4dDsKfTsK CmV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICogZ2V0X3ZtX2FyZWEgKHVuc2lnbmVkIGxvbmcgc2l6 ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CmV4dGVybiB2b2lkIHZmcmVlKHZvaWQgKiBhZGRyKTsK ZXh0ZXJuIHZvaWQgKiBfX3ZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGdmcF9tYXNr LCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIGxvbmcgdnJlYWQoY2hhciAqYnVmLCBjaGFyICphZGRy LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKZXh0ZXJuIHZvaWQgdm1mcmVlX2FyZWFfcGFnZXModW5z aWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUpOwpleHRlcm4gaW50IHZtYWxs b2NfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90 KTsKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiB2bWFsbG9jICh1bnNpZ25lZCBsb25nIHNpemUp CnsKICAgICAgICByZXR1cm4gX192bWFsbG9jKHNpemUsICgweDIwIHwgMHgxMCB8IDB4NDAgfCAw eDgwIHwgMHgxMDApIHwgMHgwMiwgKHsgcGdwcm90X3QgX19yZXQ7IGlmICgoKF9fYnVpbHRpbl9j b25zdGFudF9wKCgwKjMyKzEzKSkgPyBjb25zdGFudF90ZXN0X2JpdCgoKDAqMzIrMTMpKSwoYm9v dF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKCgwKjMyKzEz KSksKGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpKSkpKSBfX3JldCA9ICgocGdwcm90X3Qp IHsgKCgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwgMHgwMjApKSB8IDB4MTAwKSB9ICk7IGVsc2Ug X19yZXQgPSAoKHBncHJvdF90KSB7ICgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwgMHgwMjApKSB9 ICk7IF9fcmV0OyB9KSk7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiB2bWFsbG9jX2RtYSAo dW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJuIF9fdm1hbGxvYyhzaXplLCAoMHgy MCB8IDB4MTAgfCAweDQwIHwgMHg4MCB8IDB4MTAwKXwweDAxLCAoeyBwZ3Byb3RfdCBfX3JldDsg aWYgKCgoX19idWlsdGluX2NvbnN0YW50X3AoKDAqMzIrMTMpKSA/IGNvbnN0YW50X3Rlc3RfYml0 KCgoMCozMisxMykpLChib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkgOiB2YXJpYWJsZV90 ZXN0X2JpdCgoKDAqMzIrMTMpKSwoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkpKSkpIF9f cmV0ID0gKChwZ3Byb3RfdCkgeyAoKCgweDAwMSB8IDB4MDAyIHwgMHgwNDAgfCAweDAyMCkpIHwg MHgxMDApIH0gKTsgZWxzZSBfX3JldCA9ICgocGdwcm90X3QpIHsgKCgweDAwMSB8IDB4MDAyIHwg MHgwNDAgfCAweDAyMCkpIH0gKTsgX19yZXQ7IH0pKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCAqIHZtYWxsb2NfMzIodW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJuIF9fdm1h bGxvYyhzaXplLCAoMHgyMCB8IDB4MTAgfCAweDQwIHwgMHg4MCB8IDB4MTAwKSwgKHsgcGdwcm90 X3QgX19yZXQ7IGlmICgoKF9fYnVpbHRpbl9jb25zdGFudF9wKCgwKjMyKzEzKSkgPyBjb25zdGFu dF90ZXN0X2JpdCgoKDAqMzIrMTMpKSwoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkpIDog dmFyaWFibGVfdGVzdF9iaXQoKCgwKjMyKzEzKSksKGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxp dHkpKSkpKSBfX3JldCA9ICgocGdwcm90X3QpIHsgKCgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwg MHgwMjApKSB8IDB4MTAwKSB9ICk7IGVsc2UgX19yZXQgPSAoKHBncHJvdF90KSB7ICgoMHgwMDEg fCAweDAwMiB8IDB4MDQwIHwgMHgwMjApKSB9ICk7IF9fcmV0OyB9KSk7Cn0KCgoKCgpleHRlcm4g cndsb2NrX3Qgdm1saXN0X2xvY2s7CgpleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqIHZtbGlzdDsK IyA0NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vaW8uaCIgMgojIDY2ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS9pby5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90 b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQp7CiAgICAgICAgcmV0dXJuICgodW5zaWdu ZWQgbG9uZykoYWRkcmVzcyktKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAg ICAgICAgcmV0dXJuICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYWRkcmVzcykrKCh1bnNpZ25l ZCBsb25nKSgweEMwMDAwMDAwKSkpKTsKfQoKCgoKCgpleHRlcm4gdm9pZCAqIF9faW9yZW1hcCh1 bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZs YWdzKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIGlvcmVtYXAgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0 LCB1bnNpZ25lZCBsb25nIHNpemUpCnsKICAgICAgICByZXR1cm4gX19pb3JlbWFwKG9mZnNldCwg c2l6ZSwgMCk7Cn0KCgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogaW9yZW1hcF9ub2NhY2hlICh1 bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJu IF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDB4MDEwKTsKfQoKZXh0ZXJuIHZvaWQgaW91bm1hcCh2 b2lkICphZGRyKTsKIyAxNjAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lvLmgiCnN0YXRp YyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVyZSh1bnNpZ25lZCBsb25nIGlvX2FkZHIsCiAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAg aW50IHJldHZhbCA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKCgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvX2FkZHIpKSkgIT0gKnNpZ25hdHVyZSkK ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICBpb19hZGRy Kys7CiAgICAgICAgICAgICAgICBzaWduYXR1cmUrKzsKICAgICAgICAgICAgICAgIGxlbmd0aC0t OwogICAgICAgIH0gd2hpbGUgKGxlbmd0aCk7CiAgICAgICAgcmV0dmFsID0gMTsKb3V0OgogICAg ICAgIHJldHVybiByZXR2YWw7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGlzYV9jaGVja19zaWduYXR1 cmUodW5zaWduZWQgbG9uZyBpb19hZGRyLAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNp Z25hdHVyZSwgaW50IGxlbmd0aCkKewogICAgICAgIGludCByZXR2YWwgPSAwOwogICAgICAgIGRv IHsKICAgICAgICAgICAgICAgIGlmICgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9p ZCAqKSgoKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpKSArIChpb19hZGRy KSkpKSAhPSAqc2lnbmF0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAg ICAgICAgICAgICAgIGlvX2FkZHIrKzsKICAgICAgICAgICAgICAgIHNpZ25hdHVyZSsrOwogICAg ICAgICAgICAgICAgbGVuZ3RoLS07CiAgICAgICAgfSB3aGlsZSAobGVuZ3RoKTsKICAgICAgICBy ZXR2YWwgPSAxOwpvdXQ6CiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQojIDI4NSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYih1 bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGNoYXIgX3Y7IF9fYXNtX18gX192b2xhdGls ZV9fICgiaW4iICJiIiAiICUiICJ3IiAiMSwlIiAiIiAiMCIgOiAiPWEiIChfdikgOiAiTmQiIChw b3J0KSApOyByZXR1cm4gX3Y7IH0gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYl9wKHVu c2lnbmVkIHNob3J0IHBvcnQpIHsgdW5zaWduZWQgY2hhciBfdjsgX19hc21fXyBfX3ZvbGF0aWxl X18gKCJpbiIgImIiICIgJSIgInciICIxLCUiICIiICIwIiAiXG5vdXRiICUlYWwsJDB4ODAiIDog Ij1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsgcmV0dXJuIF92OyB9CgoKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBzaG9ydCBpbncodW5zaWduZWQgc2hvcnQgcG9ydCkgeyB1bnNpZ25lZCBzaG9ydCBf djsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgInciICIgJSIgInciICIxLCUiICIiICIwIiA6 ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVu c2lnbmVkIHNob3J0IGlud19wKHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgdW5zaWduZWQgc2hvcnQg X3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJ3IiAiICUiICJ3IiAiMSwlIiAiIiAiMCIg Ilxub3V0YiAlJWFsLCQweDgwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBf djsgfQoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlubCh1bnNpZ25lZCBzaG9ydCBwb3J0 KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIg InciICIxLCUiICIiICIwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsg fSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbmxfcCh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7 IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgInci ICIxLCUiICIiICIwIiAiXG5vdXRiICUlYWwsJDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9y dCkgKTsgcmV0dXJuIF92OyB9CgoKc3RhdGljIGlubGluZSB2b2lkIG91dGIodW5zaWduZWQgY2hh ciB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm91 dCIgImIiICIgJSIgImIiICIwLCUiICJ3IiAiMSIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0 KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNp Z25lZCBzaG9ydCBwb3J0KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgib3V0IiAiYiIgIiAlIiAi YiIgIjAsJSIgInciICIxIiAiXG5vdXRiICUlYWwsJDB4ODAiIDogOiAiYSIgKHZhbHVlKSwgIk5k IiAocG9ydCkpO30Kc3RhdGljIGlubGluZSB2b2lkIG91dHcodW5zaWduZWQgc2hvcnQgdmFsdWUs IHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJ3IiAi ICUiICJ3IiAiMCwlIiAidyIgIjEiIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyB9IHN0 YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNo b3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwl IiAidyIgIjEiICJcbm91dGIgJSVhbCwkMHg4MCIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0 KSk7fQpzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVk IHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJsIiAiICUiICIwLCUi ICJ3IiAiMSIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2 b2lkIG91dGxfcCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJsIiAiICUiICIwLCUiICJ3IiAiMSIgIlxub3V0YiAl JWFsLCQweDgwIiA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTt9CgpzdGF0aWMgaW5saW5l IHZvaWQgaW5zYih1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9u ZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJlcCA7IGlucyIgImIiIDogIj1EIiAo YWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7 IH0Kc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqIGFk ZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZXAgOyBp bnMiICJ3IiA6ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCkgOiAiZCIgKHBvcnQpLCIwIiAoYWRk ciksIjEiIChjb3VudCkpOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIHNob3J0 IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xh dGlsZV9fICgicmVwIDsgaW5zIiAibCIgOiAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQi IChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291bnQpKTsgfQoKc3RhdGljIGlubGluZSB2b2lkIG91 dHNiKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25n IGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgImIiIDogIj1TIiAo YWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7 IH0Kc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZv aWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgi cmVwIDsgb3V0cyIgInciIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCks IjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2ln bmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7 IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgImwiIDogIj1TIiAoYWRkciksICI9 YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0KIyAzNCAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiIDIKCnN0cnVjdCBwY2lfZGV2OwojIDUw ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIKZXh0ZXJuIHZvaWQgKnBjaV9hbGxv Y19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKIyA2MSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiCmV4dGVybiB2b2lkIHBjaV9mcmVlX2Nv bnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsK CgoKCgoKCnN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNp X2RldiAqaHdkZXYsIHZvaWQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlv biA9PSAzKQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYs MHgwYiIpOwogICAgICAgIHJldHVybiB2aXJ0X3RvX3BoeXMocHRyKTsKfQojIDg1ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIKc3RhdGljIGlubGluZSB2b2lkIHBjaV91bm1hcF9z aW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikK ewogICAgICAgIGlmIChkaXJlY3Rpb24gPT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKCn0KCgoKCgpzdGF0aWMgaW5saW5lIGRtYV9h ZGRyX3QgcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHBhZ2UgKnBh Z2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBv ZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlv biA9PSAzKQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYs MHgwYiIpOwoKICAgICAgICByZXR1cm4gKHBhZ2UgLSBtZW1fbWFwKSAqICgxVUwgPDwgMTIpICsg b2Zmc2V0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9k ZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBpZiAoZGly ZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUg MHgwZiwweDBiIik7Cgp9CiMgMTI5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIK c3RhdGljIGlubGluZSBpbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVj dCBzY2F0dGVybGlzdCAqc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5lbnRz LCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaW50IGk7CgogICAgICAgIGlmIChkaXJlY3Rpb24g PT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4 MGIiKTsKCgoKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKysgKSB7CiAgICAgICAg ICAgICAgICBpZiAoc2dbaV0uYWRkcmVzcyAmJiBzZ1tpXS5wYWdlKQogICAgICAgICAgICAgICAg ICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAg ICAgICAgICBlbHNlIGlmICghc2dbaV0uYWRkcmVzcyAmJiAhc2dbaV0ucGFnZSkKICAgICAgICAg ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoK ICAgICAgICAgICAgICAgIGlmIChzZ1tpXS5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICAg ICBzZ1tpXS5kbWFfYWRkcmVzcyA9IHZpcnRfdG9fcGh5cyhzZ1tpXS5hZGRyZXNzKTsKICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgc2dbaV0uZG1hX2FkZHJlc3Mg PSAoKHNnW2ldLnBhZ2UgLSBtZW1fbWFwKSA8PCAxMikgKyBzZ1tpXS5vZmZzZXQ7CiAgICAgICAg fQoKICAgICAgICByZXR1cm4gbmVudHM7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Vu bWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCnsK ICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7Cgp9CiMgMTc2ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2FzbS9wY2kuaCIKc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGUoc3Ry dWN0IHBjaV9kZXYgKmh3ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlv biA9PSAzKQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYs MHgwYiIpOwoKfQoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zZyhzdHJ1 Y3QgcGNpX2RldiAqaHdkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAzKQog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoK fQoKCgoKCgpzdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2Rl diAqaHdkZXYsIHU2NCBtYXNrKQp7CgoKCgoKICAgICAgICBpZihtYXNrIDwgMHgwMGZmZmZmZikK ICAgICAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICByZXR1cm4gMTsKfQoKCgoKc3RhdGlj IF9faW5saW5lX18gZG1hNjRfYWRkcl90CnBjaV9kYWNfcGFnZV90b19kbWEoc3RydWN0IHBjaV9k ZXYgKnBkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGRp cmVjdGlvbikKewogICAgICAgIHJldHVybiAoKGRtYTY0X2FkZHJfdCkgKChwYWdlIC0gbWVtX21h cCkgPDwgMTIpICsKICAgICAgICAgICAgICAgIChkbWE2NF9hZGRyX3QpIG9mZnNldCk7Cn0KCnN0 YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwYWdlICoKcGNpX2RhY19kbWFfdG9fcGFnZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyKQp7CiAgICAgICAgdW5zaWduZWQg bG9uZyBwb2ZmID0gKGRtYV9hZGRyID4+IDEyKTsKCiAgICAgICAgcmV0dXJuIG1lbV9tYXAgKyBw b2ZmOwp9CgpzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCnBjaV9kYWNfZG1hX3RvX29m ZnNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyKQp7CiAgICAg ICAgcmV0dXJuIChkbWFfYWRkciAmIH4ofigoMVVMIDw8IDEyKS0xKSkpOwp9CgpzdGF0aWMgX19p bmxpbmVfXyB2b2lkCnBjaV9kYWNfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pCnsKCn0K IyAyNTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIgpzdGF0aWMgaW5saW5lIGlu dCBwY2lfY29udHJvbGxlcl9udW0oc3RydWN0IHBjaV9kZXYgKmRldikKewogICAgICAgIHJldHVy biAwOwp9CgoKZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpk ZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSk7 CiMgNjA2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIiAyCiMgNjcxICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIgpzdGF0aWMgaW5saW5lIGludCBwY2lfbW9k dWxlX2luaXQoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKewogICAgICAgIGludCByYyA9IHBjaV9y ZWdpc3Rlcl9kcml2ZXIgKGRydik7CgogICAgICAgIGlmIChyYyA+IDApCiAgICAgICAgICAgICAg ICByZXR1cm4gMDsKIyA2ODYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgiCiAg ICAgICAgaWYgKHJjID09IDApCiAgICAgICAgICAgICAgICByYyA9IC0xOTsKCgoKCiAgICAgICAg cGNpX3VucmVnaXN0ZXJfZHJpdmVyIChkcnYpOwoKICAgICAgICByZXR1cm4gcmM7Cn0KIyA3MTYg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAq cGNpX2dldF9kcnZkYXRhIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKewogICAgICAgIHJldHVybiBw ZGV2LT5kcml2ZXJfZGF0YTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHBjaV9zZXRfZHJ2ZGF0YSAo c3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpCnsKICAgICAgICBwZGV2LT5kcml2ZXJf ZGF0YSA9IGRhdGE7Cn0KIyA3MzMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgi CnN0cnVjdCBwY2lfZml4dXAgewogICAgICAgIGludCBwYXNzOwogICAgICAgIHUxNiB2ZW5kb3Is IGRldmljZTsKICAgICAgICB2b2lkICgqaG9vaykoc3RydWN0IHBjaV9kZXYgKmRldik7Cn07Cgpl eHRlcm4gc3RydWN0IHBjaV9maXh1cCBwY2liaW9zX2ZpeHVwc1tdOwoKCgoKdm9pZCBwY2lfZml4 dXBfZGV2aWNlKGludCBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKCmV4dGVybiBpbnQgcGNp X3BjaV9wcm9ibGVtczsKIyAxNDkgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvaW5pdC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW5pdC5oIiAy CiMgNDggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW5pdC5oIgp0eXBlZGVmIGludCAo KmluaXRjYWxsX3QpKHZvaWQpOwp0eXBlZGVmIHZvaWQgKCpleGl0Y2FsbF90KSh2b2lkKTsKCmV4 dGVybiBpbml0Y2FsbF90IF9faW5pdGNhbGxfc3RhcnQsIF9faW5pdGNhbGxfZW5kOwojIDYxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2luaXQuaCIKc3RydWN0IGtlcm5lbF9wYXJhbSB7 CiAgICAgICAgY29uc3QgY2hhciAqc3RyOwogICAgICAgIGludCAoKnNldHVwX2Z1bmMpKGNoYXIg Kik7Cn07CgpleHRlcm4gc3RydWN0IGtlcm5lbF9wYXJhbSBfX3NldHVwX3N0YXJ0LCBfX3NldHVw X2VuZDsKIyAxNTAgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvaW9wb3J0LmgiIDEKIyAxNTEgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDEKIyAyOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9uZXRkZXZpY2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lmLmgi IDEKIyAyMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pZi5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDIzICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2lmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tl dC5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaWYuaCIgMgojIDU4ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lmLmgiCnN0cnVjdCBpZm1hcAp7CiAgICAgICAg dW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fZW5kOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGly cTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRtYTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHBvcnQ7 Cgp9OwojIDc2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lmLmgiCnN0cnVjdCBpZnJl cQp7CgoKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgaWZybl9u YW1lWzE2XTsKICAgICAgICB9IGlmcl9pZnJuOwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9hZGRyOwogICAgICAgICAgICAgICAgc3RydWN0IHNv Y2thZGRyIGlmcnVfZHN0YWRkcjsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1 X2Jyb2FkYWRkcjsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1X25ldG1hc2s7 CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9od2FkZHI7CiAgICAgICAgICAg ICAgICBzaG9ydCBpZnJ1X2ZsYWdzOwogICAgICAgICAgICAgICAgaW50IGlmcnVfaXZhbHVlOwog ICAgICAgICAgICAgICAgaW50IGlmcnVfbXR1OwogICAgICAgICAgICAgICAgc3RydWN0IGlmbWFw IGlmcnVfbWFwOwogICAgICAgICAgICAgICAgY2hhciBpZnJ1X3NsYXZlWzE2XTsKICAgICAgICAg ICAgICAgIGNoYXIgaWZydV9uZXduYW1lWzE2XTsKICAgICAgICAgICAgICAgIGNoYXIgKiBpZnJ1 X2RhdGE7CiAgICAgICAgfSBpZnJfaWZydTsKfTsKIyAxMjUgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvaWYuaCIKc3RydWN0IGlmY29uZgp7CiAgICAgICAgaW50IGlmY19sZW47CiAgICAg ICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyICogaWZjdV9idWY7CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgaWZyZXEgKmlmY3VfcmVxOwogICAgICAgIH0gaWZjX2lmY3U7Cn07 CiMgMjkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgiIDEKIyA5MiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIgpzdHJ1Y3QgZXRoaGRyCnsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGhfZGVzdFs2XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGhfc291cmNlWzZd OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGhfcHJvdG87Cn07CiMgMzAgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L2lmX3BhY2tldC5oIiAxCgoKCnN0cnVjdCBzb2NrYWRkcl9wa3QKewogICAgICAgIHVu c2lnbmVkIHNob3J0IHNwa3RfZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc3BrdF9kZXZp Y2VbMTRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNwa3RfcHJvdG9jb2w7Cn07CgpzdHJ1Y3Qg c29ja2FkZHJfbGwKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNsbF9mYW1pbHk7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc2xsX3Byb3RvY29sOwogICAgICAgIGludCBzbGxfaWZpbmRleDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzbGxfaGF0eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xs X3BrdHR5cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzbGxfaGFsZW47CiAgICAgICAgdW5zaWdu ZWQgY2hhciBzbGxfYWRkcls4XTsKfTsKIyA0MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9pZl9wYWNrZXQuaCIKc3RydWN0IHRwYWNrZXRfc3RhdHMKewogICAgICAgIHVuc2lnbmVkIGlu dCB0cF9wYWNrZXRzOwogICAgICAgIHVuc2lnbmVkIGludCB0cF9kcm9wczsKfTsKCnN0cnVjdCB0 cGFja2V0X2hkcgp7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0cF9zdGF0dXM7CgoKCgoKICAgICAg ICB1bnNpZ25lZCBpbnQgdHBfbGVuOwogICAgICAgIHVuc2lnbmVkIGludCB0cF9zbmFwbGVuOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IHRwX21hYzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cF9u ZXQ7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX3NlYzsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBf dXNlYzsKfTsKIyA4MiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCIK c3RydWN0IHRwYWNrZXRfcmVxCnsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfc2l6ZTsK ICAgICAgICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfbnI7CiAgICAgICAgdW5zaWduZWQgaW50IHRw X2ZyYW1lX3NpemU7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX25yOwp9OwoKc3RydWN0 IHBhY2tldF9tcmVxCnsKICAgICAgICBpbnQgbXJfaWZpbmRleDsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBtcl90eXBlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1yX2FsZW47CiAgICAgICAgdW5z aWduZWQgY2hhciBtcl9hZGRyZXNzWzhdOwp9OwojIDMxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L25ldGRldmljZS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2F0 b21pYy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9jYWNoZS5oIiAxCiMgMzQgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMQojIDM1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L25ldGRldmljZS5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2NvbmZpZy5oIiAxCiMgMzggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNl LmgiIDIKCgoKCnN0cnVjdCBkaXZlcnRfYmxrOwojIDk2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L25ldGRldmljZS5oIgpzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwp7CiAgICAgICAgdW5z aWduZWQgbG9uZyByeF9wYWNrZXRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsK ICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhf Ynl0ZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQg bG9uZyB0eF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOwogICAgICAg IHVuc2lnbmVkIGxvbmcgdHhfZHJvcHBlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIG11bHRpY2Fz dDsKICAgICAgICB1bnNpZ25lZCBsb25nIGNvbGxpc2lvbnM7CgoKICAgICAgICB1bnNpZ25lZCBs b25nIHJ4X2xlbmd0aF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9vdmVyX2Vycm9y czsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2NyY19lcnJvcnM7CiAgICAgICAgdW5zaWduZWQg bG9uZyByeF9mcmFtZV9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9maWZvX2Vycm9y czsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X21pc3NlZF9lcnJvcnM7CgoKICAgICAgICB1bnNp Z25lZCBsb25nIHR4X2Fib3J0ZWRfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfY2Fy cmllcl9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9maWZvX2Vycm9yczsKICAgICAg ICB1bnNpZ25lZCBsb25nIHR4X2hlYXJ0YmVhdF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9u ZyB0eF93aW5kb3dfZXJyb3JzOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9jb21wcmVzc2Vk OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfY29tcHJlc3NlZDsKfTsKCgoKZW51bSB7CiAgICAg ICAgSUZfUE9SVF9VTktOT1dOID0gMCwKICAgICAgICBJRl9QT1JUXzEwQkFTRTIsCiAgICAgICAg SUZfUE9SVF8xMEJBU0VULAogICAgICAgIElGX1BPUlRfQVVJLAogICAgICAgIElGX1BPUlRfMTAw QkFTRVQsCiAgICAgICAgSUZfUE9SVF8xMDBCQVNFVFgsCiAgICAgICAgSUZfUE9SVF8xMDBCQVNF RlgKfTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKmlmX3BvcnRfdGV4dFtdOwoKIyAxICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAxNDYgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L3NrYnVmZi5oIiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZm LmgiCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE4ICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hl ZC5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQojIDIxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9jYWNoZS5oIiAxCiMgMjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2ti dWZmLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAy NCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKIyAyNSAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3Bp bmxvY2suaCIgMQojIDI2ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAxCiMgMjcgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2hpZ2htZW0uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hpZ2htZW0u aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9wcm9jZXNzb3IuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxs b2MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAxCiMgNyAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9wZ2FsbG9jLmgiIDIKIyA1MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxv Yy5oIgpzdGF0aWMgX19pbmxpbmVfXyBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpCnsKICAgICAg ICBwZ2RfdCAqcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcygoKDB4MjAgfCAweDEwIHwg MHg0MCB8IDB4ODAgfCAweDEwMCkpLDApOwoKICAgICAgICBpZiAocGdkKSB7CiAgICAgICAgICAg ICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKCgo KCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAqIHNpemVvZihwZ2Rf dCkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgocGdkKSksKCgweDAxMDEwMTAx VUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkp KS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgo KHBnZCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKCgoKHVuc2lnbmVk IGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6ZW9mKHBnZF90KSkpKSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AoKCgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygx VUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgocGdkKSkp LCgoKDApKSksKCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikp ICogc2l6ZW9mKHBnZF90KSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgocGdkKSksKCgwKSksKCgo KCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdk X3QpKSkpKSk7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKDEwMjQgLSAo KCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpICogc2l6ZW9mKHBn ZF90KSkgPyBfX2NvbnN0YW50X21lbWNweSgocGdkICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAw MDAwMDApKSkvKDFVTCA8PCAyMikpKSwoc3dhcHBlcl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9u ZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpLCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25n KSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSkgKiBzaXplb2YocGdkX3QpKSkgOiBfX21lbWNw eSgocGdkICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSwo c3dhcHBlcl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8 IDIyKSkpLCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwg MjIpKSkgKiBzaXplb2YocGdkX3QpKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGdkOwp9 CgoKCnN0YXRpYyBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkKewogICAgICAg IHVuc2lnbmVkIGxvbmcgKnJldDsKCiAgICAgICAgaWYgKChyZXQgPSAoYm9vdF9jcHVfZGF0YS5w Z2RfcXVpY2spKSAhPSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgKGJvb3RfY3B1X2Rh dGEucGdkX3F1aWNrKSA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOwogICAgICAgICAgICAgICAg cmV0WzBdID0gMDsKICAgICAgICAgICAgICAgIChib290X2NwdV9kYXRhLnBndGFibGVfY2FjaGVf c3opLS07CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICByZXQgPSAodW5zaWduZWQgbG9u ZyAqKWdldF9wZ2Rfc2xvdygpOwogICAgICAgIHJldHVybiAocGdkX3QgKilyZXQ7Cn0KCnN0YXRp YyBfX2lubGluZV9fIHZvaWQgZnJlZV9wZ2RfZmFzdChwZ2RfdCAqcGdkKQp7CiAgICAgICAgKih1 bnNpZ25lZCBsb25nICopcGdkID0gKHVuc2lnbmVkIGxvbmcpIChib290X2NwdV9kYXRhLnBnZF9x dWljayk7CiAgICAgICAgKGJvb3RfY3B1X2RhdGEucGdkX3F1aWNrKSA9ICh1bnNpZ25lZCBsb25n ICopIHBnZDsKICAgICAgICAoYm9vdF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KSsrOwp9Cgpz dGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCkKewoKCgoKCgoK ICAgICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQgbG9uZylwZ2QpLDApOwoKfQoKc3RhdGljIGlu bGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQg bG9uZyBhZGRyZXNzKQp7CiAgICAgICAgcHRlX3QgKnB0ZTsKCiAgICAgICAgcHRlID0gKHB0ZV90 ICopIF9fZ2V0X2ZyZWVfcGFnZXMoKCgweDIwIHwgMHgxMCB8IDB4NDAgfCAweDgwIHwgMHgxMDAp KSwwKTsKICAgICAgICBpZiAocHRlKQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFu dF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKCgoMVVMIDw8IDEyKSkpID8gX19jb25zdGFu dF9jX2FuZF9jb3VudF9tZW1zZXQoKCgodm9pZCAqKShwdGUpKSksKCgweDAxMDEwMTAxVUwqKHVu c2lnbmVkIGNoYXIpKDApKSksKCgoMVVMIDw8IDEyKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQo KCgodm9pZCAqKShwdGUpKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgo MVVMIDw8IDEyKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKCgxVUwgPDwgMTIpKSkgPyBf X21lbXNldF9nZW5lcmljKCgoKCh2b2lkICopKHB0ZSkpKSksKCgoMCkpKSwoKCgoMVVMIDw8IDEy KSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKHZvaWQgKikocHRlKSkpLCgoMCkpLCgoKDFVTCA8 PCAxMikpKSkpKTsKICAgICAgICByZXR1cm4gcHRlOwp9CgpzdGF0aWMgaW5saW5lIHB0ZV90ICpw dGVfYWxsb2Nfb25lX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRk cmVzcykKewogICAgICAgIHVuc2lnbmVkIGxvbmcgKnJldDsKCiAgICAgICAgaWYgKChyZXQgPSAo dW5zaWduZWQgbG9uZyAqKShib290X2NwdV9kYXRhLnB0ZV9xdWljaykpICE9ICgodm9pZCAqKTAp KSB7CiAgICAgICAgICAgICAgICAoYm9vdF9jcHVfZGF0YS5wdGVfcXVpY2spID0gKHVuc2lnbmVk IGxvbmcgKikoKnJldCk7CiAgICAgICAgICAgICAgICByZXRbMF0gPSByZXRbMV07CiAgICAgICAg ICAgICAgICAoYm9vdF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KS0tOwogICAgICAgIH0KICAg ICAgICByZXR1cm4gKHB0ZV90ICopcmV0Owp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHB0ZV9m cmVlX2Zhc3QocHRlX3QgKnB0ZSkKewogICAgICAgICoodW5zaWduZWQgbG9uZyAqKXB0ZSA9ICh1 bnNpZ25lZCBsb25nKSAoYm9vdF9jcHVfZGF0YS5wdGVfcXVpY2spOwogICAgICAgIChib290X2Nw dV9kYXRhLnB0ZV9xdWljaykgPSAodW5zaWduZWQgbG9uZyAqKSBwdGU7CiAgICAgICAgKGJvb3Rf Y3B1X2RhdGEucGd0YWJsZV9jYWNoZV9zeikrKzsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBw dGVfZnJlZV9zbG93KHB0ZV90ICpwdGUpCnsKICAgICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQg bG9uZylwdGUpLDApOwp9CiMgMTUzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9wZ2FsbG9j LmgiCmV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGludCwgaW50KTsKIyAxNzUgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKc3RhdGljIGlubGluZSB2b2lkIGZsdXNo X3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKewogICAgICAgIGlmIChtbSA9PSBnZXRfY3Vy cmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAgICAgICBkbyB7IHVuc2lnbmVkIGludCB0bXBy ZWc7IF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92bCAlJWNyMywgJTA7ICAjIGZsdXNoIFRMQiBc biIgIm1vdmwgJTAsICUlY3IzOyAgICAgICAgICAgICAgXG4iIDogIj1yIiAodG1wcmVnKSA6OiAi bWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3Bh Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRy KQp7CiAgICAgICAgaWYgKHZtYS0+dm1fbW0gPT0gZ2V0X2N1cnJlbnQoKS0+YWN0aXZlX21tKQog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAlMCI6IDoibSIgKCoo Y2hhciAqKSBhZGRyKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3Ry dWN0IG1tX3N0cnVjdCAqbW0sCiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQg bG9uZyBlbmQpCnsKICAgICAgICBpZiAobW0gPT0gZ2V0X2N1cnJlbnQoKS0+YWN0aXZlX21tKQog ICAgICAgICAgICAgICAgZG8geyB1bnNpZ25lZCBpbnQgdG1wcmVnOyBfX2FzbV9fIF9fdm9sYXRp bGVfXyggIm1vdmwgJSVjcjMsICUwOyAgIyBmbHVzaCBUTEIgXG4iICJtb3ZsICUwLCAlJWNyMzsg ICAgICAgICAgICAgIFxuIiA6ICI9ciIgKHRtcHJlZykgOjogIm1lbW9yeSIpOyB9IHdoaWxlICgw KTsKfQojIDIyNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpzdGF0aWMg aW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVu c2lnbmVkIGxvbmcgZW5kKQp7Cgp9CiMgNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9o aWdobWVtLmgiIDIKIyAzMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9oaWdobWVtLmgi CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5yX2ZyZWVfaGlnaHBhZ2VzKHZvaWQpIHsgcmV0 dXJuIDA7IH0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkgeyBy ZXR1cm4gKChwYWdlKS0+dmlydHVhbCk7IH0KIyA0NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9oaWdobWVtLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl91c2VyX2hpZ2hwYWdlKHN0 cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQp7CiAgICAgICAgdm9pZCAqYWRk ciA9IGttYXAocGFnZSk7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVp bHRpbl9jb25zdGFudF9wKCgoMVVMIDw8IDEyKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9t ZW1zZXQoKCgodm9pZCAqKShhZGRyKSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgw KSkpLCgoKDFVTCA8PCAxMikpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKHZvaWQgKikoYWRk cikpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKCgxVUwgPDwgMTIpKSkp KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKDFVTCA8PCAxMikpKSA/IF9fbWVtc2V0X2dlbmVy aWMoKCgoKHZvaWQgKikoYWRkcikpKSksKCgoMCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBfX21l bXNldF9nZW5lcmljKCgoKHZvaWQgKikoYWRkcikpKSwoKDApKSwoKCgxVUwgPDwgMTIpKSkpKSk7 CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hp Z2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQp7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9w KDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKCgoMVVMIDw8IDEyKSkpID8gX19jb25zdGFudF9j X2FuZF9jb3VudF9tZW1zZXQoKCgodm9pZCAqKShrbWFwKHBhZ2UpKSkpLCgoMHgwMTAxMDEwMVVM Kih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKDFVTCA8PCAxMikpKSkgOiBfX2NvbnN0YW50X2NfbWVt c2V0KCgoKHZvaWQgKikoa21hcChwYWdlKSkpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoMCkpKSwoKCgxVUwgPDwgMTIpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKDFVTCA8 PCAxMikpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoKHZvaWQgKikoa21hcChwYWdlKSkpKSksKCgo MCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKHZvaWQgKikoa21h cChwYWdlKSkpKSwoKDApKSwoKCgxVUwgPDwgMTIpKSkpKSk7CiAgICAgICAgZG8geyB9IHdoaWxl ICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG1lbWNsZWFyX2hpZ2hwYWdlKHN0cnVjdCBwYWdl ICpwYWdlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKewogICAgICAg IGNoYXIgKmthZGRyOwoKICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+ICgxVUwgPDwgMTIpKQog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwog ICAgICAgIGthZGRyID0ga21hcChwYWdlKTsKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3Ao MCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemUpKSA/IF9fY29uc3RhbnRfY19hbmRfY291 bnRfbWVtc2V0KCgoa2FkZHIgKyBvZmZzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoMCkpKSwoKHNpemUpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoa2FkZHIgKyBvZmZzZXQp KSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemUpKSkpIDogKF9fYnVp bHRpbl9jb25zdGFudF9wKChzaXplKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKGthZGRyICsgb2Zm c2V0KSkpLCgoKDApKSksKCgoc2l6ZSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoa2FkZHIgKyBv ZmZzZXQpKSwoKDApKSwoKHNpemUpKSkpKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CgoK CgpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2goc3RydWN0IHBhZ2Ug KnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplKQp7CiAgICAgICAg Y2hhciAqa2FkZHI7CgogICAgICAgIGlmIChvZmZzZXQgKyBzaXplID4gKDFVTCA8PCAxMikpCiAg ICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAg ICAgICAga2FkZHIgPSBrbWFwKHBhZ2UpOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgw KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZSkpID8gX19jb25zdGFudF9jX2FuZF9jb3Vu dF9tZW1zZXQoKChrYWRkciArIG9mZnNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFy KSgwKSkpLCgoc2l6ZSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKChrYWRkciArIG9mZnNldCkp LCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSkgOiAoX19idWls dGluX2NvbnN0YW50X3AoKHNpemUpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoa2FkZHIgKyBvZmZz ZXQpKSksKCgoMCkpKSwoKChzaXplKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChrYWRkciArIG9m ZnNldCkpLCgoMCkpLCgoc2l6ZSkpKSkpOwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CiAgICAg ICAgZG8geyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9oaWdo cGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZh ZGRyKQp7CiAgICAgICAgY2hhciAqdmZyb20sICp2dG87CgogICAgICAgIHZmcm9tID0ga21hcChm cm9tKTsKICAgICAgICB2dG8gPSBrbWFwKHRvKTsKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50 X3AoKDFVTCA8PCAxMikpID8gX19jb25zdGFudF9tZW1jcHkoKCh2b2lkICopKHZ0bykpLCgodm9p ZCAqKSh2ZnJvbSkpLCgoMVVMIDw8IDEyKSkpIDogX19tZW1jcHkoKCh2b2lkICopKHZ0bykpLCgo dm9pZCAqKSh2ZnJvbSkpLCgoMVVMIDw8IDEyKSkpKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDAp OwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2hp Z2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20pCnsKICAgICAgICBjaGFy ICp2ZnJvbSwgKnZ0bzsKCiAgICAgICAgdmZyb20gPSBrbWFwKGZyb20pOwogICAgICAgIHZ0byA9 IGttYXAodG8pOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoMVVMIDw8IDEyKSkgPyBf X2NvbnN0YW50X21lbWNweSgoKHZvaWQgKikodnRvKSksKCh2b2lkICopKHZmcm9tKSksKCgxVUwg PDwgMTIpKSkgOiBfX21lbWNweSgoKHZvaWQgKikodnRvKSksKCh2b2lkICopKHZmcm9tKSksKCgx VUwgPDwgMTIpKSkpOwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyB9IHdo aWxlICgwKTsKfQojIDI4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAy CiMgODUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0cnVjdCBuZl9j b25udHJhY2sgewogICAgICAgIGF0b21pY190IHVzZTsKICAgICAgICB2b2lkICgqZGVzdHJveSko c3RydWN0IG5mX2Nvbm50cmFjayAqKTsKfTsKCnN0cnVjdCBuZl9jdF9pbmZvIHsKICAgICAgICBz dHJ1Y3QgbmZfY29ubnRyYWNrICptYXN0ZXI7Cn07CgoKc3RydWN0IHNrX2J1ZmZfaGVhZCB7Cgog ICAgICAgIHN0cnVjdCBza19idWZmICogbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHBy ZXY7CgogICAgICAgIF9fdTMyIHFsZW47CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwp9OwoKc3Ry dWN0IHNrX2J1ZmY7CgoKCnR5cGVkZWYgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBza2JfZnJhZ190 OwoKc3RydWN0IHNrYl9mcmFnX3N0cnVjdAp7CiAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7CiAg ICAgICAgX191MTYgcGFnZV9vZmZzZXQ7CiAgICAgICAgX191MTYgc2l6ZTsKfTsKCgoKCnN0cnVj dCBza2Jfc2hhcmVkX2luZm8gewogICAgICAgIGF0b21pY190IGRhdGFyZWY7CiAgICAgICAgdW5z aWduZWQgaW50IG5yX2ZyYWdzOwogICAgICAgIHN0cnVjdCBza19idWZmICpmcmFnX2xpc3Q7CiAg ICAgICAgc2tiX2ZyYWdfdCBmcmFnc1s2XTsKfTsKCnN0cnVjdCBza19idWZmIHsKCiAgICAgICAg c3RydWN0IHNrX2J1ZmYgKiBuZXh0OwogICAgICAgIHN0cnVjdCBza19idWZmICogcHJldjsKCiAg ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqIGxpc3Q7CiAgICAgICAgc3RydWN0IHNvY2sgKnNr OwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHN0YW1wOwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXY7CgoKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB0 Y3BoZHIgKnRoOwogICAgICAgICAgICAgICAgc3RydWN0IHVkcGhkciAqdWg7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaWdtcGhk ciAqaWdtcGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBoZHIgKmlwaXBoOwogICAgICAgICAg ICAgICAgc3RydWN0IHNweGhkciAqc3B4aDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KnJhdzsKICAgICAgICB9IGg7CgoKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAg ICAgIHN0cnVjdCBpcGhkciAqaXBoOwogICAgICAgICAgICAgICAgc3RydWN0IGlwdjZoZHIgKmlw djZoOwogICAgICAgICAgICAgICAgc3RydWN0IGFycGhkciAqYXJwaDsKICAgICAgICAgICAgICAg IHN0cnVjdCBpcHhoZHIgKmlweGg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyYXc7 CiAgICAgICAgfSBuaDsKCgogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAg c3RydWN0IGV0aGhkciAqZXRoZXJuZXQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpy YXc7CiAgICAgICAgfSBtYWM7CgogICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdDsKCgoKCgoK CiAgICAgICAgY2hhciBjYls0OF07CgogICAgICAgIHVuc2lnbmVkIGludCBsZW47CiAgICAgICAg dW5zaWduZWQgaW50IGRhdGFfbGVuOwogICAgICAgIHVuc2lnbmVkIGludCBjc3VtOwogICAgICAg IHVuc2lnbmVkIGNoYXIgX191bnVzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lZCwK ICAgICAgICAgICAgICAgICAgICAgICAgcGt0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg IGlwX3N1bW1lZDsKICAgICAgICBfX3UzMiBwcmlvcml0eTsKICAgICAgICBhdG9taWNfdCB1c2Vy czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzZWN1cml0eTsKICAgICAgICB1bnNpZ25lZCBpbnQgdHJ1ZXNpemU7CgogICAgICAgIHVuc2ln bmVkIGNoYXIgKmhlYWQ7CiAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKICAgICAgICB1bnNp Z25lZCBjaGFyICp0YWlsOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZDsKCiAgICAgICAgdm9p ZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBza19idWZmICopOwoKCiAgICAgICAgdW5zaWduZWQgbG9u ZyBuZm1hcms7CgogICAgICAgIF9fdTMyIG5mY2FjaGU7CgogICAgICAgIHN0cnVjdCBuZl9jdF9p bmZvICpuZmN0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgbmZfZGVidWc7CiMgMjE2ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgp9OwojIDIyNSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9za2J1ZmYuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L3NsYWIuaCIgMQojIDIyNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIg MgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMQojIDIyOCAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMgoKZXh0ZXJuIHZvaWQgX19rZnJl ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIGFsbG9j X3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIHZvaWQga2ZyZWVf c2tibWVtKHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBza2Jf Y2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIHN0cnVjdCBz a19idWZmICogc2tiX2NvcHkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaW9yaXR5 KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogcHNrYl9jb3B5KHN0cnVjdCBza19idWZmICpza2Is IGludCBnZnBfbWFzayk7CmV4dGVybiBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwgaW50IGdmcF9tYXNrKTsKZXh0ZXJuIHN0cnVj dCBza19idWZmICogc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5z aWduZWQgaW50IGhlYWRyb29tKTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX2NvcHlfZXhw YW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdoZWFkcm9vbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5ld3RhaWxyb29tLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHkpOwoKZXh0 ZXJuIHZvaWQgc2tiX292ZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwgdm9p ZCAqaGVyZSk7CmV4dGVybiB2b2lkIHNrYl91bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBpbnQgbGVuLCB2b2lkICpoZXJlKTsKIyAyNTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgaW50IHNrYl9xdWV1ZV9lbXB0eShzdHJ1Y3Qgc2tf YnVmZl9oZWFkICpsaXN0KQp7CiAgICAgICAgcmV0dXJuIChsaXN0LT5uZXh0ID09IChzdHJ1Y3Qg c2tfYnVmZiAqKSBsaXN0KTsKfQojIDI2OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z a2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQp7CiAgICAgICAgYXRvbWljX2luYygmc2tiLT51c2Vycyk7CiAgICAgICAgcmV0 dXJuIHNrYjsKfQojIDI4NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIK c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAg ICAgaWYgKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSA9PSAxIHx8IGF0b21pY19kZWNfYW5kX3Rl c3QoJnNrYi0+dXNlcnMpKQogICAgICAgICAgICAgICAgX19rZnJlZV9za2Ioc2tiKTsKfQoKCnN0 YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfZmFzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAg ICAgICAgaWYgKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSA9PSAxIHx8IGF0b21pY19kZWNfYW5k X3Rlc3QoJnNrYi0+dXNlcnMpKQogICAgICAgICAgICAgICAga2ZyZWVfc2tibWVtKHNrYik7Cn0K IyAzMDkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgaW50IHNrYl9jbG9uZWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIHJldHVybiBz a2ItPmNsb25lZCAmJiAoKCYoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoKHNrYiktPmVuZCkp LT5kYXRhcmVmKS0+Y291bnRlcikgIT0gMTsKfQojIDMyMiAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQgc2tiX3NoYXJlZChzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJuICgoKCZza2ItPnVzZXJzKS0+Y291bnRlcikgIT0g MSk7Cn0KIyAzNDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9zaGFyZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBpbnQgcHJpKQp7CiAgICAgICAgaWYgKHNrYl9zaGFyZWQoc2tiKSkgewogICAgICAgICAg ICAgICAgc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAgICAgICAgICAgICAgICBuc2tiID0gc2tiX2Ns b25lKHNrYiwgcHJpKTsKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwogICAgICAgICAg ICAgICAgcmV0dXJuIG5za2I7CiAgICAgICAgfQogICAgICAgIHJldHVybiBza2I7Cn0KIyAzNzQg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3Ry dWN0IHNrX2J1ZmYgKnNrYl91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcmkpCnsK ICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKICAgICAgICBpZighc2tiX2Nsb25lZChza2Ip KQogICAgICAgICAgICAgICAgcmV0dXJuIHNrYjsKICAgICAgICBuc2tiPXNrYl9jb3B5KHNrYiwg cHJpKTsKICAgICAgICBrZnJlZV9za2Ioc2tiKTsKICAgICAgICByZXR1cm4gbnNrYjsKfQojIDM5 OCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBz dHJ1Y3Qgc2tfYnVmZiAqc2tiX3BlZWsoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKICAg ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0XyktPm5l eHQ7CiAgICAgICAgaWYgKGxpc3QgPT0gKHN0cnVjdCBza19idWZmICopbGlzdF8pCiAgICAgICAg ICAgICAgICBsaXN0ID0gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIGxpc3Q7Cn0KIyA0MjAg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3Ry dWN0IHNrX2J1ZmYgKnNrYl9wZWVrX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsK ICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0Xykt PnByZXY7CiAgICAgICAgaWYgKGxpc3QgPT0gKHN0cnVjdCBza19idWZmICopbGlzdF8pCiAgICAg ICAgICAgICAgICBsaXN0ID0gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIGxpc3Q7Cn0KIyA0 MzUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUg X191MzIgc2tiX3F1ZXVlX2xlbihzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0XykKewogICAgICAg IHJldHVybihsaXN0Xy0+cWxlbik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcXVldWVfaGVh ZF9pbml0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKICAgICAgICBkbyB7IH0gd2hpbGUo MCk7CiAgICAgICAgbGlzdC0+cHJldiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAgICAgICAg bGlzdC0+bmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAgICAgICAgbGlzdC0+cWxlbiA9 IDA7Cn0KIyA0NjYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9oZWFkKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3Qs IHN0cnVjdCBza19idWZmICpuZXdzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpwcmV2LCAq bmV4dDsKCiAgICAgICAgbmV3c2stPmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsK ICAgICAgICBwcmV2ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBuZXh0ID0gcHJl di0+bmV4dDsKICAgICAgICBuZXdzay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYg PSBwcmV2OwogICAgICAgIG5leHQtPnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0g bmV3c2s7Cn0KIyA0OTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCBza2JfcXVldWVfaGVhZChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0 LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoK ICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xp IjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmbGlzdC0+bG9jayk7IH0gd2hpbGUg KDApOwogICAgICAgIF9fc2tiX3F1ZXVlX2hlYWQobGlzdCwgbmV3c2spOwogICAgICAgIGRvIHsg ZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6 IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwp9CiMgNTE0ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgX19z a2JfcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCBzdHJ1Y3Qgc2tfYnVmZiAq bmV3c2spCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwgKm5leHQ7CgogICAgICAgIG5l d3NrLT5saXN0ID0gbGlzdDsKICAgICAgICBsaXN0LT5xbGVuKys7CiAgICAgICAgbmV4dCA9IChz dHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAgICAgICAgcHJldiA9IG5leHQtPnByZXY7CiAgICAgICAg bmV3c2stPm5leHQgPSBuZXh0OwogICAgICAgIG5ld3NrLT5wcmV2ID0gcHJldjsKICAgICAgICBu ZXh0LT5wcmV2ID0gbmV3c2s7CiAgICAgICAgcHJldi0+bmV4dCA9IG5ld3NrOwp9CiMgNTQwICIv dXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQg c2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgc3RydWN0IHNrX2J1ZmYg Km5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgZG8geyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6 Im1lbW9yeSIpOyAodm9pZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBfX3Nr Yl9xdWV1ZV90YWlsKGxpc3QsIG5ld3NrKTsKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsg X19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1l bW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQojIDU1OCAiL3Vzci9zcmMvbGludXgvaW5jbHVk ZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfZGVx dWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYg Km5leHQsICpwcmV2LCAqcmVzdWx0OwoKICAgICAgICBwcmV2ID0gKHN0cnVjdCBza19idWZmICop IGxpc3Q7CiAgICAgICAgbmV4dCA9IHByZXYtPm5leHQ7CiAgICAgICAgcmVzdWx0ID0gKCh2b2lk ICopMCk7CiAgICAgICAgaWYgKG5leHQgIT0gcHJldikgewogICAgICAgICAgICAgICAgcmVzdWx0 ID0gbmV4dDsKICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0OwogICAgICAgICAgICAg ICAgbGlzdC0+cWxlbi0tOwogICAgICAgICAgICAgICAgbmV4dC0+cHJldiA9IHByZXY7CiAgICAg ICAgICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKICAgICAgICAgICAgICAgIHJlc3VsdC0+bmV4 dCA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgcmVzdWx0LT5wcmV2ID0gKCh2b2lkICop MCk7CiAgICAgICAgICAgICAgICByZXN1bHQtPmxpc3QgPSAoKHZvaWQgKikwKTsKICAgICAgICB9 CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKfQojIDU4NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWUo c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIGxvbmcgZmxhZ3M7CiAgICAgICAg c3RydWN0IHNrX2J1ZmYgKnJlc3VsdDsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVf XygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9p ZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICByZXN1bHQgPSBfX3NrYl9kZXF1 ZXVlKGxpc3QpOwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRp bGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0g d2hpbGUgKDApOwogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZv aWQgX19za2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpuZXdzaywKICAgICAgICBzdHJ1Y3Qgc2tf YnVmZiAqIHByZXYsIHN0cnVjdCBza19idWZmICpuZXh0LAogICAgICAgIHN0cnVjdCBza19idWZm X2hlYWQgKiBsaXN0KQp7CiAgICAgICAgbmV3c2stPm5leHQgPSBuZXh0OwogICAgICAgIG5ld3Nr LT5wcmV2ID0gcHJldjsKICAgICAgICBuZXh0LT5wcmV2ID0gbmV3c2s7CiAgICAgICAgcHJldi0+ bmV4dCA9IG5ld3NrOwogICAgICAgIG5ld3NrLT5saXN0ID0gbGlzdDsKICAgICAgICBsaXN0LT5x bGVuKys7Cn0KIyA2MjQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCBza2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBz a19idWZmICpuZXdzaykKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgIGRv IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZs YWdzKTogOiJtZW1vcnkiKTsgKHZvaWQpKCZvbGQtPmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsK ICAgICAgICBfX3NrYl9pbnNlcnQobmV3c2ssIG9sZC0+cHJldiwgb2xkLCBvbGQtPmxpc3QpOwog ICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwg JTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwp9 CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2FwcGVuZChzdHJ1Y3Qgc2tfYnVmZiAqb2xk LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICBfX3NrYl9pbnNlcnQobmV3c2ssIG9s ZCwgb2xkLT5uZXh0LCBvbGQtPmxpc3QpOwp9CiMgNjUzICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2FwcGVuZChzdHJ1Y3Qgc2tf YnVmZiAqb2xkLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICB1bnNpZ25lZCBsb25n IGZsYWdzOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3Bs ICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmb2xkLT5saXN0LT5s b2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgX19za2JfYXBwZW5kKG9sZCwgbmV3c2spOwogICAg ICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAg OyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwp9CgoK CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl91bmxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0cnVjdCBza19idWZmICogbmV4 dCwgKiBwcmV2OwoKICAgICAgICBsaXN0LT5xbGVuLS07CiAgICAgICAgbmV4dCA9IHNrYi0+bmV4 dDsKICAgICAgICBwcmV2ID0gc2tiLT5wcmV2OwogICAgICAgIHNrYi0+bmV4dCA9ICgodm9pZCAq KTApOwogICAgICAgIHNrYi0+cHJldiA9ICgodm9pZCAqKTApOwogICAgICAgIHNrYi0+bGlzdCA9 ICgodm9pZCAqKTApOwogICAgICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAgICAgIHByZXYtPm5l eHQgPSBuZXh0Owp9CiMgNjk0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5o IgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3VubGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHNrYi0+bGlzdDsKCiAgICAgICAgaWYo bGlzdCkgewogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmbGlzdC0+bG9jayk7IH0gd2hpbGUgKDAp OwogICAgICAgICAgICAgICAgaWYoc2tiLT5saXN0ID09IGxpc3QpCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fc2tiX3VubGluayhza2IsIHNrYi0+bGlzdCk7CiAgICAgICAgICAgICAgICBkbyB7 IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwi OiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKICAgICAgICB9Cn0K IyA3MTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX2RlcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFk ICpsaXN0KQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwobGlz dCk7CiAgICAgICAgaWYgKHNrYikKICAgICAgICAgICAgICAgIF9fc2tiX3VubGluayhza2IsIGxp c3QpOwogICAgICAgIHJldHVybiBza2I7Cn0KIyA3MzYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9kZXF1ZXVl X3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIGxvbmcgZmxhZ3M7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3VsdDsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIp OyAodm9pZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICByZXN1bHQgPSBfX3Nr Yl9kZXF1ZXVlX3RhaWwobGlzdCk7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNt X18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnki LCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKfQoKc3RhdGljIGlu bGluZSBpbnQgc2tiX2lzX25vbmxpbmVhcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAg ICAgICAgcmV0dXJuIHNrYi0+ZGF0YV9sZW47Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNrYl9oZWFk bGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICByZXR1cm4gc2tiLT5sZW4g LSBza2ItPmRhdGFfbGVuOwp9CiMgNzY1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fc2tiX3B1dChzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgdW5zaWduZWQgY2hhciAqdG1w PXNrYi0+dGFpbDsKICAgICAgICBkbyB7IGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIF9fYXNt X18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg c2tiLT50YWlsKz1sZW47CiAgICAgICAgc2tiLT5sZW4rPWxlbjsKICAgICAgICByZXR1cm4gdG1w Owp9CiMgNzg0ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWdu ZWQgaW50IGxlbikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgKnRtcD1za2ItPnRhaWw7CiAgICAg ICAgZG8geyBpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygi LmJ5dGUgMHgwZiwweDBiIik7IH0gd2hpbGUgKDApOwogICAgICAgIHNrYi0+dGFpbCs9bGVuOwog ICAgICAgIHNrYi0+bGVuKz1sZW47CiAgICAgICAgaWYoc2tiLT50YWlsPnNrYi0+ZW5kKSB7CiAg ICAgICAgICAgICAgICBza2Jfb3Zlcl9wYW5pYyhza2IsIGxlbiwgKHsgdm9pZCAqcGM7IF9fYXNt X18oIm1vdmwgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pKTsKICAgICAgICB9CiAgICAg ICAgcmV0dXJuIHRtcDsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpfX3NrYl9wdXNo KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBza2ItPmRh dGEtPWxlbjsKICAgICAgICBza2ItPmxlbis9bGVuOwogICAgICAgIHJldHVybiBza2ItPmRhdGE7 Cn0KIyA4MTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBp bmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWdu ZWQgaW50IGxlbikKewogICAgICAgIHNrYi0+ZGF0YS09bGVuOwogICAgICAgIHNrYi0+bGVuKz1s ZW47CiAgICAgICAgaWYoc2tiLT5kYXRhPHNrYi0+aGVhZCkgewogICAgICAgICAgICAgICAgc2ti X3VuZGVyX3BhbmljKHNrYiwgbGVuLCAoeyB2b2lkICpwYzsgX19hc21fXygibW92bCAkMWYsJTBc bjE6IjoiPWciIChwYykpOyBwYzsgfSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2tiLT5k YXRhOwp9CgpzdGF0aWMgaW5saW5lIGNoYXIgKl9fc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNr YiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHNrYi0+bGVuLT1sZW47CiAgICAgICAgaWYg KHNrYi0+bGVuIDwgc2tiLT5kYXRhX2xlbikKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xh dGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKICAgICAgICByZXR1cm4gc2tiLT5kYXRhKz1sZW47 Cn0KIyA4NDIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBp bmxpbmUgdW5zaWduZWQgY2hhciAqIHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2ln bmVkIGludCBsZW4pCnsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAgICAg ICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9fc2tiX3B1bGwoc2tiLGxlbik7 Cn0KCmV4dGVybiB1bnNpZ25lZCBjaGFyICogX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBpbnQgZGVsdGEpOwoKc3RhdGljIGlubGluZSBjaGFyICpfX3Bza2JfcHVsbChzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA+IHNr Yl9oZWFkbGVuKHNrYikgJiYKICAgICAgICAgICAgX19wc2tiX3B1bGxfdGFpbChza2IsIGxlbi1z a2JfaGVhZGxlbihza2IpKSA9PSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgIHJldHVybiAo KHZvaWQgKikwKTsKICAgICAgICBza2ItPmxlbiAtPSBsZW47CiAgICAgICAgcmV0dXJuIHNrYi0+ ZGF0YSArPSBsZW47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqIHBza2JfcHVsbChz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA+ IHNrYi0+bGVuKQogICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHJl dHVybiBfX3Bza2JfcHVsbChza2IsbGVuKTsKfQoKc3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlf cHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYg KGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAg ICAgaWYgKGxlbiA+IHNrYi0+bGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg cmV0dXJuIChfX3Bza2JfcHVsbF90YWlsKHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpICE9ICgo dm9pZCAqKTApKTsKfQojIDg4MyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYu aCIKc3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpz a2IpCnsKICAgICAgICByZXR1cm4gc2tiLT5kYXRhLXNrYi0+aGVhZDsKfQojIDg5NSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQgc2tiX3Rh aWxyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICByZXR1cm4gc2tiX2lz X25vbmxpbmVhcihza2IpID8gMCA6IHNrYi0+ZW5kLXNrYi0+dGFpbDsKfQojIDkwOSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl9y ZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBz a2ItPmRhdGErPWxlbjsKICAgICAgICBza2ItPnRhaWwrPWxlbjsKfQoKZXh0ZXJuIGludCBfX19w c2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbiwgaW50IHJlYWxs b2MpOwoKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwg dW5zaWduZWQgaW50IGxlbikKewogICAgICAgIGlmICghc2tiLT5kYXRhX2xlbikgewogICAgICAg ICAgICAgICAgc2tiLT5sZW4gPSBsZW47CiAgICAgICAgICAgICAgICBza2ItPnRhaWwgPSBza2It PmRhdGErbGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfX19wc2tiX3RyaW0o c2tiLCBsZW4sIDApOwogICAgICAgIH0KfQojIDkzNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl90cmltKHN0cnVjdCBza19idWZm ICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAoc2tiLT5sZW4gPiBsZW4pIHsK ICAgICAgICAgICAgICAgIF9fc2tiX3RyaW0oc2tiLCBsZW4pOwogICAgICAgIH0KfQoKCnN0YXRp YyBpbmxpbmUgaW50IF9fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGlu dCBsZW4pCnsKICAgICAgICBpZiAoIXNrYi0+ZGF0YV9sZW4pIHsKICAgICAgICAgICAgICAgIHNr Yi0+bGVuID0gbGVuOwogICAgICAgICAgICAgICAgc2tiLT50YWlsID0gc2tiLT5kYXRhK2xlbjsK ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICByZXR1cm4gX19fcHNrYl90cmltKHNrYiwgbGVuLCAxKTsKICAgICAgICB9Cn0KCnN0YXRpYyBp bmxpbmUgaW50IHBza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVu KQp7CiAgICAgICAgaWYgKGxlbiA8IHNrYi0+bGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f cHNrYl90cmltKHNrYiwgbGVuKTsKICAgICAgICByZXR1cm4gMDsKfQojIDk3MiAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl9vcnBo YW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGlmIChza2ItPmRlc3RydWN0b3IpCiAg ICAgICAgICAgICAgICBza2ItPmRlc3RydWN0b3Ioc2tiKTsKICAgICAgICBza2ItPmRlc3RydWN0 b3IgPSAoKHZvaWQgKikwKTsKICAgICAgICBza2ItPnNrID0gKCh2b2lkICopMCk7Cn0KIyA5OTAg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2JfcXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0 cnVjdCBza19idWZmICpza2I7CiAgICAgICAgd2hpbGUgKChza2I9c2tiX2RlcXVldWUobGlzdCkp IT0oKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwp9CiMgMTAwNyAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lk IF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKICAgICAgICBz dHJ1Y3Qgc2tfYnVmZiAqc2tiOwogICAgICAgIHdoaWxlICgoc2tiPV9fc2tiX2RlcXVldWUobGlz dCkpIT0oKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwp9CiMgMTAy NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBz dHJ1Y3Qgc2tfYnVmZiAqX19kZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ2ZwX21hc2spCnsK ICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoKICAgICAgICBza2IgPSBhbGxvY19za2IobGVu Z3RoKzE2LCBnZnBfbWFzayk7CiAgICAgICAgaWYgKHNrYikKICAgICAgICAgICAgICAgIHNrYl9y ZXNlcnZlKHNrYiwxNik7CiAgICAgICAgcmV0dXJuIHNrYjsKfQojIDEwNTEgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYg KmRldl9hbGxvY19za2IodW5zaWduZWQgaW50IGxlbmd0aCkKewogICAgICAgIHJldHVybiBfX2Rl dl9hbGxvY19za2IobGVuZ3RoLCAoMHgyMCkpOwp9CiMgMTA2OSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQKc2tiX2NvdyhzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCnsKICAgICAgICBpbnQgZGVsdGEgPSAo aGVhZHJvb20gPiAxNiA/IGhlYWRyb29tIDogMTYpIC0gc2tiX2hlYWRyb29tKHNrYik7CgogICAg ICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAgICAgICAgICBkZWx0YSA9IDA7CgogICAgICAgIGlm IChkZWx0YSB8fCBza2JfY2xvbmVkKHNrYikpCiAgICAgICAgICAgICAgICByZXR1cm4gcHNrYl9l eHBhbmRfaGVhZChza2IsIChkZWx0YSsxNSkmfjE1LCAwLCAoMHgyMCkpOwogICAgICAgIHJldHVy biAwOwp9CiMgMTA4OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKaW50 IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcCk7CgpzdGF0aWMgaW5s aW5lIHZvaWQgKmttYXBfc2tiX2ZyYWcoY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZykKewoKCgoKCgog ICAgICAgIHJldHVybiBrbWFwKGZyYWctPnBhZ2UpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQga3Vu bWFwX3NrYl9mcmFnKHZvaWQgKnZhZGRyKQp7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKCgoK fQoKCgoKCgoKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX3JlY3ZfZGF0YWdyYW0oc3RydWN0 IHNvY2sgKnNrLHVuc2lnbmVkIGZsYWdzLGludCBub2Jsb2NrLCBpbnQgKmVycik7CmV4dGVybiB1 bnNpZ25lZCBpbnQgZGF0YWdyYW1fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tl dCAqc29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKZXh0ZXJuIGludCBza2Jf Y29weV9kYXRhZ3JhbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IG9mZnNldCwgY2hh ciAqdG8saW50IHNpemUpOwpleHRlcm4gaW50IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKGNvbnN0 IHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgaW92ZWMgKnRvLGludCBz aXplKTsKZXh0ZXJuIGludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbShjb25zdCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1OCAqdG8sIGludCBsZW4sIHVuc2lnbmVkIGludCAq Y3N1bXApOwpleHRlcm4gaW50IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKGNvbnN0 IHN0cnVjdCBza19idWZmICpza2IsIGludCBobGVuLCBzdHJ1Y3QgaW92ZWMgKmlvdik7CmV4dGVy biB2b2lkIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZm ICpza2IpOwoKZXh0ZXJuIHVuc2lnbmVkIGludCBza2JfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNr X2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgaW50IGxlbiwgdW5zaWduZWQgaW50IGNzdW0pOwpleHRl cm4gaW50IHNrYl9jb3B5X2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNl dCwgdm9pZCAqdG8sIGludCBsZW4pOwpleHRlcm4gdW5zaWduZWQgaW50IHNrYl9jb3B5X2FuZF9j c3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgdTggKnRvLCBp bnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1bSk7CmV4dGVybiB2b2lkIHNrYl9jb3B5X2FuZF9jc3Vt X2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pOwoKZXh0ZXJuIHZvaWQgc2ti X2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHNrYl9hZGRfbXR1KGludCBtdHUpOwoKCnN0YXRpYyBp bmxpbmUgdm9pZApuZl9jb25udHJhY2tfcHV0KHN0cnVjdCBuZl9jdF9pbmZvICpuZmN0KQp7CiAg ICAgICAgaWYgKG5mY3QgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmbmZjdC0+bWFzdGVyLT51c2Up KQogICAgICAgICAgICAgICAgbmZjdC0+bWFzdGVyLT5kZXN0cm95KG5mY3QtPm1hc3Rlcik7Cn0K c3RhdGljIGlubGluZSB2b2lkCm5mX2Nvbm50cmFja19nZXQoc3RydWN0IG5mX2N0X2luZm8gKm5m Y3QpCnsKICAgICAgICBpZiAobmZjdCkKICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJm5mY3Qt Pm1hc3Rlci0+dXNlKTsKfQojIDE0NyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZXRk ZXZpY2UuaCIgMgoKc3RydWN0IG5laWdoYm91cjsKc3RydWN0IG5laWdoX3Bhcm1zOwpzdHJ1Y3Qg c2tfYnVmZjsKCnN0cnVjdCBuZXRpZl9yeF9zdGF0cwp7CiAgICAgICAgdW5zaWduZWQgdG90YWw7 CiAgICAgICAgdW5zaWduZWQgZHJvcHBlZDsKICAgICAgICB1bnNpZ25lZCB0aW1lX3NxdWVlemU7 CiAgICAgICAgdW5zaWduZWQgdGhyb3R0bGVkOwogICAgICAgIHVuc2lnbmVkIGZhc3Ryb3V0ZV9o aXQ7CiAgICAgICAgdW5zaWduZWQgZmFzdHJvdXRlX3N1Y2Nlc3M7CiAgICAgICAgdW5zaWduZWQg ZmFzdHJvdXRlX2RlZmVyOwogICAgICAgIHVuc2lnbmVkIGZhc3Ryb3V0ZV9kZWZlcnJlZF9vdXQ7 CiAgICAgICAgdW5zaWduZWQgZmFzdHJvdXRlX2xhdGVuY3lfcmVkdWN0aW9uOwogICAgICAgIHVu c2lnbmVkIGNwdV9jb2xsaXNpb247Cn0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKCgxIDw8 ICgoNSkpKSkpKTsKCmV4dGVybiBzdHJ1Y3QgbmV0aWZfcnhfc3RhdHMgbmV0ZGV2X3J4X3N0YXRb XTsKCgoKCgoKc3RydWN0IGRldl9tY19saXN0CnsKICAgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3Qg Km5leHQ7CiAgICAgICAgX191OCBkbWlfYWRkcls4XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRt aV9hZGRybGVuOwogICAgICAgIGludCBkbWlfdXNlcnM7CiAgICAgICAgaW50IGRtaV9ndXNlcnM7 Cn07CgpzdHJ1Y3QgaGhfY2FjaGUKewogICAgICAgIHN0cnVjdCBoaF9jYWNoZSAqaGhfbmV4dDsK ICAgICAgICBhdG9taWNfdCBoaF9yZWZjbnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaGhfdHlw ZTsKICAgICAgICBpbnQgaGhfbGVuOwogICAgICAgIGludCAoKmhoX291dHB1dCkoc3RydWN0IHNr X2J1ZmYgKnNrYik7CiAgICAgICAgcndsb2NrX3QgaGhfbG9jazsKCiAgICAgICAgdW5zaWduZWQg bG9uZyBoaF9kYXRhWzE2L3NpemVvZih1bnNpZ25lZCBsb25nKV07Cn07CgoKCgoKCmVudW0gbmV0 ZGV2X3N0YXRlX3QKewogICAgICAgIF9fTElOS19TVEFURV9YT0ZGPTAsCiAgICAgICAgX19MSU5L X1NUQVRFX1NUQVJULAogICAgICAgIF9fTElOS19TVEFURV9QUkVTRU5ULAogICAgICAgIF9fTElO S19TVEFURV9TQ0hFRCwKICAgICAgICBfX0xJTktfU1RBVEVfTk9DQVJSSUVSCn07CgoKCgoKCnN0 cnVjdCBuZXRkZXZfYm9vdF9zZXR1cCB7CiAgICAgICAgY2hhciBuYW1lWzE2XTsKICAgICAgICBz dHJ1Y3QgaWZtYXAgbWFwOwp9OwojIDIzMCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9u ZXRkZXZpY2UuaCIKc3RydWN0IG5ldF9kZXZpY2UKewoKCgoKCgogICAgICAgIGNoYXIgbmFtZVsx Nl07CgoKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJtZW1fZW5kOwogICAgICAgIHVuc2lnbmVk IGxvbmcgcm1lbV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIG1lbV9lbmQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7 CiAgICAgICAgdW5zaWduZWQgaW50IGlycTsKCgoKCgoKICAgICAgICB1bnNpZ25lZCBjaGFyIGlm X3BvcnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBkbWE7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg c3RhdGU7CgogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXh0OwoKCiAgICAgICAgaW50ICgq aW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgoKCiAgICAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKm5leHRfc2NoZWQ7CgoKICAgICAgICBpbnQgaWZpbmRleDsKICAgICAgICBpbnQgaWZsaW5r OwoKCiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqZ2V0X3N0YXRzKShzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KTsKICAgICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyogKCpnZXRfd2ly ZWxlc3Nfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwojIDI4NSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIKICAgICAgICB1bnNpZ25lZCBsb25nIHRyYW5z X3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9yeDsKCiAgICAgICAgdW5zaWduZWQg c2hvcnQgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ2ZsYWdzOwogICAgICAgIHVuc2ln bmVkIG10dTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGhhcmRfaGVhZGVyX2xlbjsKICAgICAgICB2b2lkICpwcml2OwoKICAgICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqbWFzdGVyOwoKCgoKICAgICAgICB1bnNpZ25lZCBjaGFyIGJyb2FkY2FzdFs4 XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRldl9hZGRyWzhdOwogICAgICAgIHVuc2lnbmVkIGNo YXIgYWRkcl9sZW47CgogICAgICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdDsKICAgICAg ICBpbnQgbWNfY291bnQ7CiAgICAgICAgaW50IHByb21pc2N1aXR5OwogICAgICAgIGludCBhbGxt dWx0aTsKCiAgICAgICAgaW50IHdhdGNoZG9nX3RpbWVvOwogICAgICAgIHN0cnVjdCB0aW1lcl9s aXN0IHdhdGNoZG9nX3RpbWVyOwoKCgogICAgICAgIHZvaWQgKmF0YWxrX3B0cjsKICAgICAgICB2 b2lkICppcF9wdHI7CiAgICAgICAgdm9pZCAqZG5fcHRyOwogICAgICAgIHZvaWQgKmlwNl9wdHI7 CiAgICAgICAgdm9pZCAqZWNfcHRyOwoKICAgICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjOwogICAg ICAgIHN0cnVjdCBRZGlzYyAqcWRpc2Nfc2xlZXBpbmc7CiAgICAgICAgc3RydWN0IFFkaXNjICpx ZGlzY19saXN0OwogICAgICAgIHN0cnVjdCBRZGlzYyAqcWRpc2NfaW5ncmVzczsKICAgICAgICB1 bnNpZ25lZCBsb25nIHR4X3F1ZXVlX2xlbjsKCgogICAgICAgIHNwaW5sb2NrX3QgeG1pdF9sb2Nr OwoKCgogICAgICAgIGludCB4bWl0X2xvY2tfb3duZXI7CgogICAgICAgIHNwaW5sb2NrX3QgcXVl dWVfbG9jazsKCiAgICAgICAgYXRvbWljX3QgcmVmY250OwoKICAgICAgICBpbnQgZGVhZGJlYWY7 CgoKICAgICAgICBpbnQgZmVhdHVyZXM7CiMgMzUwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L25ldGRldmljZS5oIgogICAgICAgIHZvaWQgKCp1bmluaXQpKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOwoKICAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IG5ldF9kZXZpY2UgKmRl dik7CgoKICAgICAgICBpbnQgKCpvcGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAgICAg ICBpbnQgKCpzdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAgICAgICBpbnQgKCpoYXJk X3N0YXJ0X3htaXQpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAg ICAgICAgaW50ICgqaGFyZF9oZWFkZXIpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBzaG9ydCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpkYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqc2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbik7CiAgICAgICAgaW50ICgqcmVidWlsZF9oZWFk ZXIpKHN0cnVjdCBza19idWZmICpza2IpOwoKICAgICAgICB2b2lkICgqc2V0X211bHRpY2FzdF9s aXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCiAgICAgICAgaW50ICgqc2V0X21hY19hZGRy ZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphZGRyKTsKCiAgICAgICAgaW50ICgqZG9faW9j dGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwoKICAgICAgICBpbnQg KCpzZXRfY29uZmlnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbWFwICptYXApOwoKICAgICAgICBp bnQgKCpoYXJkX2hlYWRlcl9jYWNoZSkoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhoX2Nh Y2hlICpoaCk7CiAgICAgICAgdm9pZCAoKmhlYWRlcl9jYWNoZV91cGRhdGUpKHN0cnVjdCBoaF9j YWNoZSAqaGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGhhZGRyKTsKCiAg ICAgICAgaW50ICgqY2hhbmdlX210dSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19t dHUpOwoKCiAgICAgICAgdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsKCiAgICAgICAgaW50ICgqaGFyZF9oZWFkZXJfcGFyc2UpKHN0cnVjdCBza19idWZmICpza2Is CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqaGFkZHIpOwogICAgICAgIGludCAoKm5laWdoX3NldHVwKShzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKik7CiAgICAgICAgaW50ICgqYWNjZXB0 X2Zhc3RwYXRoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZHN0X2VudHJ5Kik7CgoKICAg ICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKCgogICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3Bv cnQgKmJyX3BvcnQ7CiMgNDEwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGRldmlj ZS5oIgp9OwoKCnN0cnVjdCBwYWNrZXRfdHlwZQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw ZTsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgICAgIGludCAoKmZ1bmMpIChz dHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqKTsKICAgICAgICB2b2lk ICpkYXRhOwogICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqbmV4dDsKfTsKCgojIDEgIi91c3Iv c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDEKCgoKCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2tlcm5lbC5oIiAxCiMgNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21wLmgiIDEKIyA4ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9pbnRlcnJ1cHQuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRv cHMuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAxMiAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 L2luY2x1ZGUvYXNtL3B0cmFjZS5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvaW50ZXJydXB0LmgiIDIKCnN0cnVjdCBpcnFhY3Rpb24gewogICAgICAgIHZvaWQgKCpoYW5k bGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CiAgICAgICAgY29uc3QgY2hhciAq bmFtZTsKICAgICAgICB2b2lkICpkZXZfaWQ7CiAgICAgICAgc3RydWN0IGlycWFjdGlvbiAqbmV4 dDsKfTsKCgoKCgplbnVtIHsKICAgICAgICBUSU1FUl9CSCA9IDAsCiAgICAgICAgVFFVRVVFX0JI LAogICAgICAgIERJR0lfQkgsCiAgICAgICAgU0VSSUFMX0JILAogICAgICAgIFJJU0NPTThfQkgs CiAgICAgICAgU1BFQ0lBTElYX0JILAogICAgICAgIEFVUk9SQV9CSCwKICAgICAgICBFU1BfQkgs CiAgICAgICAgU0NTSV9CSCwKICAgICAgICBJTU1FRElBVEVfQkgsCiAgICAgICAgQ1lDTEFERVNf QkgsCiAgICAgICAgQ00yMDZfQkgsCiAgICAgICAgSlNfQkgsCiAgICAgICAgTUFDU0VSSUFMX0JI LAogICAgICAgIElTSUNPTV9CSAp9OwoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9o YXJkaXJxLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5o IiAxCiMgNSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2lycS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaXJxLmgiCiMg MSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEzICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L2lycS5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgvaW5j bHVkZS9saW51eC9jYWNoZS5oIiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv aXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEK IyAxOCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoKIyAxICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2FzbS9pcnEuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAx CiMgMTQgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lycS5oIiAyCiMgMjggIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL2lycS5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm5v bmljYWxpemUoaW50IGlycSkKewogICAgICAgIHJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEp Owp9CgpleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBk aXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1 bnNpZ25lZCBpbnQpOwojIDIwICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2lycS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAyMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDM5ICIvdXNyL3NyYy9saW51eC9pbmNs dWRlL2xpbnV4L2lycS5oIgpzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgewogICAgICAgIGNvbnN0 IGNoYXIgKiB0eXBlbmFtZTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpzdGFydHVwKSh1bnNpZ25l ZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqc2h1dGRvd24pKHVuc2lnbmVkIGludCBpcnEpOwog ICAgICAgIHZvaWQgKCplbmFibGUpKHVuc2lnbmVkIGludCBpcnEpOwogICAgICAgIHZvaWQgKCpk aXNhYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqYWNrKSh1bnNpZ25lZCBp bnQgaXJxKTsKICAgICAgICB2b2lkICgqZW5kKSh1bnNpZ25lZCBpbnQgaXJxKTsKICAgICAgICB2 b2lkICgqc2V0X2FmZmluaXR5KSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIG1hc2sp Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaHdfaXJxX2NvbnRyb2xsZXI7 CiMgNTkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaXJxLmgiCnR5cGVkZWYgc3RydWN0 IHsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOwogICAgICAgIGh3X2lycV9jb250cm9sbGVy ICpoYW5kbGVyOwogICAgICAgIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKICAgICAgICB1bnNp Z25lZCBpbnQgZGVwdGg7CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwp9IF9fYXR0cmlidXRlX18o KF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSkpKSBpcnFfZGVzY190OwoKZXh0ZXJuIGlycV9kZXNj X3QgaXJxX2Rlc2MgWzIyNF07CgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2h3X2ly cS5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9hc20vaHdfaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2Fz bS9hdG9taWMuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9od19pcnEuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lycS5oIiAxCiMgMTggIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oIiAyCiMgNjEgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvYXNtL2h3X2lycS5oIgpleHRlcm4gaW50IGlycV92ZWN0b3JbMjI0XTsKIyA3MSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vaHdfaXJxLmgiCmV4dGVybiB2b2lkIG1hc2tfaXJxKHVuc2ln bmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCB1bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpl eHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIHZv aWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIGludCBpODI1OUFf aXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CmV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJx KHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKZXh0 ZXJuIHZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CmV4dGVybiB2b2lkIGluaXRfVklTV1NfQVBJQ19pcnFzKHZvaWQpOwpleHRlcm4gdm9p ZCBzZXR1cF9JT19BUElDKHZvaWQpOwpleHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7 CmV4dGVybiB2b2lkIHByaW50X0lPX0FQSUModm9pZCk7CmV4dGVybiBpbnQgSU9fQVBJQ19nZXRf UENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBmbik7CmV4dGVybiB2b2lkIHNl bmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2Fw aWNfaXJxczsKCmV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwpleHRlcm4gYXRvbWljX3Qg aXJxX21pc19jb3VudDsKCmV4dGVybiBjaGFyIF9zdGV4dCwgX2V0ZXh0OwojIDE4MyAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vaHdfaXJxLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zf Y3B1X21hc2s7CmV4dGVybiB1bnNpZ25lZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgcHJvZl9sZW47CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgoKCgoK c3RhdGljIGlubGluZSB2b2lkIHg4Nl9kb19wcm9maWxlICh1bnNpZ25lZCBsb25nIGVpcCkKewog ICAgICAgIGlmICghcHJvZl9idWZmZXIpCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgoKICAg ICAgICBpZiAoISgoMTw8MCkgJiBwcm9mX2NwdV9tYXNrKSkKICAgICAgICAgICAgICAgIHJldHVy bjsKCiAgICAgICAgZWlwIC09ICh1bnNpZ25lZCBsb25nKSAmX3N0ZXh0OwogICAgICAgIGVpcCA+ Pj0gcHJvZl9zaGlmdDsKCgoKCgogICAgICAgIGlmIChlaXAgPiBwcm9mX2xlbi0xKQogICAgICAg ICAgICAgICAgZWlwID0gcHJvZl9sZW4tMTsKICAgICAgICBhdG9taWNfaW5jKChhdG9taWNfdCAq KSZwcm9mX2J1ZmZlcltlaXBdKTsKfQoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2Vu ZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkge30KIyA3 MCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoKZXh0ZXJuIGludCBoYW5k bGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFj dGlvbiAqKTsKZXh0ZXJuIGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50ICwgc3RydWN0IGlycWFj dGlvbiAqICk7CgpleHRlcm4gaHdfaXJxX2NvbnRyb2xsZXIgbm9faXJxX3R5cGU7CmV4dGVybiB2 b2lkIG5vX2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdz KTsKIyA3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKCgp0eXBlZGVm IHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogICAgICAg IHVuc2lnbmVkIGludCBfX2xvY2FsX2lycV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19s b2NhbF9iaF9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19zeXNjYWxsX2NvdW50OwogICAg ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIF9fa3NvZnRpcnFkX3Rhc2s7CiAgICAgICAgdW5zaWdu ZWQgaW50IF9fbm1pX2NvdW50Owp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgo NSkpKSkpKSBpcnFfY3B1c3RhdF90OwoKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4 L2lycV9jcHVzdGF0LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcnFf Y3B1c3RhdC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEK IyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oIiAyCgoKCgoK CgpleHRlcm4gaXJxX2NwdXN0YXRfdCBpcnFfc3RhdFtdOwojIDE5ICIvdXNyL3NyYy9saW51eC9p bmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKIyA0NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NvZnRpcnEu aCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vc29mdGlycS5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9h c20vc29mdGlycS5oIiAyCiMgNDcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJy dXB0LmgiIDIKIyA1NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIK ZW51bQp7CiAgICAgICAgSElfU09GVElSUT0wLAogICAgICAgIE5FVF9UWF9TT0ZUSVJRLAogICAg ICAgIE5FVF9SWF9TT0ZUSVJRLAogICAgICAgIFRBU0tMRVRfU09GVElSUQp9OwoKCgoKCnN0cnVj dCBzb2Z0aXJxX2FjdGlvbgp7CiAgICAgICAgdm9pZCAoKmFjdGlvbikoc3RydWN0IHNvZnRpcnFf YWN0aW9uICopOwogICAgICAgIHZvaWQgKmRhdGE7Cn07CgogX19hdHRyaWJ1dGVfXygocmVncGFy bSgwKSkpIHZvaWQgZG9fc29mdGlycSh2b2lkKTsKZXh0ZXJuIHZvaWQgb3Blbl9zb2Z0aXJxKGlu dCBuciwgdm9pZCAoKmFjdGlvbikoc3RydWN0IHNvZnRpcnFfYWN0aW9uKiksIHZvaWQgKmRhdGEp OwpleHRlcm4gdm9pZCBzb2Z0aXJxX2luaXQodm9pZCk7CgpleHRlcm4gdm9pZCBjcHVfcmFpc2Vf c29mdGlycSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbnIpIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycSh1bnNpZ25lZCBpbnQgbnIp IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyAxMDMgIi91c3Ivc3JjL2xpbnV4L2luY2x1 ZGUvbGludXgvaW50ZXJydXB0LmgiCnN0cnVjdCB0YXNrbGV0X3N0cnVjdAp7CiAgICAgICAgc3Ry dWN0IHRhc2tsZXRfc3RydWN0ICpuZXh0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhdGU7CiAg ICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgdm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcp OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YTsKfTsKIyAxMTkgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIFRBU0tMRVRfU1RBVEVfU0NI RUQsCiAgICAgICAgVEFTS0xFVF9TVEFURV9SVU4KfTsKCnN0cnVjdCB0YXNrbGV0X2hlYWQKewog ICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqbGlzdDsKfSBfX2F0dHJpYnV0ZV9fICgoX19h bGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpOwoKZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFz a2xldF92ZWNbMV07CmV4dGVybiBzdHJ1Y3QgdGFza2xldF9oZWFkIHRhc2tsZXRfaGlfdmVjWzFd OwojIDE1NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKZXh0ZXJu IHZvaWQgX190YXNrbGV0X3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkgX19hdHRy aWJ1dGVfXygocmVncGFybSgzKSkpOwoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfc2NoZWR1 bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRf Yml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX3Rh c2tsZXRfc2NoZWR1bGUodCk7Cn0KCmV4dGVybiB2b2lkIF9fdGFza2xldF9oaV9zY2hlZHVsZShz dHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0 YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVj dCAqdCkKewogICAgICAgIGlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVE LCAmdC0+c3RhdGUpKQogICAgICAgICAgICAgICAgX190YXNrbGV0X2hpX3NjaGVkdWxlKHQpOwp9 CgoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfZGlzYWJsZV9ub3N5bmMoc3RydWN0IHRhc2ts ZXRfc3RydWN0ICp0KQp7CiAgICAgICAgYXRvbWljX2luYygmdC0+Y291bnQpOwogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZCB0YXNrbGV0X2Rpc2FibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgdGFz a2xldF9kaXNhYmxlX25vc3luYyh0KTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwogICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCB0YXNrbGV0X2VuYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAgICAgIGF0b21pY19kZWMo JnQtPmNvdW50KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfaGlfZW5hYmxlKHN0cnVj dCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6 IDoibWVtb3J5Iik7CiAgICAgICAgYXRvbWljX2RlYygmdC0+Y291bnQpOwp9CgpleHRlcm4gdm9p ZCB0YXNrbGV0X2tpbGwoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTsKZXh0ZXJuIHZvaWQgdGFz a2xldF9pbml0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKIyAy MjIgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmV4dGVybiBzdHJ1 Y3QgdGFza2xldF9zdHJ1Y3QgYmhfdGFza192ZWNbXTsKCgpleHRlcm4gc3BpbmxvY2tfdCBnbG9i YWxfYmhfbG9jazsKCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2JoKGludCBucikKewogICAgICAg IHRhc2tsZXRfaGlfc2NoZWR1bGUoYmhfdGFza192ZWMrbnIpOwp9CgpleHRlcm4gdm9pZCBpbml0 X2JoKGludCBuciwgdm9pZCAoKnJvdXRpbmUpKHZvaWQpKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2Jo KGludCBucik7CiMgMjYzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5o IgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCk7CmV4dGVybiBpbnQgcHJv YmVfaXJxX29mZih1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9iZV9pcnFf bWFzayh1bnNpZ25lZCBsb25nKTsKIyA0MjUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25vdGlmaWVy LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXJybm8uaCIgMQojIDEzICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgiIDIKCnN0cnVjdCBub3RpZmllcl9ibG9jawp7 CiAgICAgICAgaW50ICgqbm90aWZpZXJfY2FsbCkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxm LCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogICAgICAgIHN0cnVjdCBub3RpZmllcl9ibG9jayAq bmV4dDsKICAgICAgICBpbnQgcHJpb3JpdHk7Cn07CgoKCgpleHRlcm4gaW50IG5vdGlmaWVyX2No YWluX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKmxpc3QsIHN0cnVjdCBub3RpZmll cl9ibG9jayAqbik7CmV4dGVybiBpbnQgbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3Qg bm90aWZpZXJfYmxvY2sgKipubCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKTsKZXh0ZXJuIGlu dCBub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm4sIHVuc2lnbmVk IGxvbmcgdmFsLCB2b2lkICp2KTsKIyA0MjYgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bmV0ZGV2aWNlLmgiIDIKCmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSBsb29wYmFja19kZXY7CmV4 dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2Jhc2U7CmV4dGVybiByd2xvY2tfdCBkZXZfYmFz ZV9sb2NrOwoKZXh0ZXJuIGludCBuZXRkZXZfYm9vdF9zZXR1cF9hZGQoY2hhciAqbmFtZSwgc3Ry dWN0IGlmbWFwICptYXApOwpleHRlcm4gaW50IG5ldGRldl9ib290X3NldHVwX2NoZWNrKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3 YWRkcih1bnNpZ25lZCBzaG9ydCB0eXBlLCBjaGFyICpod2FkZHIpOwpleHRlcm4gdm9pZCBkZXZf YWRkX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpwdCk7CmV4dGVybiB2b2lkIGRldl9yZW1vdmVf cGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KTsKZXh0ZXJuIGludCBkZXZfZ2V0KGNvbnN0IGNo YXIgKm5hbWUpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShjb25z dCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFt ZShjb25zdCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfYWxsb2Mo Y29uc3QgY2hhciAqbmFtZSwgaW50ICplcnIpOwpleHRlcm4gaW50IGRldl9hbGxvY19uYW1lKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gaW50IGRldl9v cGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gaW50IGRldl9jbG9zZShzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIGludCBkZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKTsKZXh0ZXJuIGludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3Rp Zmllcl9ibG9jayAqbmIpOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVy KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpleHRlcm4gaW50IGRldl9uZXdfaW5kZXgodm9p ZCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9pbmRleChpbnQgaWZpbmRl eCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X2luZGV4KGludCBpZmlu ZGV4KTsKZXh0ZXJuIGludCBkZXZfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCnR5 cGVkZWYgaW50IGdpZmNvbmZfZnVuY190KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBjaGFyICog YnVmcHRyLCBpbnQgbGVuKTsKZXh0ZXJuIGludCByZWdpc3Rlcl9naWZjb25mKHVuc2lnbmVkIGlu dCBmYW1pbHksIGdpZmNvbmZfZnVuY190ICogZ2lmY29uZik7CnN0YXRpYyBpbmxpbmUgaW50IHVu cmVnaXN0ZXJfZ2lmY29uZih1bnNpZ25lZCBpbnQgZmFtaWx5KQp7CiAgICAgICAgcmV0dXJuIHJl Z2lzdGVyX2dpZmNvbmYoZmFtaWx5LCAwKTsKfQoKCgoKCgpzdHJ1Y3Qgc29mdG5ldF9kYXRhCnsK ICAgICAgICBpbnQgdGhyb3R0bGU7CiAgICAgICAgaW50IGNuZ19sZXZlbDsKICAgICAgICBpbnQg YXZnX2Jsb2c7CiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBpbnB1dF9wa3RfcXVldWU7CiAg ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dHB1dF9xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc2tf YnVmZiAqY29tcGxldGlvbl9xdWV1ZTsKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8 PCAoKDUpKSkpKSk7CgoKZXh0ZXJuIHN0cnVjdCBzb2Z0bmV0X2RhdGEgc29mdG5ldF9kYXRhWzFd OwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9zY2hlZHVsZShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9TQ0hF RCwgJmRldi0+c3RhdGUpKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwog ICAgICAgICAgICAgICAgaW50IGNwdSA9IDA7CgogICAgICAgICAgICAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnki KTsKICAgICAgICAgICAgICAgIGRldi0+bmV4dF9zY2hlZCA9IHNvZnRuZXRfZGF0YVtjcHVdLm91 dHB1dF9xdWV1ZTsKICAgICAgICAgICAgICAgIHNvZnRuZXRfZGF0YVtjcHVdLm91dHB1dF9xdWV1 ZSA9IGRldjsKICAgICAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGNwdSwgTkVUX1RYX1NP RlRJUlEpOwogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsg cG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOwogICAgICAgIH0KfQoKc3RhdGlj IGlubGluZSB2b2lkIG5ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAg ICAgICBpZiAoIShfX2J1aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RBVEVfWE9GRikgPyBjb25z dGFudF90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX1hPRkYpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFi bGVfdGVzdF9iaXQoKF9fTElOS19TVEFURV9YT0ZGKSwoJmRldi0+c3RhdGUpKSkpCiAgICAgICAg ICAgICAgICBfX25ldGlmX3NjaGVkdWxlKGRldik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRp Zl9zdGFydF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgY2xlYXJfYml0 KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBu ZXRpZl93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAodGVz dF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSkpCiAgICAgICAg ICAgICAgICBfX25ldGlmX3NjaGVkdWxlKGRldik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRp Zl9zdG9wX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzZXRfYml0KF9f TElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlm X3F1ZXVlX3N0b3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAo X19idWlsdGluX2NvbnN0YW50X3AoX19MSU5LX1NUQVRFX1hPRkYpID8gY29uc3RhbnRfdGVzdF9i aXQoKF9fTElOS19TVEFURV9YT0ZGKSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0 KChfX0xJTktfU1RBVEVfWE9GRiksKCZkZXYtPnN0YXRlKSkpOwp9CgpzdGF0aWMgaW5saW5lIGlu dCBuZXRpZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICByZXR1cm4g KF9fYnVpbHRpbl9jb25zdGFudF9wKF9fTElOS19TVEFURV9TVEFSVCkgPyBjb25zdGFudF90ZXN0 X2JpdCgoX19MSU5LX1NUQVRFX1NUQVJUKSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3Rf Yml0KChfX0xJTktfU1RBVEVfU1RBUlQpLCgmZGV2LT5zdGF0ZSkpKTsKfQoKCgoKc3RhdGljIGlu bGluZSB2b2lkIGRldl9rZnJlZV9za2JfaXJxKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAg ICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpIHsKICAgICAgICAgICAgICAg IGludCBjcHUgPTA7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAg ICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7CiAgICAgICAgICAgICAgICBza2ItPm5leHQgPSBzb2Z0 bmV0X2RhdGFbY3B1XS5jb21wbGV0aW9uX3F1ZXVlOwogICAgICAgICAgICAgICAgc29mdG5ldF9k YXRhW2NwdV0uY29tcGxldGlvbl9xdWV1ZSA9IHNrYjsKICAgICAgICAgICAgICAgIGNwdV9yYWlz ZV9zb2Z0aXJxKGNwdSwgTkVUX1RYX1NPRlRJUlEpOwogICAgICAgICAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJj YyIpOwogICAgICAgIH0KfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRldl9rZnJlZV9za2JfYW55 KHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoKCgodm9pZCkoKDApKSwgaXJxX3N0 YXRbMF0uX19sb2NhbF9pcnFfY291bnQpICE9IDApKQogICAgICAgICAgICAgICAgZGV2X2tmcmVl X3NrYl9pcnEoc2tiKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBrZnJlZV9za2Ioc2ti KTsKfQoKZXh0ZXJuIHZvaWQgbmV0X2NhbGxfcnhfYXRvbWljKHZvaWQgKCpmbikodm9pZCkpOwoK ZXh0ZXJuIGludCBuZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBkZXZf aW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkZXZfY2hhbmdlX2Zs YWdzKHN0cnVjdCBuZXRfZGV2aWNlICosIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgZGV2X3F1ZXVl X3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoK ZXh0ZXJuIHZvaWQgZGV2X2luaXQodm9pZCk7CgpleHRlcm4gaW50IG5ldGRldl9uaXQ7CgoKCgpz dGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9uaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAg ICBpbnQgZXJyID0gbmV0aWZfcngoc2tiKTsKICAgICAgIGlmICgoKHZvaWQpKCgwKSksIGlycV9z dGF0WzBdLl9fc29mdGlycV9wZW5kaW5nKSkKICAgICAgICAgICAgICAgZG9fc29mdGlycSgpOwog ICAgICAgcmV0dXJuIGVycjsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRldl9pbml0X2J1ZmZlcnMo c3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoKfQoKZXh0ZXJuIGludCBuZXRkZXZfZmluaXNoX3Vu cmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2 X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgaWYgKGF0b21pY19kZWNfYW5k X3Rlc3QoJmRldi0+cmVmY250KSkKICAgICAgICAgICAgICAgIG5ldGRldl9maW5pc2hfdW5yZWdp c3RlcihkZXYpOwp9CiMgNTk3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGRldmlj ZS5oIgpzdGF0aWMgaW5saW5lIGludCBuZXRpZl9jYXJyaWVyX29rKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpCnsKICAgICAgICByZXR1cm4gIShfX2J1aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RB VEVfTk9DQVJSSUVSKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJTktfU1RBVEVfTk9DQVJSSUVS KSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChfX0xJTktfU1RBVEVfTk9DQVJS SUVSKSwoJmRldi0+c3RhdGUpKSk7Cn0KCmV4dGVybiB2b2lkIF9fbmV0ZGV2X3dhdGNoZG9nX3Vw KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2NhcnJp ZXJfb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGNsZWFyX2JpdChfX0xJTktf U1RBVEVfTk9DQVJSSUVSLCAmZGV2LT5zdGF0ZSk7CiAgICAgICAgaWYgKG5ldGlmX3J1bm5pbmco ZGV2KSkKICAgICAgICAgICAgICAgIF9fbmV0ZGV2X3dhdGNoZG9nX3VwKGRldik7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBuZXRpZl9jYXJyaWVyX29mZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7 CiAgICAgICAgc2V0X2JpdChfX0xJTktfU1RBVEVfTk9DQVJSSUVSLCAmZGV2LT5zdGF0ZSk7Cn0K CgpzdGF0aWMgaW5saW5lIGludCBuZXRpZl9kZXZpY2VfcHJlc2VudChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KQp7CiAgICAgICAgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RB VEVfUFJFU0VOVCkgPyBjb25zdGFudF90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX1BSRVNFTlQpLCgm ZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKF9fTElOS19TVEFURV9QUkVTRU5UKSwo JmRldi0+c3RhdGUpKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9kZXZpY2VfZGV0YWNo KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0 KF9fTElOS19TVEFURV9QUkVTRU5ULCAmZGV2LT5zdGF0ZSkgJiYKICAgICAgICAgICAgbmV0aWZf cnVubmluZyhkZXYpKSB7CiAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAg ICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfZGV2aWNlX2F0dGFjaChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19T VEFURV9QUkVTRU5ULCAmZGV2LT5zdGF0ZSkgJiYKICAgICAgICAgICAgbmV0aWZfcnVubmluZyhk ZXYpKSB7CiAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiAgICAgICAgICAg ICAgICBfX25ldGRldl93YXRjaGRvZ191cChkZXYpOwogICAgICAgIH0KfQoKCgoKCgplbnVtIHsK ICAgICAgICBORVRJRl9NU0dfRFJWID0gMHgwMDAxLAogICAgICAgIE5FVElGX01TR19QUk9CRSA9 IDB4MDAwMiwKICAgICAgICBORVRJRl9NU0dfTElOSyA9IDB4MDAwNCwKICAgICAgICBORVRJRl9N U0dfVElNRVIgPSAweDAwMDgsCiAgICAgICAgTkVUSUZfTVNHX0lGRE9XTiA9IDB4MDAxMCwKICAg ICAgICBORVRJRl9NU0dfSUZVUCA9IDB4MDAyMCwKICAgICAgICBORVRJRl9NU0dfUlhfRVJSID0g MHgwMDQwLAogICAgICAgIE5FVElGX01TR19UWF9FUlIgPSAweDAwODAsCiAgICAgICAgTkVUSUZf TVNHX1RYX1FVRVVFRCA9IDB4MDEwMCwKICAgICAgICBORVRJRl9NU0dfSU5UUiA9IDB4MDIwMCwK ICAgICAgICBORVRJRl9NU0dfVFhfRE9ORSA9IDB4MDQwMCwKICAgICAgICBORVRJRl9NU0dfUlhf U1RBVFVTID0gMHgwODAwLAogICAgICAgIE5FVElGX01TR19QS1REQVRBID0gMHgxMDAwLAp9Owoj IDY3NiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIKZXh0ZXJuIHZv aWQgZXRoZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIGZkZGlf c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIHRyX3NldHVwKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBmY19zZXR1cChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KTsKZXh0ZXJuIHZvaWQgZmNfZnJlZWRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsK CmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRl cm4gdm9pZCB1bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVy biB2b2lkIGRldl9tY191cGxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQg ZGV2X21jX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyLCBpbnQgYWxl biwgaW50IGFsbCk7CmV4dGVybiBpbnQgZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 LCB2b2lkICphZGRyLCBpbnQgYWxlbiwgaW50IG5ld29ubHkpOwpleHRlcm4gdm9pZCBkZXZfbWNf ZGlzY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIHZvaWQgZGV2X3NldF9wcm9t aXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKZXh0ZXJuIHZvaWQgZGV2 X3NldF9hbGxtdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKZXh0ZXJuIHZv aWQgbmV0ZGV2X3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVybiB2 b2lkIGRldl9sb2FkKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gdm9pZCBkZXZfbWNhc3RfaW5p dCh2b2lkKTsKZXh0ZXJuIGludCBuZXRkZXZfcmVnaXN0ZXJfZmMoc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgdm9pZCAoKnN0aW11bCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikpOwpleHRlcm4gdm9p ZCBuZXRkZXZfdW5yZWdpc3Rlcl9mYyhpbnQgYml0KTsKZXh0ZXJuIGludCBuZXRkZXZfbWF4X2Jh Y2tsb2c7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldGRldl9mY194b2ZmOwpleHRlcm4gYXRvbWlj X3QgbmV0ZGV2X2Ryb3BwaW5nOwpleHRlcm4gaW50IG5ldGRldl9zZXRfbWFzdGVyKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIpOwpleHRlcm4gc3RydWN0 IHNrX2J1ZmYgKiBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIyAxNTIg IjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXRoZXJkZXZp Y2UuaCIgMQojIDI3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgi CiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIiAxCiMgMjggIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCIgMgoKCmV4dGVybiBpbnQg ZXRoX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZv aWQgKmRhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNhZGRy LCB1bnNpZ25lZCBsZW4pOwpleHRlcm4gaW50IGV0aF9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tf YnVmZiAqc2tiKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGV0aF90eXBlX3RyYW5zKHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBldGhfaGVh ZGVyX2NhY2hlX3VwZGF0ZShzdHJ1Y3QgaGhfY2FjaGUgKmhoLCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICogaGFkZHIpOwpleHRlcm4gaW50IGV0aF9oZWFkZXJfY2FjaGUoc3RydWN0IG5l aWdoYm91ciAqbmVpZ2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGhoX2NhY2hlICpoaCk7CmV4dGVybiBpbnQgZXRoX2hlYWRlcl9wYXJzZShzdHJ1Y3Qg c2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKmhhZGRyKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICppbml0X2V0aGVy ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzaXplb2ZfcHJpdik7CmV4dGVybiBzdHJ1 Y3QgbmV0X2RldmljZSAqYWxsb2NfZXRoZXJkZXYoaW50IHNpemVvZl9wcml2KTsKCnN0YXRpYyBp bmxpbmUgdm9pZCBldGhfY29weV9hbmRfc3VtIChzdHJ1Y3Qgc2tfYnVmZiAqZGVzdCwgdW5zaWdu ZWQgY2hhciAqc3JjLCBpbnQgbGVuLCBpbnQgYmFzZSkKewogICAgICAgIChfX2J1aWx0aW5fY29u c3RhbnRfcChsZW4pID8gX19jb25zdGFudF9tZW1jcHkoKGRlc3QtPmRhdGEpLChzcmMpLChsZW4p KSA6IF9fbWVtY3B5KChkZXN0LT5kYXRhKSwoc3JjKSwobGVuKSkpOwp9CiMgNTkgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCIKc3RhdGljIGlubGluZSBpbnQgaXNf dmFsaWRfZXRoZXJfYWRkciggdTggKmFkZHIgKQp7CiAgICAgICAgY29uc3QgY2hhciB6YWRkcls2 XSA9IHswLH07CgogICAgICAgIHJldHVybiAhKGFkZHJbMF0mMSkgJiYgX19idWlsdGluX21lbWNt cCggYWRkciwgemFkZHIsIDYpOwp9CiMgMTUzICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgv aW5jbHVkZS9saW51eC9uZXRsaW5rLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9s aW51eC9uZXRsaW5rLmgiCnN0cnVjdCBzb2NrYWRkcl9ubAp7CiAgICAgICAgc2FfZmFtaWx5X3Qg bmxfZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG5sX3BhZDsKICAgICAgICBfX3UzMiBu bF9waWQ7CiAgICAgICAgX191MzIgbmxfZ3JvdXBzOwp9OwoKc3RydWN0IG5sbXNnaGRyCnsKICAg ICAgICBfX3UzMiBubG1zZ19sZW47CiAgICAgICAgX191MTYgbmxtc2dfdHlwZTsKICAgICAgICBf X3UxNiBubG1zZ19mbGFnczsKICAgICAgICBfX3UzMiBubG1zZ19zZXE7CiAgICAgICAgX191MzIg bmxtc2dfcGlkOwp9OwojIDc3ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGxpbmsu aCIKc3RydWN0IG5sbXNnZXJyCnsKICAgICAgICBpbnQgZXJyb3I7CiAgICAgICAgc3RydWN0IG5s bXNnaGRyIG1zZzsKfTsKCgoKCgpzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMKewogICAgICAgIHN0 cnVjdCB1Y3JlZCBjcmVkczsKICAgICAgICBfX3UzMiBwaWQ7CiAgICAgICAgX191MzIgZ3JvdXBz OwogICAgICAgIF9fdTMyIGRzdF9waWQ7CiAgICAgICAgX191MzIgZHN0X2dyb3VwczsKICAgICAg ICBrZXJuZWxfY2FwX3QgZWZmX2NhcDsKfTsKCgoKCgpleHRlcm4gaW50IG5ldGxpbmtfYXR0YWNo KGludCB1bml0LCBpbnQgKCpmdW5jdGlvbikoaW50LHN0cnVjdCBza19idWZmICpza2IpKTsKZXh0 ZXJuIHZvaWQgbmV0bGlua19kZXRhY2goaW50IHVuaXQpOwpleHRlcm4gaW50IG5ldGxpbmtfcG9z dChpbnQgdW5pdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBpbnQgaW5pdF9uZXRsaW5r KHZvaWQpOwpleHRlcm4gc3RydWN0IHNvY2sgKm5ldGxpbmtfa2VybmVsX2NyZWF0ZShpbnQgdW5p dCwgdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pKTsKZXh0ZXJuIHZvaWQg bmV0bGlua19hY2soc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgs IGludCBlcnIpOwpleHRlcm4gaW50IG5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc29jayAqc3NrLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBwaWQsIGludCBub25ibG9jayk7CmV4dGVybiB2b2lk IG5ldGxpbmtfYnJvYWRjYXN0KHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2Is IF9fdTMyIHBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZ3JvdXAsIGlu dCBhbGxvY2F0aW9uKTsKZXh0ZXJuIHZvaWQgbmV0bGlua19zZXRfZXJyKHN0cnVjdCBzb2NrICpz c2ssIF9fdTMyIHBpZCwgX191MzIgZ3JvdXAsIGludCBjb2RlKTsKIyAxMjAgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvbmV0bGluay5oIgpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjawp7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saDsK ICAgICAgICBpbnQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldGxpbmtf Y2FsbGJhY2sgKmNiKTsKICAgICAgICBpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFj ayAqY2IpOwogICAgICAgIGludCBmYW1pbHk7CiAgICAgICAgbG9uZyBhcmdzWzRdOwp9OwoKc3Rh dGljIF9faW5saW5lX18gc3RydWN0IG5sbXNnaGRyICoKX19ubG1zZ19wdXQoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IHR5cGUsIGludCBsZW4pCnsKICAgICAgICBz dHJ1Y3Qgbmxtc2doZHIgKm5saDsKICAgICAgICBpbnQgc2l6ZSA9ICgobGVuKSsoICgoc2l6ZW9m KHN0cnVjdCBubG1zZ2hkcikpKzQgLTEpICYgfig0IC0xKSApKTsKCiAgICAgICAgbmxoID0gKHN0 cnVjdCBubG1zZ2hkciopc2tiX3B1dChza2IsICggKChzaXplKSs0IC0xKSAmIH4oNCAtMSkgKSk7 CiAgICAgICAgbmxoLT5ubG1zZ190eXBlID0gdHlwZTsKICAgICAgICBubGgtPm5sbXNnX2xlbiA9 IHNpemU7CiAgICAgICAgbmxoLT5ubG1zZ19mbGFncyA9IDA7CiAgICAgICAgbmxoLT5ubG1zZ19w aWQgPSBwaWQ7CiAgICAgICAgbmxoLT5ubG1zZ19zZXEgPSBzZXE7CiAgICAgICAgcmV0dXJuIG5s aDsKfQoKCgoKCmV4dGVybiBpbnQgbmV0bGlua19kdW1wX3N0YXJ0KHN0cnVjdCBzb2NrICpzc2ss IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBubG1zZ2hkciAqbmxoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpkdW1w KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayopLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFj ayopKTsKIyA1ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIiAyCiMg NTcgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBydGF0 dHIKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHJ0YV9sZW47CiAgICAgICAgdW5zaWduZWQgc2hv cnQgcnRhX3R5cGU7Cn07CiMgODMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRs aW5rLmgiCnN0cnVjdCBydG1zZwp7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fZmFtaWx5Owog ICAgICAgIHVuc2lnbmVkIGNoYXIgcnRtX2RzdF9sZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBy dG1fc3JjX2xlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV90b3M7CgogICAgICAgIHVuc2ln bmVkIGNoYXIgcnRtX3RhYmxlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRtX3Byb3RvY29sOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgcnRtX3Njb3BlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRt X3R5cGU7CgogICAgICAgIHVuc2lnbmVkIHJ0bV9mbGFnczsKfTsKCgoKZW51bQp7CiAgICAgICAg UlROX1VOU1BFQywKICAgICAgICBSVE5fVU5JQ0FTVCwKICAgICAgICBSVE5fTE9DQUwsCiAgICAg ICAgUlROX0JST0FEQ0FTVCwKCiAgICAgICAgUlROX0FOWUNBU1QsCgogICAgICAgIFJUTl9NVUxU SUNBU1QsCiAgICAgICAgUlROX0JMQUNLSE9MRSwKICAgICAgICBSVE5fVU5SRUFDSEFCTEUsCiAg ICAgICAgUlROX1BST0hJQklULAogICAgICAgIFJUTl9USFJPVywKICAgICAgICBSVE5fTkFULAog ICAgICAgIFJUTl9YUkVTT0xWRSwKfTsKIyAxNTUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvcnRuZXRsaW5rLmgiCmVudW0gcnRfc2NvcGVfdAp7CiAgICAgICAgUlRfU0NPUEVfVU5JVkVS U0U9MCwKCiAgICAgICAgUlRfU0NPUEVfU0lURT0yMDAsCiAgICAgICAgUlRfU0NPUEVfTElOSz0y NTMsCiAgICAgICAgUlRfU0NPUEVfSE9TVD0yNTQsCiAgICAgICAgUlRfU0NPUEVfTk9XSEVSRT0y NTUKfTsKIyAxNzMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCmVu dW0gcnRfY2xhc3NfdAp7CiAgICAgICAgUlRfVEFCTEVfVU5TUEVDPTAsCgogICAgICAgIFJUX1RB QkxFX0RFRkFVTFQ9MjUzLAogICAgICAgIFJUX1RBQkxFX01BSU49MjU0LAogICAgICAgIFJUX1RB QkxFX0xPQ0FMPTI1NQp9OwoKCgoKCgplbnVtIHJ0YXR0cl90eXBlX3QKewogICAgICAgIFJUQV9V TlNQRUMsCiAgICAgICAgUlRBX0RTVCwKICAgICAgICBSVEFfU1JDLAogICAgICAgIFJUQV9JSUYs CiAgICAgICAgUlRBX09JRiwKICAgICAgICBSVEFfR0FURVdBWSwKICAgICAgICBSVEFfUFJJT1JJ VFksCiAgICAgICAgUlRBX1BSRUZTUkMsCiAgICAgICAgUlRBX01FVFJJQ1MsCiAgICAgICAgUlRB X01VTFRJUEFUSCwKICAgICAgICBSVEFfUFJPVE9JTkZPLAogICAgICAgIFJUQV9GTE9XLAogICAg ICAgIFJUQV9DQUNIRUlORk8KfTsKIyAyMTggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv cnRuZXRsaW5rLmgiCnN0cnVjdCBydG5leHRob3AKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHJ0 bmhfbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRuaF9mbGFnczsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHJ0bmhfaG9wczsKICAgICAgICBpbnQgcnRuaF9pZmluZGV4Owp9OwojIDI0NSAiL3Vz ci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IHJ0YV9jYWNoZWlu Zm8KewogICAgICAgIF9fdTMyIHJ0YV9jbG50cmVmOwogICAgICAgIF9fdTMyIHJ0YV9sYXN0dXNl OwogICAgICAgIF9fczMyIHJ0YV9leHBpcmVzOwogICAgICAgIF9fdTMyIHJ0YV9lcnJvcjsKICAg ICAgICBfX3UzMiBydGFfdXNlZDsKCgogICAgICAgIF9fdTMyIHJ0YV9pZDsKICAgICAgICBfX3Uz MiBydGFfdHM7CiAgICAgICAgX191MzIgcnRhX3RzYWdlOwp9OwoKCgplbnVtCnsKICAgICAgICBS VEFYX1VOU1BFQywKCiAgICAgICAgUlRBWF9MT0NLLAoKICAgICAgICBSVEFYX01UVSwKCiAgICAg ICAgUlRBWF9XSU5ET1csCgogICAgICAgIFJUQVhfUlRULAoKICAgICAgICBSVEFYX1JUVFZBUiwK CiAgICAgICAgUlRBWF9TU1RIUkVTSCwKCiAgICAgICAgUlRBWF9DV05ELAoKICAgICAgICBSVEFY X0FEVk1TUywKCiAgICAgICAgUlRBWF9SRU9SREVSSU5HLAoKfTsKIyAyOTMgIi91c3Ivc3JjL2xp bnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBpZmFkZHJtc2cKewogICAgICAg IHVuc2lnbmVkIGNoYXIgaWZhX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlmYV9wcmVm aXhsZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBpZmFfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQg Y2hhciBpZmFfc2NvcGU7CiAgICAgICAgaW50IGlmYV9pbmRleDsKfTsKCmVudW0KewogICAgICAg IElGQV9VTlNQRUMsCiAgICAgICAgSUZBX0FERFJFU1MsCiAgICAgICAgSUZBX0xPQ0FMLAogICAg ICAgIElGQV9MQUJFTCwKICAgICAgICBJRkFfQlJPQURDQVNULAogICAgICAgIElGQV9BTllDQVNU LAogICAgICAgIElGQV9DQUNIRUlORk8KfTsKIyAzMjMgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv bGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBpZmFfY2FjaGVpbmZvCnsKICAgICAgICBfX3MzMiBp ZmFfcHJlZmVyZWQ7CiAgICAgICAgX19zMzIgaWZhX3ZhbGlkOwp9OwojIDM0NSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IG5kbXNnCnsKICAgICAgICB1 bnNpZ25lZCBjaGFyIG5kbV9mYW1pbHk7CiAgICAgICAgdW5zaWduZWQgY2hhciBuZG1fcGFkMTsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBuZG1fcGFkMjsKICAgICAgICBpbnQgbmRtX2lmaW5kZXg7 CiAgICAgICAgX191MTYgbmRtX3N0YXRlOwogICAgICAgIF9fdTggbmRtX2ZsYWdzOwogICAgICAg IF9fdTggbmRtX3R5cGU7Cn07CgplbnVtCnsKICAgICAgICBOREFfVU5TUEVDLAogICAgICAgIE5E QV9EU1QsCiAgICAgICAgTkRBX0xMQUREUiwKICAgICAgICBOREFfQ0FDSEVJTkZPCn07CiMgMzkz ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgbmRhX2Nh Y2hlaW5mbwp7CiAgICAgICAgX191MzIgbmRtX2NvbmZpcm1lZDsKICAgICAgICBfX3UzMiBuZG1f dXNlZDsKICAgICAgICBfX3UzMiBuZG1fdXBkYXRlZDsKICAgICAgICBfX3UzMiBuZG1fcmVmY250 Owp9OwoKCgoKCnN0cnVjdCBydGdlbm1zZwp7CiAgICAgICAgdW5zaWduZWQgY2hhciBydGdlbl9m YW1pbHk7Cn07CiMgNDE5ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5o IgpzdHJ1Y3QgaWZpbmZvbXNnCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlmaV9mYW1pbHk7CiAg ICAgICAgdW5zaWduZWQgY2hhciBfX2lmaV9wYWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaWZp X3R5cGU7CiAgICAgICAgaW50IGlmaV9pbmRleDsKICAgICAgICB1bnNpZ25lZCBpZmlfZmxhZ3M7 CiAgICAgICAgdW5zaWduZWQgaWZpX2NoYW5nZTsKfTsKCmVudW0KewogICAgICAgIElGTEFfVU5T UEVDLAogICAgICAgIElGTEFfQUREUkVTUywKICAgICAgICBJRkxBX0JST0FEQ0FTVCwKICAgICAg ICBJRkxBX0lGTkFNRSwKICAgICAgICBJRkxBX01UVSwKICAgICAgICBJRkxBX0xJTkssCiAgICAg ICAgSUZMQV9RRElTQywKICAgICAgICBJRkxBX1NUQVRTLAogICAgICAgIElGTEFfQ09TVCwKCiAg ICAgICAgSUZMQV9QUklPUklUWSwKCiAgICAgICAgSUZMQV9NQVNURVIKCn07CiMgNDg2ICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgdGNtc2cKewogICAg ICAgIHVuc2lnbmVkIGNoYXIgdGNtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHRjbV9f cGFkMTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0Y21fX3BhZDI7CiAgICAgICAgaW50IHRjbV9p ZmluZGV4OwogICAgICAgIF9fdTMyIHRjbV9oYW5kbGU7CiAgICAgICAgX191MzIgdGNtX3BhcmVu dDsKICAgICAgICBfX3UzMiB0Y21faW5mbzsKfTsKCmVudW0KewogICAgICAgIFRDQV9VTlNQRUMs CiAgICAgICAgVENBX0tJTkQsCiAgICAgICAgVENBX09QVElPTlMsCiAgICAgICAgVENBX1NUQVRT LAogICAgICAgIFRDQV9YU1RBVFMsCiAgICAgICAgVENBX1JBVEUsCn07CiMgNTM5ICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgojIDEgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1NDAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGlu dXgvcnRuZXRsaW5rLmgiIDIKCnN0YXRpYyBfX2lubGluZV9fIGludCBydGF0dHJfc3RyY21wKHN0 cnVjdCBydGF0dHIgKnJ0YSwgY2hhciAqc3RyKQp7CiAgICAgICAgaW50IGxlbiA9IHN0cmxlbihz dHIpICsgMTsKICAgICAgICByZXR1cm4gbGVuID4gcnRhLT5ydGFfbGVuIHx8IF9fYnVpbHRpbl9t ZW1jbXAoKCh2b2lkKikoKChjaGFyKikocnRhKSkgKyAoKCAoKHNpemVvZihzdHJ1Y3QgcnRhdHRy KSkrNCAtMSkgJiB+KDQgLTEpICkgKyAoMCkpKSksIHN0ciwgbGVuKTsKfQoKZXh0ZXJuIGludCBy dGF0dHJfcGFyc2Uoc3RydWN0IHJ0YXR0ciAqdGJbXSwgaW50IG1heGF0dHIsIHN0cnVjdCBydGF0 dHIgKnJ0YSwgaW50IGxlbik7CgoKZXh0ZXJuIHN0cnVjdCBzb2NrICpydG5sOwoKc3RydWN0IHJ0 bmV0bGlua19saW5rCnsKICAgICAgICBpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1 Y3Qgbmxtc2doZHIqLCB2b2lkICphdHRyKTsKICAgICAgICBpbnQgKCpkdW1waXQpKHN0cnVjdCBz a19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7Cn07CgpleHRlcm4gc3RydWN0 IHJ0bmV0bGlua19saW5rICogcnRuZXRsaW5rX2xpbmtzWzMyXTsKZXh0ZXJuIGludCBydG5ldGxp bmtfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJh Y2sgKmNiKTsKZXh0ZXJuIGludCBydG5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1 MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlY2hvKTsKZXh0ZXJuIGludCBydG5ldGxpbmtfcHV0X21l dHJpY3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgKm1ldHJpY3MpOwoKZXh0ZXJuIHZv aWQgX19ydGFfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRy bGVuLCBjb25zdCB2b2lkICpkYXRhKTsKCgoKCgpleHRlcm4gdm9pZCBydG1zZ19pZmluZm8oaW50 IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYW5nZSk7CgoKCgoKCgpl eHRlcm4gc3RydWN0IHNlbWFwaG9yZSBydG5sX3NlbTsKIyA1OTUgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCmV4dGVybiB2b2lkIHJ0bmxfbG9jayh2b2lkKTsKZXh0 ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CmV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZv aWQpOwojIDE1NCAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9kZWxheS5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZGVsYXkuaCIK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwoKIyAxICIvdXNyL3NyYy9saW51 eC9pbmNsdWRlL2FzbS9kZWxheS5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNt L2RlbGF5LmgiCmV4dGVybiB2b2lkIF9fYmFkX3VkZWxheSh2b2lkKTsKCmV4dGVybiB2b2lkIF9f dWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOwpleHRlcm4gdm9pZCBfX2NvbnN0X3VkZWxheSh1 bnNpZ25lZCBsb25nIHVzZWNzKTsKZXh0ZXJuIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxv b3BzKTsKIyAxMyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9kZWxheS5oIiAyCiMgMTU1 ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2V0aHRvb2wu aCIgMQojIDEzICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCIKc3RydWN0 IGV0aHRvb2xfY21kIHsKICAgICAgICB1MzIgY21kOwogICAgICAgIHUzMiBzdXBwb3J0ZWQ7CiAg ICAgICAgdTMyIGFkdmVydGlzaW5nOwogICAgICAgIHUxNiBzcGVlZDsKICAgICAgICB1OCBkdXBs ZXg7CiAgICAgICAgdTggcG9ydDsKICAgICAgICB1OCBwaHlfYWRkcmVzczsKICAgICAgICB1OCB0 cmFuc2NlaXZlcjsKICAgICAgICB1OCBhdXRvbmVnOwogICAgICAgIHUzMiBtYXh0eHBrdDsKICAg ICAgICB1MzIgbWF4cnhwa3Q7CiAgICAgICAgdTMyIHJlc2VydmVkWzRdOwp9OwoKCnN0cnVjdCBl dGh0b29sX2RydmluZm8gewogICAgICAgIHUzMiBjbWQ7CiAgICAgICAgY2hhciBkcml2ZXJbMzJd OwogICAgICAgIGNoYXIgdmVyc2lvblszMl07CiAgICAgICAgY2hhciBmd192ZXJzaW9uWzMyXTsK ICAgICAgICBjaGFyIGJ1c19pbmZvWzMyXTsKCiAgICAgICAgY2hhciByZXNlcnZlZDFbMzJdOwog ICAgICAgIGNoYXIgcmVzZXJ2ZWQyWzI4XTsKICAgICAgICB1MzIgcmVnZHVtcF9sZW47Cn07CgoK CnN0cnVjdCBldGh0b29sX3dvbGluZm8gewogICAgICAgIHUzMiBjbWQ7CiAgICAgICAgdTMyIHN1 cHBvcnRlZDsKICAgICAgICB1MzIgd29sb3B0czsKICAgICAgICB1OCBzb3Bhc3NbNl07Cn07CiMg MTU2ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21paS5o IiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWlpLmgiCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4L2lu Y2x1ZGUvbGludXgvbWlpLmgiIDIKIyAxMDUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv bWlpLmgiCnN0cnVjdCBtaWlfaW9jdGxfZGF0YSB7CiAgICAgICAgdTE2IHBoeV9pZDsKICAgICAg ICB1MTYgcmVnX251bTsKICAgICAgICB1MTYgdmFsX2luOwogICAgICAgIHUxNiB2YWxfb3V0Owp9 OwojIDEyNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9taWkuaCIKc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQgbWlpX253YXlfcmVzdWx0ICh1bnNpZ25lZCBpbnQgbmVnb3RpYXRlZCkK ewogICAgICAgIHVuc2lnbmVkIGludCByZXQ7CgogICAgICAgIGlmIChuZWdvdGlhdGVkICYgMHgw MTAwKQogICAgICAgICAgICAgICAgcmV0ID0gMHgwMTAwOwogICAgICAgIGVsc2UgaWYgKG5lZ290 aWF0ZWQgJiAweDAyMDApCiAgICAgICAgICAgICAgICByZXQgPSAweDAyMDA7CiAgICAgICAgZWxz ZSBpZiAobmVnb3RpYXRlZCAmIDB4MDA4MCkKICAgICAgICAgICAgICAgIHJldCA9IDB4MDA4MDsK ICAgICAgICBlbHNlIGlmIChuZWdvdGlhdGVkICYgMHgwMDQwKQogICAgICAgICAgICAgICAgcmV0 ID0gMHgwMDQwOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldCA9IDB4MDAyMDsKCiAg ICAgICAgcmV0dXJuIHJldDsKfQojIDE1NCAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9t aWkuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWlpX2R1cGxleCAodW5zaWduZWQgaW50 IGR1cGxleF9sb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgbmVnb3RpYXRlZCkKewogICAgICAgIGlmIChkdXBsZXhfbG9jaykKICAgICAgICAg ICAgICAgIHJldHVybiAxOwogICAgICAgIGlmIChtaWlfbndheV9yZXN1bHQobmVnb3RpYXRlZCkg JiAoMHgwMDQwIHwgMHgwMTAwKSkKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJl dHVybiAwOwp9CiMgMTU3ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2xpbnV4L2NvbXBsZXRpb24uaCIgMQojIDE1OCAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9zcmMv bGludXgvaW5jbHVkZS9hc20vaW8uaCIgMQojIDE1OSAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9z cmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIiAxCgoKCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUv YXNtL3VhY2Nlc3MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQu aCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMQojIDEwICIvdXNyL3NyYy9s aW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC9pbmNsdWRl L2FzbS9wYWdlLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5o IiAyCiMgMzUgIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGlu dCBfX3ZlcmlmeV93cml0ZShjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDYyICIvdXNy L3NyYy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnN0YXRpYyBpbmxpbmUgaW50IHZlcmlm eV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQp7 CiAgICAgICAgcmV0dXJuICgoeyB1bnNpZ25lZCBsb25nIGZsYWcsc3VtOyBhc20oImFkZGwgJTMs JTEgOyBzYmJsICUwLCUwOyBjbXBsICUxLCU0OyBzYmJsICQwLCUwIiA6Ij0mciIgKGZsYWcpLCAi PXIiIChzdW0pIDoiMSIgKGFkZHIpLCJnIiAoKGludCkoc2l6ZSkpLCJnIiAoZ2V0X2N1cnJlbnQo KS0+YWRkcl9saW1pdC5zZWcpKTsgZmxhZzsgfSkgPT0gMCkgPyAwIDogLTE0Owp9CiMgODEgIi91 c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKc3RydWN0IGV4Y2VwdGlvbl90YWJs ZV9lbnRyeQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKfTsKCgpleHRlcm4g dW5zaWduZWQgbG9uZyBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlKHVuc2lnbmVkIGxvbmcpOwojIDEw NSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpleHRlcm4gdm9pZCBfX2dl dF91c2VyXzEodm9pZCk7CmV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKZXh0ZXJuIHZv aWQgX19nZXRfdXNlcl80KHZvaWQpOwojIDEyNyAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20v dWFjY2Vzcy5oIgpleHRlcm4gdm9pZCBfX3B1dF91c2VyXzEodm9pZCk7CmV4dGVybiB2b2lkIF9f cHV0X3VzZXJfMih2b2lkKTsKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl80KHZvaWQpOwpleHRlcm4g dm9pZCBfX3B1dF91c2VyXzgodm9pZCk7CgpleHRlcm4gdm9pZCBfX3B1dF91c2VyX2JhZCh2b2lk KTsKIyAxODggIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKc3RydWN0IF9f bGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKIyAyMjAgIi91c3Ivc3Jj L2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQo dm9pZCk7CiMgMzA4ICIvdXNyL3NyYy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnN0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2dlbmVyaWNfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2 b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8g eyBpbnQgX19kMCwgX19kMTsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4i ICIJbW92bCAlMywlMFxuIiAiMToJcmVwOyBtb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1 cCxcImF4XCJcbiIgIjM6CWxlYSAwKCUzLCUwLDQpLCUwXG4iICI0OglwdXNobCAlMFxuIiAiCXB1 c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2JcbiIgIglwb3Bs ICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlv biBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5s b25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj0mYyIobiksICI9JkQiIChfX2QwKSwgIj0mUyIg KF9fZDEpIDogInIiKG4gJiAzKSwgIjAiKG4gLyA0KSwgIjEiKHRvKSwgIjIiKGZyb20pIDogIm1l bW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nCl9fZ2VuZXJpY19jb3B5X3RvX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29u c3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8geyBpbnQgX19kMCwg X19kMTsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIJbW92bCAlMywl MFxuIiAiMToJcmVwOyBtb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIg IjM6CWxlYSAwKCUzLCUwLDQpLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0 aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJ LmxvbmcgMWIsMmJcbiIgIi5wcmV2aW91cyIgOiAiPSZjIihuKSwgIj0mRCIgKF9fZDApLCAiPSZT IiAoX19kMSkgOiAiciIobiAmIDMpLCAiMCIobiAvIDQpLCAiMSIodG8pLCAiMiIoZnJvbSkgOiAi bWVtb3J5Iik7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CiMgNTQzICIvdXNyL3Ny Yy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnVuc2lnbmVkIGxvbmcgX19nZW5lcmljX2Nv cHlfdG9fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CnVuc2lnbmVk IGxvbmcgX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCB1bnNp Z25lZCBsb25nKTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2NvbnN0YW50X2NvcHlf dG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAg ICAgICAgcHJlZmV0Y2goZnJvbSk7CiAgICAgICAgaWYgKCgoeyB1bnNpZ25lZCBsb25nIGZsYWcs c3VtOyBhc20oImFkZGwgJTMsJTEgOyBzYmJsICUwLCUwOyBjbXBsICUxLCU0OyBzYmJsICQwLCUw IiA6Ij0mciIgKGZsYWcpLCAiPXIiIChzdW0pIDoiMSIgKHRvKSwiZyIgKChpbnQpKG4pKSwiZyIg KGdldF9jdXJyZW50KCktPmFkZHJfbGltaXQuc2VnKSk7IGZsYWc7IH0pID09IDApKQogICAgICAg ICAgICAgICAgZG8geyBpbnQgX19kMCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBf X2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAu Zml4dXAsXCJheFwiXG4iICIyOglzaGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xu IiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIs MmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6 ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6 IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6 XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWluY2wg JTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFc IlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnBy ZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20p LCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21fXyBf X3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5zZWN0 aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXNobCAkMiwlMFxuIiAiNDoJYWRkbCAkMiwlMFxuIiAi CWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJ LmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMi IDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0 byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9sYXRp bGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpcbiIg Ii5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjQ6CXNobCAkMiwlMFxuIiAiNToJYWRkbCAkMiwl MFxuIiAiNjoJaW5jbCAlMFxuIiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBf X2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25n IDFiLDViXG4iICIJLmxvbmcgMmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAo X19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVt b3J5Iik7IGJyZWFrOyB9IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CgpzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGxvbmcKX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywg Y29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgaWYgKCgoeyB1bnNp Z25lZCBsb25nIGZsYWcsc3VtOyBhc20oImFkZGwgJTMsJTEgOyBzYmJsICUwLCUwOyBjbXBsICUx LCU0OyBzYmJsICQwLCUwIiA6Ij0mciIgKGZsYWcpLCAiPXIiIChzdW0pIDoiMSIgKGZyb20pLCJn IiAoKGludCkobikpLCJnIiAoZ2V0X2N1cnJlbnQoKS0+YWRkcl9saW1pdC5zZWcpKTsgZmxhZzsg fSkgPT0gMCkpCiAgICAgICAgICAgICAgICBkbyB7IGludCBfX2QwLCBfX2QxOyBzd2l0Y2ggKG4g JiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAi MTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjI6CXB1c2hsICUwXG4iICIJcHVzaGwg JSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zbFxuIiAiCXBvcGwgJSVl YXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJldmlvdXNc biIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBi LDJiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkg OiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAx OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4iICIy OlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIgIglwdXNobCAl JWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc2JcbiIg Iglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWluY2wgJTBcbiIg IglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0 b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWluY2wgJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91 c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcg MGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChf X2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1v cnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNs XG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXB1 c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBz dG9zbFxuIiAiCXN0b3N3XG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIs JTBcbiIgIglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVheFxuIiAiCXhv cmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zd1xuIiAiCXBvcGwgJSVlYXhcbiIgIglhZGRsICQyLCUw XG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJc biIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2 aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwg IjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDM6IF9fYXNtX18gX192 b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6CW1vdnNiXG4iICIz OlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiNDoJcHVzaGwgJTBcbiIgIglwdXNobCAl JWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc3dcbiIg IglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJ YWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNToJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4 LCUlZWF4XG4iICIJc3Rvc3dcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglhZGRsICQz LCUwXG4iICIJam1wIDJiXG4iICI2OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhc biIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglpbmNsICUwXG4iICIJam1wIDNiXG4iICIu cHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAi CS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9uZyAyYiw2YlxuIiAiLnByZXZp b3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAi MiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0gfSB3aGlsZSAoMCk7CiAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVp bHRpbl9jb25zdGFudF9wKChuKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKHRv KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChuKSkpIDogX19jb25zdGFu dF9jX21lbXNldCgoKHRvKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChu KSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgobikpID8gX19tZW1zZXRfZ2VuZXJpYygoKCh0 bykpKSwoKCgwKSkpLCgoKG4pKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKHRvKSksKCgwKSksKChu KSkpKSk7CiAgICAgICAgcmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpf X2NvbnN0YW50X2NvcHlfdG9fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9t LCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBkbyB7IGludCBfX2QwLCBfX2QxOyBzd2l0Y2gg KG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxu IiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjI6CXNobCAkMiwlMFxuIiAiCWpt cCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFs aWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChf X2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1v cnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNs XG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXNo bCAkMiwlMFxuIiAiNDoJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2Vj dGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAi CS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZE IiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVh azsgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1v dnN3XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQyLCUwXG4i ICI0OglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9f ZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcg MWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2Qx KSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNl IDM6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIg IjI6CW1vdnNiXG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiNDoJc2hsICQy LCUwXG4iICI1OglhZGRsICQyLCUwXG4iICI2OglpbmNsICUwXG4iICIJam1wIDNiXG4iICIucHJl dmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5s b25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9uZyAyYiw2YlxuIiAiLnByZXZpb3Vz IiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIo dG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAg cmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2NvbnN0YW50X2NvcHlf ZnJvbV91c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxv bmcgbikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVm YXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNl Y3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMjoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAi CXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJcG9wbCAlJWVheFxuIiAiCXBv cGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rp b24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsMmJcbiIgIi5w cmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9t KSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6IF9fYXNtX18g X192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6XG4iICIuc2Vj dGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJ eG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVl YXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxu IiAiNDoJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglw b3BsICUlZWF4XG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2Vj dGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAi CS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZE IiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVh azsgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1v dnN3XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIg IglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJ c3Rvc3dcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFk ZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwl JWVheFxuIiAiCXN0b3N3XG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDIsJTBcbiIgIglqbXAg MmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGln biA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9 YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAi MCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18o ICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2Vj dGlvbiAuZml4dXAsXCJheFwiXG4iICI0OglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJ eG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXN0b3NiXG4i ICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglhZGRsICQzLCUw XG4iICIJam1wIDJiXG4iICI1OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIg IglzdG9zd1xuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDMsJTBcbiIgIglq bXAgMmJcbiIgIjY6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3Ni XG4iICIJcG9wbCAlJWVheFxuIiAiCWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xu IiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIs NGJcbiIgIgkubG9uZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1j IihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIw IihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4g bjsKfQojIDU5OSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpsb25nIHN0 cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsK bG9uZyBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25n IGNvdW50KTsKCmxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnN0ciwgbG9uZyBuKTsKdW5z aWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwp1bnNp Z25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIyAx NjAgIjgxMzl0b28uYyIgMgojIDE5OCAiODEzOXRvby5jIgpzdGF0aWMgaW50IG1lZGlhWzhdID0g ey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CnN0YXRpYyBpbnQgZnVsbF9kdXBsZXhb OF0gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKCgpzdGF0aWMgaW50IG1heF9p bnRlcnJ1cHRfd29yayA9IDIwOwoKCgpzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQg PSAzMjsKIyAyNDEgIjgxMzl0b28uYyIKZW51bSB7CiAgICAgICAgSEFTX01JSV9YQ1ZSID0gMHgw MTAwMDAsCiAgICAgICAgSEFTX0NISVBfWENWUiA9IDB4MDIwMDAwLAogICAgICAgIEhBU19MTktf Q0hORyA9IDB4MDQwMDAwLAp9OwoKCgoKCgoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBSVEw4MTM5 ID0gMCwKICAgICAgICBSVEw4MTM5X0NCLAogICAgICAgIFNNQzEyMTFUWCwKCiAgICAgICAgREVM VEE4MTM5LAogICAgICAgIEFERFRST044MTM5LAogICAgICAgIERGRTUzOFRYLAogICAgICAgIERG RTY5MFRYRCwKICAgICAgICBSVEw4MTI5LAp9IGJvYXJkX3Q7CgoKCnN0YXRpYyBzdHJ1Y3Qgewog ICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgdTMyIGh3X2ZsYWdzOwp9IGJvYXJkX2lu Zm9bXSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS5pbml0IikpKSA9IHsKICAg ICAgICB7ICJSZWFsVGVrIFJUTDgxMzkgRmFzdCBFdGhlcm5ldCIsIEhBU19DSElQX1hDVlJ8SEFT X0xOS19DSE5HIH0sCiAgICAgICAgeyAiUmVhbFRlayBSVEw4MTM5QiBQQ0kvQ2FyZEJ1cyIsIEhB U19DSElQX1hDVlJ8SEFTX0xOS19DSE5HIH0sCiAgICAgICAgeyAiU01DMTIxMVRYIEVaQ2FyZCAx MC8xMDAgKFJlYWxUZWsgUlRMODEzOSkiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORyB9LAoK ICAgICAgICB7ICJEZWx0YSBFbGVjdHJvbmljcyA4MTM5IDEwLzEwMEJhc2VUWCIsIEhBU19DSElQ X1hDVlJ8SEFTX0xOS19DSE5HIH0sCiAgICAgICAgeyAiQWRkdHJvbiBUZWNobm9sZ3kgODEzOSAx MC8xMDBCYXNlVFgiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORyB9LAogICAgICAgIHsgIkQt TGluayBERkUtNTM4VFggKFJlYWxUZWsgUlRMODEzOSkiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktf Q0hORyB9LAogICAgICAgIHsgIkQtTGluayBERkUtNjkwVFhEIChSZWFsVGVrIFJUTDgxMzkpIiwg SEFTX0NISVBfWENWUnxIQVNfTE5LX0NITkcgfSwKICAgICAgICB7ICJSZWFsVGVrIFJUTDgxMjki LCBIQVNfTUlJX1hDVlIgfSwKfTsKCgpzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODEz OV9wY2lfdGJsW10gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEuaW5pdCIpKSkg PSB7CiAgICAgICAgezB4MTBlYywgMHg4MTM5LCAofjApLCAofjApLCAwLCAwLCBSVEw4MTM5IH0s CiAgICAgICAgezB4MTBlYywgMHg4MTM4LCAofjApLCAofjApLCAwLCAwLCBSVEw4MTM5X0NCIH0s CiAgICAgICAgezB4MTExMywgMHgxMjExLCAofjApLCAofjApLCAwLCAwLCBTTUMxMjExVFggfSwK CiAgICAgICAgezB4MTUwMCwgMHgxMzYwLCAofjApLCAofjApLCAwLCAwLCBERUxUQTgxMzkgfSwK ICAgICAgICB7MHg0MDMzLCAweDEzNjAsICh+MCksICh+MCksIDAsIDAsIEFERFRST044MTM5IH0s CiAgICAgICAgezB4MTE4NiwgMHgxMzAwLCAofjApLCAofjApLCAwLCAwLCBERkU1MzhUWCB9LAog ICAgICAgIHsweDExODYsIDB4MTM0MCwgKH4wKSwgKH4wKSwgMCwgMCwgREZFNjkwVFhEIH0sCiMg MzAxICI4MTM5dG9vLmMiCiAgICAgICAgeyh+MCksIDB4ODEzOSwgMHgxMGVjLCAweDgxMzksIDAs IDAsIFJUTDgxMzkgfSwKICAgICAgICB7KH4wKSwgMHg4MTM5LCAweDExODYsIDB4MTMwMCwgMCwg MCwgREZFNTM4VFggfSwKCiAgICAgICAgezAsfQp9OwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCgoKZW51bSBSVEw4MTM5X3JlZ2lzdGVycyB7CiAgICAgICAg TUFDMCA9IDAsCiAgICAgICAgTUFSMCA9IDgsCiAgICAgICAgVHhTdGF0dXMwID0gMHgxMCwKICAg ICAgICBUeEFkZHIwID0gMHgyMCwKICAgICAgICBSeEJ1ZiA9IDB4MzAsCiAgICAgICAgUnhFYXJs eUNudCA9IDB4MzQsCiAgICAgICAgUnhFYXJseVN0YXR1cyA9IDB4MzYsCiAgICAgICAgQ2hpcENt ZCA9IDB4MzcsCiAgICAgICAgUnhCdWZQdHIgPSAweDM4LAogICAgICAgIFJ4QnVmQWRkciA9IDB4 M0EsCiAgICAgICAgSW50ck1hc2sgPSAweDNDLAogICAgICAgIEludHJTdGF0dXMgPSAweDNFLAog ICAgICAgIFR4Q29uZmlnID0gMHg0MCwKICAgICAgICBDaGlwVmVyc2lvbiA9IDB4NDMsCiAgICAg ICAgUnhDb25maWcgPSAweDQ0LAogICAgICAgIFRpbWVyID0gMHg0OCwKICAgICAgICBSeE1pc3Nl ZCA9IDB4NEMsCiAgICAgICAgQ2ZnOTM0NiA9IDB4NTAsCiAgICAgICAgQ29uZmlnMCA9IDB4NTEs CiAgICAgICAgQ29uZmlnMSA9IDB4NTIsCiAgICAgICAgRmxhc2hSZWcgPSAweDU0LAogICAgICAg IE1lZGlhU3RhdHVzID0gMHg1OCwKICAgICAgICBDb25maWczID0gMHg1OSwKICAgICAgICBDb25m aWc0ID0gMHg1QSwKICAgICAgICBIbHRDbGsgPSAweDVCLAogICAgICAgIE11bHRpSW50ciA9IDB4 NUMsCiAgICAgICAgVHhTdW1tYXJ5ID0gMHg2MCwKICAgICAgICBCYXNpY01vZGVDdHJsID0gMHg2 MiwKICAgICAgICBCYXNpY01vZGVTdGF0dXMgPSAweDY0LAogICAgICAgIE5XYXlBZHZlcnQgPSAw eDY2LAogICAgICAgIE5XYXlMUEFSID0gMHg2OCwKICAgICAgICBOV2F5RXhwYW5zaW9uID0gMHg2 QSwKCiAgICAgICAgRklGT1RNUyA9IDB4NzAsCiAgICAgICAgQ1NDUiA9IDB4NzQsCiAgICAgICAg UEFSQTc4ID0gMHg3OCwKICAgICAgICBQQVJBN2MgPSAweDdjLAogICAgICAgIENvbmZpZzUgPSAw eEQ4LAp9OwoKZW51bSBDbGVhckJpdE1hc2tzIHsKICAgICAgICBNdWx0aUludHJDbGVhciA9IDB4 RjAwMCwKICAgICAgICBDaGlwQ21kQ2xlYXIgPSAweEUyLAogICAgICAgIENvbmZpZzFDbGVhciA9 ICgxPDw3KXwoMTw8Nil8KDE8PDMpfCgxPDwyKXwoMTw8MSksCn07CgplbnVtIENoaXBDbWRCaXRz IHsKICAgICAgICBDbWRSZXNldCA9IDB4MTAsCiAgICAgICAgQ21kUnhFbmIgPSAweDA4LAogICAg ICAgIENtZFR4RW5iID0gMHgwNCwKICAgICAgICBSeEJ1ZkVtcHR5ID0gMHgwMSwKfTsKCgplbnVt IEludHJTdGF0dXNCaXRzIHsKICAgICAgICBQQ0lFcnIgPSAweDgwMDAsCiAgICAgICAgUENTVGlt ZW91dCA9IDB4NDAwMCwKICAgICAgICBSeEZJRk9PdmVyID0gMHg0MCwKICAgICAgICBSeFVuZGVy cnVuID0gMHgyMCwKICAgICAgICBSeE92ZXJmbG93ID0gMHgxMCwKICAgICAgICBUeEVyciA9IDB4 MDgsCiAgICAgICAgVHhPSyA9IDB4MDQsCiAgICAgICAgUnhFcnIgPSAweDAyLAogICAgICAgIFJ4 T0sgPSAweDAxLAoKICAgICAgICBSeEFja0JpdHMgPSBSeEZJRk9PdmVyIHwgUnhPdmVyZmxvdyB8 IFJ4T0ssCn07CgplbnVtIFR4U3RhdHVzQml0cyB7CiAgICAgICAgVHhIb3N0T3ducyA9IDB4MjAw MCwKICAgICAgICBUeFVuZGVycnVuID0gMHg0MDAwLAogICAgICAgIFR4U3RhdE9LID0gMHg4MDAw LAogICAgICAgIFR4T3V0T2ZXaW5kb3cgPSAweDIwMDAwMDAwLAogICAgICAgIFR4QWJvcnRlZCA9 IDB4NDAwMDAwMDAsCiAgICAgICAgVHhDYXJyaWVyTG9zdCA9IDB4ODAwMDAwMDAsCn07CmVudW0g UnhTdGF0dXNCaXRzIHsKICAgICAgICBSeE11bHRpY2FzdCA9IDB4ODAwMCwKICAgICAgICBSeFBo eXNpY2FsID0gMHg0MDAwLAogICAgICAgIFJ4QnJvYWRjYXN0ID0gMHgyMDAwLAogICAgICAgIFJ4 QmFkU3ltYm9sID0gMHgwMDIwLAogICAgICAgIFJ4UnVudCA9IDB4MDAxMCwKICAgICAgICBSeFRv b0xvbmcgPSAweDAwMDgsCiAgICAgICAgUnhDUkNFcnIgPSAweDAwMDQsCiAgICAgICAgUnhCYWRB bGlnbiA9IDB4MDAwMiwKICAgICAgICBSeFN0YXR1c09LID0gMHgwMDAxLAp9OwoKCmVudW0gcnhf bW9kZV9iaXRzIHsKICAgICAgICBBY2NlcHRFcnIgPSAweDIwLAogICAgICAgIEFjY2VwdFJ1bnQg PSAweDEwLAogICAgICAgIEFjY2VwdEJyb2FkY2FzdCA9IDB4MDgsCiAgICAgICAgQWNjZXB0TXVs dGljYXN0ID0gMHgwNCwKICAgICAgICBBY2NlcHRNeVBoeXMgPSAweDAyLAogICAgICAgIEFjY2Vw dEFsbFBoeXMgPSAweDAxLAp9OwoKCmVudW0gdHhfY29uZmlnX2JpdHMgewogICAgICAgIFR4SUZH MSA9ICgxIDw8IDI1KSwKICAgICAgICBUeElGRzAgPSAoMSA8PCAyNCksCiAgICAgICAgVHhMb29w QmFjayA9ICgxIDw8IDE4KSB8ICgxIDw8IDE3KSwKICAgICAgICBUeENSQyA9ICgxIDw8IDE2KSwK ICAgICAgICBUeENsZWFyQWJ0ID0gKDEgPDwgMCksCiAgICAgICAgVHhETUFTaGlmdCA9IDgsCgog ICAgICAgIFR4VmVyc2lvbk1hc2sgPSAweDdDODAwMDAwLAp9OwoKCmVudW0gQ29uZmlnMUJpdHMg ewogICAgICAgIENmZzFfUE1fRW5hYmxlID0gMHgwMSwKICAgICAgICBDZmcxX1ZQRF9FbmFibGUg PSAweDAyLAogICAgICAgIENmZzFfUElPID0gMHgwNCwKICAgICAgICBDZmcxX01NSU8gPSAweDA4 LAogICAgICAgIExXQUtFID0gMHgxMCwKICAgICAgICBDZmcxX0RyaXZlcl9Mb2FkID0gMHgyMCwK ICAgICAgICBDZmcxX0xFRDAgPSAweDQwLAogICAgICAgIENmZzFfTEVEMSA9IDB4ODAsCiAgICAg ICAgU0xFRVAgPSAoMSA8PCAxKSwKICAgICAgICBQV1JETiA9ICgxIDw8IDApLAp9OwoKCmVudW0g Q29uZmlnM0JpdHMgewogICAgICAgIENmZzNfRkJ0QkVuID0gKDEgPDwgMCksCiAgICAgICAgQ2Zn M19GdW5jUmVnRW4gPSAoMSA8PCAxKSwKICAgICAgICBDZmczX0NMS1JVTl9FbiA9ICgxIDw8IDIp LAogICAgICAgIENmZzNfQ2FyZEJfRW4gPSAoMSA8PCAzKSwKICAgICAgICBDZmczX0xpbmtVcCA9 ICgxIDw8IDQpLAogICAgICAgIENmZzNfTWFnaWMgPSAoMSA8PCA1KSwKICAgICAgICBDZmczX1BB Uk1fRW4gPSAoMSA8PCA2KSwKICAgICAgICBDZmczX0dOVFNlbCA9ICgxIDw8IDcpLAp9OwoKCmVu dW0gQ29uZmlnNEJpdHMgewogICAgICAgIExXUFROID0gKDEgPDwgMiksCn07CgoKZW51bSBDb25m aWc1Qml0cyB7CiAgICAgICAgQ2ZnNV9QTUVfU1RTID0gKDEgPDwgMCksCiAgICAgICAgQ2ZnNV9M QU5XYWtlID0gKDEgPDwgMSksCiAgICAgICAgQ2ZnNV9MRFBTID0gKDEgPDwgMiksCiAgICAgICAg Q2ZnNV9GSUZPQWRkclB0ciA9ICgxIDw8IDMpLAogICAgICAgIENmZzVfVVdGID0gKDEgPDwgNCks CiAgICAgICAgQ2ZnNV9NV0YgPSAoMSA8PCA1KSwKICAgICAgICBDZmc1X0JXRiA9ICgxIDw8IDYp LAp9OwoKZW51bSBSeENvbmZpZ0JpdHMgewoKICAgICAgICBSeENmZ0Vhcmx5UnhOb25lID0gMCwK ICAgICAgICBSeENmZ0Vhcmx5UnhTaGlmdCA9IDI0LAoKCiAgICAgICAgUnhDZmdGSUZPU2hpZnQg PSAxMywKICAgICAgICBSeENmZ0ZJRk9Ob25lID0gKDcgPDwgUnhDZmdGSUZPU2hpZnQpLAoKCiAg ICAgICAgUnhDZmdETUFTaGlmdCA9IDgsCiAgICAgICAgUnhDZmdETUFVbmxpbWl0ZWQgPSAoNyA8 PCBSeENmZ0RNQVNoaWZ0KSwKCgogICAgICAgIFJ4Q2ZnUmN2OEsgPSAwLAogICAgICAgIFJ4Q2Zn UmN2MTZLID0gKDEgPDwgMTEpLAogICAgICAgIFJ4Q2ZnUmN2MzJLID0gKDEgPDwgMTIpLAogICAg ICAgIFJ4Q2ZnUmN2NjRLID0gKDEgPDwgMTEpIHwgKDEgPDwgMTIpLAoKCiAgICAgICAgUnhOb1dy YXAgPSAoMSA8PCA3KSwKfTsKCgoKCmVudW0gQ1NDUkJpdHMgewogICAgICAgIENTQ1JfTGlua09L Qml0ID0gMHgwNDAwLAogICAgICAgIENTQ1JfTGlua0NoYW5nZUJpdCA9IDB4MDgwMCwKICAgICAg ICBDU0NSX0xpbmtTdGF0dXNCaXRzID0gMHgwZjAwMCwKICAgICAgICBDU0NSX0xpbmtEb3duT2Zm Q21kID0gMHgwMDNjMCwKICAgICAgICBDU0NSX0xpbmtEb3duQ21kID0gMHgwZjNjMCwKfTsKCgpl bnVtIENmZzkzNDZCaXRzIHsKICAgICAgICBDZmc5MzQ2X0xvY2sgPSAweDAwLAogICAgICAgIENm ZzkzNDZfVW5sb2NrID0gMHhDMCwKfTsKCgoKCgpzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBw YXJhbVs0XVs0XSA9IHsKICAgICAgICB7MHhjYjM5ZGU0MywgMHhjYjM5Y2U0MywgMHhmYjM4ZGUw MywgMHhjYjM4ZGU0M30sCiAgICAgICAgezB4Y2IzOWRlNDMsIDB4Y2IzOWNlNDMsIDB4Y2IzOWNl ODMsIDB4Y2IzOWNlODN9LAogICAgICAgIHsweGNiMzlkZTQzLCAweGNiMzljZTQzLCAweGNiMzlj ZTgzLCAweGNiMzljZTgzfSwKICAgICAgICB7MHhiYjM5ZGU0MywgMHhiYjM5Y2U0MywgMHhiYjM5 Y2U4MywgMHhiYjM5Y2U4M30KfTsKCnN0cnVjdCByaW5nX2luZm8gewogICAgICAgIHN0cnVjdCBz a19idWZmICpza2I7CiAgICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nOwp9OwoKCnR5cGVkZWYgZW51 bSB7CiAgICAgICAgQ0hfODEzOSA9IDAsCiAgICAgICAgQ0hfODEzOV9LLAogICAgICAgIENIXzgx MzlBLAogICAgICAgIENIXzgxMzlCLAogICAgICAgIENIXzgxMzAsCiAgICAgICAgQ0hfODEzOUMs Cn0gY2hpcF90OwoKZW51bSBjaGlwX2ZsYWdzIHsKICAgICAgICBIYXNIbHRDbGsgPSAoMSA8PCAw KSwKICAgICAgICBIYXNMV2FrZSA9ICgxIDw8IDEpLAp9OwoKCgpjb25zdCBzdGF0aWMgc3RydWN0 IHsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIHU4IHZlcnNpb247CiAgICAgICAg dTMyIFJ4Q29uZmlnTWFzazsKICAgICAgICB1MzIgZmxhZ3M7Cn0gcnRsX2NoaXBfaW5mb1tdID0g ewogICAgICAgIHsgIlJUTC04MTM5IiwKICAgICAgICAgIDB4NDAsCiAgICAgICAgICAweGYwZmUw MDQwLAogICAgICAgICAgSGFzSGx0Q2xrLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5 IHJldiBLIiwKICAgICAgICAgIDB4NjAsCiAgICAgICAgICAweGYwZmUwMDQwLAogICAgICAgICAg SGFzSGx0Q2xrLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5QSIsCiAgICAgICAgICAw eDcwLAogICAgICAgICAgMHhmMGZlMDA0MCwKICAgICAgICAgIEhhc0hsdENsaywKICAgICAgICB9 LAoKICAgICAgICB7ICJSVEwtODEzOUIiLAogICAgICAgICAgMHg3OCwKICAgICAgICAgIDB4ZjBm YzAwNDAsCiAgICAgICAgICBIYXNMV2FrZSwKICAgICAgICB9LAoKICAgICAgICB7ICJSVEwtODEz MCIsCiAgICAgICAgICAweDdDLAogICAgICAgICAgMHhmMGZlMDA0MCwKICAgICAgICAgIEhhc0xX YWtlLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5QyIsCiAgICAgICAgICAweDc0LAog ICAgICAgICAgMHhmMGZjMDA0MCwKICAgICAgICAgIEhhc0xXYWtlLAogICAgICAgIH0sCgp9OwoK c3RydWN0IHJ0bF9leHRyYV9zdGF0cyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXJseV9yeDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHR4X2J1Zl9tYXBwZWQ7CiAgICAgICAgdW5zaWduZWQgbG9u ZyB0eF90aW1lb3V0czsKfTsKCnN0cnVjdCBydGw4MTM5X3ByaXZhdGUgewogICAgICAgIHZvaWQg Km1taW9fYWRkcjsKICAgICAgICBpbnQgZHJ2X2ZsYWdzOwogICAgICAgIHN0cnVjdCBwY2lfZGV2 ICpwY2lfZGV2OwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgICAg IHVuc2lnbmVkIGNoYXIgKnJ4X3Jpbmc7CiAgICAgICAgdW5zaWduZWQgaW50IGN1cl9yeDsKICAg ICAgICB1bnNpZ25lZCBpbnQgdHhfZmxhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGN1cl90eDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGRpcnR5X3R4OwoKICAgICAgICBzdHJ1Y3QgcmluZ19pbmZv IHR4X2luZm9bNF07CiAgICAgICAgdW5zaWduZWQgY2hhciAqdHhfYnVmWzRdOwogICAgICAgIHVu c2lnbmVkIGNoYXIgKnR4X2J1ZnM7CiAgICAgICAgZG1hX2FkZHJfdCByeF9yaW5nX2RtYTsKICAg ICAgICBkbWFfYWRkcl90IHR4X2J1ZnNfZG1hOwogICAgICAgIHNpZ25lZCBjaGFyIHBoeXNbNF07 CiAgICAgICAgY2hhciB0d2lzdGllLCB0d2lzdF9yb3csIHR3aXN0X2NvbDsKICAgICAgICB1bnNp Z25lZCBpbnQgZnVsbF9kdXBsZXg6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgZHVwbGV4X2xvY2s6 MTsKICAgICAgICB1bnNpZ25lZCBpbnQgZGVmYXVsdF9wb3J0OjQ7CiAgICAgICAgdW5zaWduZWQg aW50IG1lZGlhMjo0OwogICAgICAgIHVuc2lnbmVkIGludCBtZWRpYWxvY2s6MTsKICAgICAgICB1 bnNpZ25lZCBpbnQgbWVkaWFzZW5zZToxOwogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAg ICBjaGlwX3QgY2hpcHNldDsKICAgICAgICBwaWRfdCB0aHJfcGlkOwogICAgICAgIHdhaXRfcXVl dWVfaGVhZF90IHRocl93YWl0OwogICAgICAgIHN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7 CiAgICAgICAgdTMyIHJ4X2NvbmZpZzsKICAgICAgICBzdHJ1Y3QgcnRsX2V4dHJhX3N0YXRzIHhz dGF0czsKfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKc3RhdGljIGludCByZWFkX2VlcHJvbSAodm9pZCAqaW9h ZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7CnN0YXRpYyBpbnQgcnRsODEzOV9vcGVu IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIGludCBtZGlvX3JlYWQgKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CnN0YXRpYyB2b2lkIG1k aW9fd3JpdGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlv biwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CnN0YXRpYyBpbnQgcnRsODEzOV90 aHJlYWQgKHZvaWQgKmRhdGEpOwpzdGF0aWMgdm9pZCBydGw4MTM5X3R4X3RpbWVvdXQgKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9pZCBydGw4MTM5X2luaXRfcmluZyAoc3RydWN0 IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyBpbnQgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9k ZXZpY2UgKmRldik7CnN0YXRpYyB2b2lkIHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lk ICpkZXZfaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRf cmVncyAqcmVncyk7CnN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CnN0YXRpYyBpbnQgbmV0ZGV2X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBz dHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRz ICpydGw4MTM5X2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyBpbmxp bmUgdTMyIGV0aGVyX2NyYyAoaW50IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CnN0YXRp YyB2b2lkIHJ0bDgxMzlfc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0 aWMgdm9pZCBfX3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIHZv aWQgcnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiMgNzEyICI4MTM5 dG9vLmMiCnN0YXRpYyBjb25zdCB1MTYgcnRsODEzOV9pbnRyX21hc2sgPQogICAgICAgIFBDSUVy ciB8IFBDU1RpbWVvdXQgfCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4RklGT092ZXIgfAog ICAgICAgIFR4RXJyIHwgVHhPSyB8IFJ4RXJyIHwgUnhPSzsKCnN0YXRpYyBjb25zdCB1bnNpZ25l ZCBpbnQgcnRsODEzOV9yeF9jb25maWcgPQogICAgICAgICAgKDE0IDw8IFJ4Q2ZnRWFybHlSeFNo aWZ0KSB8IFJ4Q2ZnUmN2MzJLIHwgUnhOb1dyYXAgfAogICAgICAgICAgKDcgPDwgUnhDZmdGSUZP U2hpZnQpIHwKICAgICAgICAgICg3IDw8IFJ4Q2ZnRE1BU2hpZnQpOwoKCnN0YXRpYyB2b2lkIF9f cnRsODEzOV9jbGVhbnVwX2RldiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0 cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwOwogICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2OwoK ICAgICAgICBpZighKGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZh aWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZV TkNUSU9OX18sNzI3KTsgfTsKICAgICAgICBpZighKGRldi0+cHJpdiAhPSAoKHZvaWQgKikwKSkp IHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImRldi0+ cHJpdiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sNzI4KTsgfTsKCiAgICAgICAg dHAgPSBkZXYtPnByaXY7CiAgICAgICAgaWYoISh0cC0+cGNpX2RldiAhPSAoKHZvaWQgKikwKSkp IHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgInRwLT5w Y2lfZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXyw3MzEpOyB9OwogICAgICAg IHBkZXYgPSB0cC0+cGNpX2RldjsKCgogICAgICAgIGlmICh0cC0+bW1pb19hZGRyKQogICAgICAg ICAgICAgICAgaW91bm1hcCAodHAtPm1taW9fYWRkcik7CgoKCiAgICAgICAgcGNpX3JlbGVhc2Vf cmVnaW9ucyAocGRldik7CgoKCiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDB4QkMpID8g KF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVv ZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVt c2V0KCgoZGV2KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDB4QkMpKSksKChzaXpl b2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkp KSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoZGV2KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVk IGNoYXIpKDB4QkMpKSksKChzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3Ry dWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yg KHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSA/ IF9fbWVtc2V0X2dlbmVyaWMoKCgoZGV2KSkpLCgoKDB4QkMpKSksKCgoc2l6ZW9mIChzdHJ1Y3Qg bmV0X2RldmljZSkgKyBzaXplb2YgKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUpKSkpKSA6IF9fbWVt c2V0X2dlbmVyaWMoKChkZXYpKSwoKDB4QkMpKSwoKHNpemVvZiAoc3RydWN0IG5ldF9kZXZpY2Up ICsgc2l6ZW9mIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlKSkpKSkpOwoKCgoKICAgICAgICBrZnJl ZSAoZGV2KTsKCiAgICAgICAgcGNpX3NldF9kcnZkYXRhIChwZGV2LCAoKHZvaWQgKikwKSk7Cn0K CgpzdGF0aWMgdm9pZCBydGw4MTM5X2NoaXBfcmVzZXQgKHZvaWQgKmlvYWRkcikKewogICAgICAg IGludCBpOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKiko aW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFJlc2V0KSkpOwoKCiAgICAgICAgZm9yIChpID0g MTAwMDsgaSA+IDA7IGktLSkgewogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o IiI6IDogOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIGlmICgoKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpICYgQ21kUmVzZXQpID09 IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgKF9fYnVp bHRpbl9jb25zdGFudF9wKDEwKSA/ICgoMTApID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9f Y29uc3RfdWRlbGF5KCgxMCkgKiAweDEwYzZ1bCkpIDogX191ZGVsYXkoMTApKTsKICAgICAgICB9 Cn0KCgpzdGF0aWMgaW50IF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQi KSkpIHJ0bDgxMzlfaW5pdF9ib2FyZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfb3V0 KQp7CiAgICAgICAgdm9pZCAqaW9hZGRyOwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7 CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHA7CiAgICAgICAgdTggdG1wODsKICAg ICAgICBpbnQgcmM7CiAgICAgICAgdW5zaWduZWQgaW50IGk7CiAgICAgICAgdTMyIHBpb19zdGFy dCwgcGlvX2VuZCwgcGlvX2ZsYWdzLCBwaW9fbGVuOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbW1p b19zdGFydCwgbW1pb19lbmQsIG1taW9fZmxhZ3MsIG1taW9fbGVuOwogICAgICAgIHUzMiB0bXA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgIGlmKCEocGRldiAhPSAoKHZv aWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxu IiwgInBkZXYgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDc4Nyk7IH07CgogICAg ICAgICpkZXZfb3V0ID0gKCh2b2lkICopMCk7CgoKICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRl diAoc2l6ZW9mICgqdHApKTsKICAgICAgICBpZiAoZGV2ID09ICgodm9pZCAqKTApKSB7CiAgICAg ICAgICAgICAgICBwcmludGsgKCI8Mz4iICI4MTM5dG9vIiAiOiAiICIlczogVW5hYmxlIHRvIGFs bG9jIG5ldyBuZXQgZGV2aWNlXG4iLCBwZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHJl dHVybiAtMTI7CiAgICAgICAgfQogICAgICAgIGRvIHsgKGRldiktPm93bmVyID0gKCh2b2lkICop MCk7IH0gd2hpbGUgKDApOwogICAgICAgIHRwID0gZGV2LT5wcml2OwogICAgICAgIHRwLT5wY2lf ZGV2ID0gcGRldjsKCgogICAgICAgIHJjID0gcGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpOwogICAg ICAgIGlmIChyYykKICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKCiAgICAgICAgcGlvX3N0 YXJ0ID0gKChwZGV2KS0+cmVzb3VyY2VbKDApXS5zdGFydCk7CiAgICAgICAgcGlvX2VuZCA9ICgo cGRldiktPnJlc291cmNlWygwKV0uZW5kKTsKICAgICAgICBwaW9fZmxhZ3MgPSAoKHBkZXYpLT5y ZXNvdXJjZVsoMCldLmZsYWdzKTsKICAgICAgICBwaW9fbGVuID0gKCgoKChwZGV2KSktPnJlc291 cmNlWygoMCkpXS5zdGFydCkgPT0gMCAmJiAoKChwZGV2KSktPnJlc291cmNlWygoMCkpXS5lbmQp ID09ICgoKHBkZXYpKS0+cmVzb3VyY2VbKCgwKSldLnN0YXJ0KSkgPyAwIDogKCgoKHBkZXYpKS0+ cmVzb3VyY2VbKCgwKSldLmVuZCkgLSAoKChwZGV2KSktPnJlc291cmNlWygoMCkpXS5zdGFydCkg KyAxKSk7CgogICAgICAgIG1taW9fc3RhcnQgPSAoKHBkZXYpLT5yZXNvdXJjZVsoMSldLnN0YXJ0 KTsKICAgICAgICBtbWlvX2VuZCA9ICgocGRldiktPnJlc291cmNlWygxKV0uZW5kKTsKICAgICAg ICBtbWlvX2ZsYWdzID0gKChwZGV2KS0+cmVzb3VyY2VbKDEpXS5mbGFncyk7CiAgICAgICAgbW1p b19sZW4gPSAoKCgoKHBkZXYpKS0+cmVzb3VyY2VbKCgxKSldLnN0YXJ0KSA9PSAwICYmICgoKHBk ZXYpKS0+cmVzb3VyY2VbKCgxKSldLmVuZCkgPT0gKCgocGRldikpLT5yZXNvdXJjZVsoKDEpKV0u c3RhcnQpKSA/IDAgOiAoKCgocGRldikpLT5yZXNvdXJjZVsoKDEpKV0uZW5kKSAtICgoKHBkZXYp KS0+cmVzb3VyY2VbKCgxKSldLnN0YXJ0KSArIDEpKTsKCgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MzcgIjgxMzl0b28uYyIK ICAgICAgICBpZiAoIShtbWlvX2ZsYWdzICYgMHgwMDAwMDIwMCkpIHsKICAgICAgICAgICAgICAg IHByaW50ayAoIjwzPiIgIjgxMzl0b28iICI6ICIgIiVzOiByZWdpb24gIzEgbm90IGFuIE1NSU8g cmVzb3VyY2UsIGFib3J0aW5nXG4iLCBwZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAg cmMgPSAtMTk7CiAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7CiAgICAgICAgfQogICAgICAg IGlmIChtbWlvX2xlbiA8IDB4ODApIHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIjgx Mzl0b28iICI6ICIgIiVzOiBJbnZhbGlkIFBDSSBtZW0gcmVnaW9uIHNpemUocyksIGFib3J0aW5n XG4iLCBwZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAgcmMgPSAtMTk7CiAgICAgICAg ICAgICAgICBnb3RvIGVycl9vdXQ7CiAgICAgICAgfQoKCiAgICAgICAgcmMgPSBwY2lfcmVxdWVz dF9yZWdpb25zIChwZGV2LCAiODEzOXRvbyIpOwogICAgICAgIGlmIChyYykKICAgICAgICAgICAg ICAgIGdvdG8gZXJyX291dDsKCgogICAgICAgIHBjaV9zZXRfbWFzdGVyIChwZGV2KTsKCgoKCgoK CiAgICAgICAgaW9hZGRyID0gaW9yZW1hcCAobW1pb19zdGFydCwgbW1pb19sZW4pOwogICAgICAg IGlmIChpb2FkZHIgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwz PiIgIjgxMzl0b28iICI6ICIgIiVzOiBjYW5ub3QgcmVtYXAgTU1JTywgYWJvcnRpbmdcbiIsIHBk ZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICByYyA9IC01OwogICAgICAgICAgICAgICAg Z290byBlcnJfb3V0OwogICAgICAgIH0KICAgICAgICBkZXYtPmJhc2VfYWRkciA9IChsb25nKSBp b2FkZHI7CiAgICAgICAgdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKCgoKICAgICAgICAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoSGx0Q2xrKSkpID0gKCgn UicpKSk7CgoKICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSkpID09IDB4RkZGRkZGRkYp IHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIjgxMzl0b28iICI6ICIgIiVzOiBDaGlw IG5vdCByZXNwb25kaW5nLCBpZ25vcmluZyBib2FyZFxuIiwKICAgICAgICAgICAgICAgICAgICAg ICAgcGRldi0+c2xvdF9uYW1lKTsKICAgICAgICAgICAgICAgIHJjID0gLTU7CiAgICAgICAgICAg ICAgICBnb3RvIGVycl9vdXQ7CiAgICAgICAgfQoKCiAgICAgICAgdG1wID0gKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBWZXJzaW9uKSkpKTsKICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihydGxfY2hpcF9pbmZvKSAvIHNpemVvZigocnRs X2NoaXBfaW5mbylbMF0pKTsgaSsrKQogICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBydGxfY2hp cF9pbmZvW2ldLnZlcnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmNoaXBzZXQg PSBpOwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoOwogICAgICAgICAgICAgICAg fQoKCiAgICAgICAgcHJpbnRrICgiPDc+IiAiODEzOXRvbyIgIjogIiAiJXM6IHVua25vd24gY2hp cCB2ZXJzaW9uLCBhc3N1bWluZyBSVEwtODEzOVxuIiwKICAgICAgICAgICAgICAgIHBkZXYtPnNs b3RfbmFtZSk7CiAgICAgICAgcHJpbnRrICgiPDc+IiAiODEzOXRvbyIgIjogIiAiJXM6IFR4Q29u ZmlnID0gMHglbHhcbiIsIHBkZXYtPnNsb3RfbmFtZSwgKCh1bnNpZ25lZCBsb25nKSAoKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSkpKTsK ICAgICAgICB0cC0+Y2hpcHNldCA9IDA7CgptYXRjaDoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICAgICAgICBpZiAodHAtPmNoaXBzZXQgPj0g Q0hfODEzOUIpIHsKICAgICAgICAgICAgICAgIHU4IG5ld190bXA4ID0gdG1wOCA9ICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcxKSkpKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg aWYgKChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKSAmJgogICAg ICAgICAgICAgICAgICAgICh0bXA4ICYgTFdBS0UpKQogICAgICAgICAgICAgICAgICAgICAgICBu ZXdfdG1wOCAmPSB+TFdBS0U7CiAgICAgICAgICAgICAgICBuZXdfdG1wOCB8PSBDZmcxX1BNX0Vu YWJsZTsKICAgICAgICAgICAgICAgIGlmIChuZXdfdG1wOCAhPSB0bXA4KSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRk ciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2X1VubG9jaykpKTsKICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENv bmZpZzEpKSkgPSAoKHRtcDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5 MzQ2X0xvY2spKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAocnRsX2No aXBfaW5mb1t0cC0+Y2hpcHNldF0uZmxhZ3MgJiBIYXNMV2FrZSkgewogICAgICAgICAgICAgICAg ICAgICAgICB0bXA4ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9h ZGRyICsgKENvbmZpZzQpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wOCAmIExX UFROKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWc0KSkpID0gKCh0bXA4ICYgfkxXUFRO KSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgdG1wOCA9ICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcxKSkpKTsK ICAgICAgICAgICAgICAgIHRtcDggJj0gfihTTEVFUCB8IFBXUkROKTsKICAgICAgICAgICAgICAg ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcx KSkpID0gKCh0bXA4KSkpOwogICAgICAgIH0KCiAgICAgICAgcnRsODEzOV9jaGlwX3Jlc2V0IChp b2FkZHIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICpkZXZfb3V0ID0gZGV2OwogICAgICAgIHJldHVybiAwOwoKZXJyX291dDoKICAgICAgICBfX3J0 bDgxMzlfY2xlYW51cF9kZXYgKGRldik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgIHJldHVybiByYzsKfQoKCnN0YXRpYyBpbnQgX19hdHRyaWJ1 dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRleHQuaW5pdCIpKSkgcnRsODEzOV9pbml0X29uZSAoc3Ry dWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCnsKICAgICAgICBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2ID0gKCh2b2lkICopMCk7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAq dHA7CiAgICAgICAgaW50IGksIGFkZHJfbGVuLCBvcHRpb247CiAgICAgICAgdm9pZCAqaW9hZGRy OwogICAgICAgIHN0YXRpYyBpbnQgYm9hcmRfaWR4ID0gLTE7CiAgICAgICAgdTggcGNpX3JldjsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYoIShwZGV2ICE9ICgodm9p ZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4i LCAicGRldiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTUyKTsgfTsKICAgICAg ICBpZighKGVudCAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEg JXMsJXMsJXMsbGluZT0lZFxuIiwgImVudCAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9O X18sOTUzKTsgfTsKCiAgICAgICAgYm9hcmRfaWR4Kys7CgoKCgoKICAgICAgICB7CiAgICAgICAg ICAgICAgICBzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKICAgICAgICAgICAgICAgIGlmICgh cHJpbnRlZF92ZXJzaW9uKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoIjw2PiIg IjgxMzl0b28iICIgRmFzdCBFdGhlcm5ldCBkcml2ZXIgIiAiMC45LjIwIiAiXG4iKTsKICAgICAg ICB9CgoKICAgICAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDA4LCAmcGNpX3Jldik7 CgogICAgICAgIGlmIChwZGV2LT52ZW5kb3IgPT0gMHgxMGVjICYmCiAgICAgICAgICAgIHBkZXYt PmRldmljZSA9PSAweDgxMzkgJiYgcGNpX3JldiA+PSAweDIwKSB7CiAgICAgICAgICAgICAgICBw cmludGsoIjw2PiIgIjgxMzl0b28iICI6ICIgInBjaSBkZXYgJXMgKGlkICUwNHg6JTA0eCByZXYg JTAyeCkgaXMgYW4gZW5oYW5jZWQgODEzOUMrIGNoaXBcbiIsCiAgICAgICAgICAgICAgICAgICAg ICAgcGRldi0+c2xvdF9uYW1lLCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGNpX3Jldik7 CiAgICAgICAgICAgICAgICBwcmludGsoIjw2PiIgIjgxMzl0b28iICI6ICIgIlVzZSB0aGUgXCI4 MTM5Y3BcIiBkcml2ZXIgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuXG4i KTsKICAgICAgICB9CgogICAgICAgIGkgPSBydGw4MTM5X2luaXRfYm9hcmQgKHBkZXYsICZkZXYp OwogICAgICAgIGlmIChpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9Cgog ICAgICAgIHRwID0gZGV2LT5wcml2OwogICAgICAgIGlvYWRkciA9IHRwLT5tbWlvX2FkZHI7Cgog ICAgICAgIGlmKCEoaW9hZGRyICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24g ZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiaW9hZGRyICE9IE5VTEwiLCI4MTM5dG9vLmMi LF9fRlVOQ1RJT05fXyw5ODYpOyB9OwogICAgICAgIGlmKCEoZGV2ICE9ICgodm9pZCAqKTApKSkg eyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9 IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXyw5ODcpOyB9OwogICAgICAgIGlmKCEodHAg IT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxp bmU9JWRcbiIsICJ0cCAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTg4KTsgfTsK CiAgICAgICAgYWRkcl9sZW4gPSByZWFkX2VlcHJvbSAoaW9hZGRyLCAwLCA4KSA9PSAweDgxMjkg PyA4IDogNjsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogICAgICAgICAgICAgICAg KCh1MTYgKikgKGRldi0+ZGV2X2FkZHIpKVtpXSA9CiAgICAgICAgICAgICAgICAgICAgKChfX3Ux NikocmVhZF9lZXByb20gKGlvYWRkciwgaSArIDcsIGFkZHJfbGVuKSkpOwoKCiAgICAgICAgZGV2 LT5vcGVuID0gcnRsODEzOV9vcGVuOwogICAgICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gcnRs ODEzOV9zdGFydF94bWl0OwogICAgICAgIGRldi0+c3RvcCA9IHJ0bDgxMzlfY2xvc2U7CiAgICAg ICAgZGV2LT5nZXRfc3RhdHMgPSBydGw4MTM5X2dldF9zdGF0czsKICAgICAgICBkZXYtPnNldF9t dWx0aWNhc3RfbGlzdCA9IHJ0bDgxMzlfc2V0X3J4X21vZGU7CiAgICAgICAgZGV2LT5kb19pb2N0 bCA9IG5ldGRldl9pb2N0bDsKICAgICAgICBkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTM5X3R4X3Rp bWVvdXQ7CiAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9ICg2KjEwMCk7CiAgICAgICAgZGV2 LT5mZWF0dXJlcyB8PSAxfDg7CgogICAgICAgIGRldi0+aXJxID0gcGRldi0+aXJxOwoKCiAgICAg ICAgdHAgPSBkZXYtPnByaXY7CgoKICAgICAgICB0cC0+ZHJ2X2ZsYWdzID0gYm9hcmRfaW5mb1tl bnQtPmRyaXZlcl9kYXRhXS5od19mbGFnczsKICAgICAgICB0cC0+bW1pb19hZGRyID0gaW9hZGRy OwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkICgm dHAtPnRocl93YWl0KTsKICAgICAgICBpbml0X2NvbXBsZXRpb24gKCZ0cC0+dGhyX2V4aXRlZCk7 CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIGkgPSByZWdpc3Rlcl9uZXRkZXYgKGRl dik7CiAgICAgICAgaWYgKGkpIGdvdG8gZXJyX291dDsKCiAgICAgICAgcGNpX3NldF9kcnZkYXRh IChwZGV2LCBkZXYpOwoKICAgICAgICBwcmludGsgKCI8Nj4iICIlczogJXMgYXQgMHglbHgsICIK ICAgICAgICAgICAgICAgICIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCwgIgog ICAgICAgICAgICAgICAgIklSUSAlZFxuIiwKICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKICAg ICAgICAgICAgICAgIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKICAgICAgICAg ICAgICAgIGRldi0+YmFzZV9hZGRyLAogICAgICAgICAgICAgICAgZGV2LT5kZXZfYWRkclswXSwg ZGV2LT5kZXZfYWRkclsxXSwKICAgICAgICAgICAgICAgIGRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ ZGV2X2FkZHJbM10sCiAgICAgICAgICAgICAgICBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9h ZGRyWzVdLAogICAgICAgICAgICAgICAgZGV2LT5pcnEpOwoKICAgICAgICBwcmludGsgKCI8Nz4i ICIlczogIElkZW50aWZpZWQgODEzOSBjaGlwIHR5cGUgJyVzJ1xuIiwKICAgICAgICAgICAgICAg IGRldi0+bmFtZSwgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSk7CiMgMTA2MyAiODEz OXRvby5jIgogICAgICAgICAgICAgICAgdHAtPnBoeXNbMF0gPSAzMjsKCgogICAgICAgIG9wdGlv biA9IChib2FyZF9pZHggPj0gOCkgPyAwIDogbWVkaWFbYm9hcmRfaWR4XTsKICAgICAgICBpZiAo b3B0aW9uID4gMCkgewogICAgICAgICAgICAgICAgdHAtPmZ1bGxfZHVwbGV4ID0gKG9wdGlvbiAm IDB4MjEwKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgdHAtPmRlZmF1bHRfcG9ydCA9IG9wdGlv biAmIDB4RkY7CiAgICAgICAgICAgICAgICBpZiAodHAtPmRlZmF1bHRfcG9ydCkKICAgICAgICAg ICAgICAgICAgICAgICAgdHAtPm1lZGlhbG9jayA9IDE7CiAgICAgICAgfQogICAgICAgIGlmIChi b2FyZF9pZHggPCA4ICYmIGZ1bGxfZHVwbGV4W2JvYXJkX2lkeF0gPiAwKQogICAgICAgICAgICAg ICAgdHAtPmZ1bGxfZHVwbGV4ID0gZnVsbF9kdXBsZXhbYm9hcmRfaWR4XTsKICAgICAgICBpZiAo dHAtPmZ1bGxfZHVwbGV4KSB7CiAgICAgICAgICAgICAgICBwcmludGsoIjw2PiIgIiVzOiBNZWRp YSB0eXBlIGZvcmNlZCB0byBGdWxsIER1cGxleC5cbiIsIGRldi0+bmFtZSk7CgoKICAgICAgICAg ICAgICAgIHRwLT5kdXBsZXhfbG9jayA9IDE7CiAgICAgICAgfQogICAgICAgIGlmICh0cC0+ZGVm YXVsdF9wb3J0KSB7CiAgICAgICAgICAgICAgICBwcmludGsoIjw2PiIgIiAgRm9yY2luZyAlZE1i cHMgJXMtZHVwbGV4IG9wZXJhdGlvbi5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChv cHRpb24gJiAweDIwID8gMTAwIDogMTApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0 aW9uICYgMHgxMCA/ICJmdWxsIiA6ICJoYWxmIikpOwogICAgICAgICAgICAgICAgbWRpb193cml0 ZShkZXYsIHRwLT5waHlzWzBdLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgob3B0aW9uICYgMHgyMCkgPyAweDIwMDAgOiAwKSB8CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKChvcHRpb24gJiAweDEwKSA/IDB4MDEwMCA6IDApKTsKICAgICAgICB9CgoK ICAgICAgICBpZiAocnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uZmxhZ3MgJiBIYXNIbHRDbGsp CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShp b2FkZHIgKyAoSGx0Q2xrKSkpID0gKCgnSCcpKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgIHJldHVybiAwOwoKZXJyX291dDoKICAgICAgICBfX3J0 bDgxMzlfY2xlYW51cF9kZXYgKGRldik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgIHJldHVybiBpOwp9CgoKc3RhdGljIHZvaWQgX19hdHRyaWJ1 dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18oIi50ZXh0LmV4aXQiKSkpIHJ0bDgxMzlfcmVtb3Zl X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCnsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2 YXRlICpucDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYoIShkZXYg IT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxp bmU9JWRcbiIsICJkZXYgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDExMTEpOyB9 OwogICAgICAgIG5wID0gZGV2LT5wcml2OwogICAgICAgIGlmKCEobnAgIT0gKCh2b2lkICopMCkp KSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJucCAh PSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sMTExMyk7IH07CgogICAgICAgIHVucmVn aXN0ZXJfbmV0ZGV2IChkZXYpOwoKICAgICAgICBfX3J0bDgxMzlfY2xlYW51cF9kZXYgKGRldik7 CgogICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQojIDExNDUgIjgxMzl0b28uYyIKc3RhdGlj IGludCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSByZWFkX2Vl cHJvbSAodm9pZCAqaW9hZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbikKewogICAgICAg IGludCBpOwogICAgICAgIHVuc2lnbmVkIHJldHZhbCA9IDA7CiAgICAgICAgdm9pZCAqZWVfYWRk ciA9IGlvYWRkciArIENmZzkzNDY7CiAgICAgICAgaW50IHJlYWRfY21kID0gbG9jYXRpb24gfCAo KDYpIDw8IGFkZHJfbGVuKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpID0gKCgweDgw IHwgMHgwOCkgJiB+MHgwOCkpOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikg KCh2b2lkICopKGVlX2FkZHIpKSA9ICgoMHg4MCB8IDB4MDgpKSk7CiAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwoKCiAgICAgICAgZm9yIChp ID0gNCArIGFkZHJfbGVuOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgaW50IGRhdGF2 YWwgPSAocmVhZF9jbWQgJiAoMSA8PCBpKSkgPyAweDAyIDogMDsKICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIpKSA9ICgoMHg4MCB8 IDB4MDgpIHwgZGF0YXZhbCkpOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpID0gKCgweDgwIHwgMHgwOCkgfCBk YXRhdmFsIHwgMHgwNCkpOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50 ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwogICAgICAgIH0KICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShlZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4KSkpOwog ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsK CiAgICAgICAgZm9yIChpID0gMTY7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIpKSA9ICgoMHg4MCB8IDB4 MDgpIHwgMHgwNCkpOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICop ICgodm9pZCAqKShlZV9hZGRyKSkpOwogICAgICAgICAgICAgICAgcmV0dmFsID0KICAgICAgICAg ICAgICAgICAgICAocmV0dmFsIDw8IDEpIHwgKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop ICgodm9pZCAqKShlZV9hZGRyKSkpICYgMHgwMSkgPyAxIDoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDApOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg Y2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpID0gKCgweDgwIHwgMHgwOCkpKTsKICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsK ICAgICAgICB9CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShlZV9hZGRyKSkgPSAofjB4MDgpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQg KikgKCh2b2lkICopKGVlX2FkZHIpKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgIHJldHVybiByZXR2YWw7Cn0KIyAxMjAzICI4MTM5 dG9vLmMiCnN0YXRpYyBjaGFyIG1paV8yXzgxMzlfbWFwWzhdID0gewogICAgICAgIEJhc2ljTW9k ZUN0cmwsCiAgICAgICAgQmFzaWNNb2RlU3RhdHVzLAogICAgICAgIDAsCiAgICAgICAgMCwKICAg ICAgICBOV2F5QWR2ZXJ0LAogICAgICAgIE5XYXlMUEFSLAogICAgICAgIE5XYXlFeHBhbnNpb24s CiAgICAgICAgMAp9OwojIDEyMzQgIjgxMzl0b28uYyIKc3RhdGljIGludCBtZGlvX3JlYWQgKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKewogICAgICAg IHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIGludCByZXR2 YWwgPSAwOwoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgIGlmIChw aHlfaWQgPiAzMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHJldHVybiBs b2NhdGlvbiA8IDggJiYgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dID8KICAgICAgICAgICAgICAg ICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikodHAtPm1taW9fYWRk ciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkpKSA6IDA7CiAgICAgICAgfQojIDEyNzQgIjgx Mzl0b28uYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICByZXR1cm4gKHJldHZhbCA+PiAxKSAmIDB4ZmZmZjsK fQoKCnN0YXRpYyB2b2lkIG1kaW9fd3JpdGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBw aHlfaWQsIGludCBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKQp7 CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CgoKCgoKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYgKHBoeV9pZCA+IDMxKSB7CiAg ICAgICAgICAgICAgICB2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogICAgICAgICAgICAg ICAgaWYgKGxvY2F0aW9uID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENm ZzkzNDZfVW5sb2NrKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEJhc2ljTW9kZUN0cmwpKSkgPSAoKHZh bHVlKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0Nl9Mb2NrKSkpOwog ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhdGlvbiA8IDggJiYgbWlpXzJfODEzOV9tYXBb bG9jYXRpb25dKQogICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkpKSA9 ICgodmFsdWUpKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQojIDEzMjIgIjgx Mzl0b28uYyIKfQoKCnN0YXRpYyBpbnQgcnRsODEzOV9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAg ICAgICAgaW50IHJldHZhbDsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCBydGw4MTM5X2ludGVycnVwdCwgMHgw NDAwMDAwMCwgZGV2LT5uYW1lLCBkZXYpOwogICAgICAgIGlmIChyZXR2YWwpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICByZXR1cm4gcmV0dmFsOwogICAgICAgIH0KCiAgICAgICAgdHAtPnR4X2J1ZnMgPSBw Y2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGNpX2RldiwgKDE1MzYgKiA0KSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cC0+dHhfYnVmc19kbWEpOwogICAgICAg IHRwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgoODE5MiA8 PCAyKSArIDE2ICsgMjA0OCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdHAtPnJ4X3JpbmdfZG1hKTsKICAgICAgICBpZiAodHAtPnR4X2J1ZnMgPT0gKCh2b2lk ICopMCkgfHwgdHAtPnJ4X3JpbmcgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAgICAgIGZy ZWVfaXJxKGRldi0+aXJxLCBkZXYpOwoKICAgICAgICAgICAgICAgIGlmICh0cC0+dHhfYnVmcykK ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGNpX2Rldiwg KDE1MzYgKiA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 cC0+dHhfYnVmcywgdHAtPnR4X2J1ZnNfZG1hKTsKICAgICAgICAgICAgICAgIGlmICh0cC0+cnhf cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGNp X2RldiwgKCg4MTkyIDw8IDIpICsgMTYgKyAyMDQ4KSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cC0+cnhfcmluZywgdHAtPnJ4X3JpbmdfZG1hKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgcmV0dXJuIC0xMjsKCiAgICAgICAgfQoKICAgICAgICB0cC0+ZnVsbF9kdXBsZXgg PSB0cC0+ZHVwbGV4X2xvY2s7CiAgICAgICAgdHAtPnR4X2ZsYWcgPSAoMjU2IDw8IDExKSAmIDB4 MDAzZjAwMDA7CiAgICAgICAgdHAtPnR3aXN0aWUgPSAxOwoKICAgICAgICBydGw4MTM5X2luaXRf cmluZyAoZGV2KTsKICAgICAgICBydGw4MTM5X2h3X3N0YXJ0IChkZXYpOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgogICAg ICAgIHRwLT50aHJfcGlkID0ga2VybmVsX3RocmVhZCAocnRsODEzOV90aHJlYWQsIGRldiwgMHgw MDAwMDIwMCB8IDB4MDAwMDA0MDApOwogICAgICAgIGlmICh0cC0+dGhyX3BpZCA8IDApCiAgICAg ICAgICAgICAgICBwcmludGsgKCI8ND4iICIlczogdW5hYmxlIHRvIHN0YXJ0IGtlcm5lbCB0aHJl YWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSk7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMg dm9pZCBydGxfY2hlY2tfbWVkaWEgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBz dHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+cHJpdjsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICBpZiAodHAtPnBoeXNbMF0gPj0gMCkgewogICAgICAgICAgICAg ICAgdTE2IG1paV9yZWc1ID0gbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDUpOwogICAgICAg ICAgICAgICAgaWYgKG1paV9yZWc1ID09IDB4ZmZmZikKICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1paV9yZWc1ICYgMHgwMTAwKSA9PSAweDAxMDAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1paV9yZWc1ICYgMHgwMEMwKSA9 PSAweDAwNDApCiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5mdWxsX2R1cGxleCA9IDE7Cgog ICAgICAgICAgICAgICAgcHJpbnRrICgiPDY+IiIlczogU2V0dGluZyAlcyVzLWR1cGxleCBiYXNl ZCBvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF1dG8tbmVnb3RpYXRlZCBw YXJ0bmVyIGFiaWxpdHkgJTQuNHguXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5h bWUsIG1paV9yZWc1ID09IDAgPyAiIiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG1paV9yZWc1ICYgMHgwMTgwKSA/ICIxMDBtYnBzICIgOiAiMTBtYnBzICIsCiAgICAgICAgICAg ICAgICAgICAgICAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwgbWlpX3JlZzUp OwogICAgICAgIH0KfQoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfaHdfc3RhcnQgKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+ cHJpdjsKICAgICAgICB2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogICAgICAgIHUzMiBp OwogICAgICAgIHU4IHRtcDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAg IGlmIChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0hsdENsaykKICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciAr IChIbHRDbGspKSkgPSAoKCdSJykpKTsKCiAgICAgICAgcnRsODEzOV9jaGlwX3Jlc2V0IChpb2Fk ZHIpOwoKCiAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0Nl9VbmxvY2spKSk7ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpKTsgfSB3aGls ZSAoMCk7CgogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAq KShpb2FkZHIgKyAoTUFDMCArIDApKSkgPSAoKCgoX191MzIpKCoodTMyICopIChkZXYtPmRldl9h ZGRyICsgMCkpKSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2Fk ZHIgKyAoTUFDMCArIDApKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BQzAgKyA0KSkpID0gKCgoKF9f dTMyKSgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSkpKSk7ICgqKHZvbGF0aWxlIHVuc2ln bmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BQzAgKyA0KSkpKTsgfSB3aGlsZSAoMCk7 CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIg KyAoQ2hpcENtZCkpKSA9ICgoQ21kUnhFbmIgfCBDbWRUeEVuYikpKTsKCiAgICAgICAgdHAtPnJ4 X2NvbmZpZyA9IHJ0bDgxMzlfcnhfY29uZmlnIHwgQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQ aHlzOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFJ4Q29uZmlnKSkpID0gKCh0cC0+cnhfY29uZmlnKSkpOwoKCiAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhDb25maWcpKSkgPSAoKCg2 IDw8IFR4RE1BU2hpZnQpKSkpOwoKICAgICAgICB0cC0+Y3VyX3J4ID0gMDsKCiAgICAgICAgcnRs X2NoZWNrX21lZGlhIChkZXYpOwoKICAgICAgICBpZiAodHAtPmNoaXBzZXQgPj0gQ0hfODEzOUIp IHsKCgoKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lk ICopKGlvYWRkciArIChDb25maWczKSkpID0gKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop ICgodm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnMykpKSkgJiB+Q2ZnM19NYWdpYykpKTsKICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2ZnOTM0 NikpKSA9ICgoQ2ZnOTM0Nl9Mb2NrKSkpOwoKCiAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNp Z25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeEJ1ZikpKSA9ICgodHAtPnJ4X3Jpbmdf ZG1hKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChS eEJ1ZikpKSk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykK ICAgICAgICAgICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAq KShpb2FkZHIgKyAoVHhBZGRyMCArIChpICogNCkpKSkgPSAoKHRwLT50eF9idWZzX2RtYSArICh0 cC0+dHhfYnVmW2ldIC0gdHAtPnR4X2J1ZnMpKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQg KikgKCh2b2lkICopKGlvYWRkciArIChUeEFkZHIwICsgKGkgKiA0KSkpKSk7IH0gd2hpbGUgKDAp OwoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciAr IChSeE1pc3NlZCkpKSA9ICgoMCkpKTsKCiAgICAgICAgcnRsODEzOV9zZXRfcnhfbW9kZSAoZGV2 KTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2Fk ZHIgKyAoTXVsdGlJbnRyKSkpID0gKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZv aWQgKikoaW9hZGRyICsgKE11bHRpSW50cikpKSkgJiBNdWx0aUludHJDbGVhcikpKTsKCgogICAg ICAgIHRtcCA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciAr IChDaGlwQ21kKSkpKTsKICAgICAgICBpZiAoKCEodG1wICYgQ21kUnhFbmIpKSB8fCAoISh0bXAg JiBDbWRUeEVuYikpKQogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq KSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFJ4RW5iIHwgQ21kVHhFbmIp KSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9h ZGRyICsgKEludHJNYXNrKSkpID0gKChydGw4MTM5X2ludHJfbWFzaykpKTsKCiAgICAgICAgbmV0 aWZfc3RhcnRfcXVldWUgKGRldik7CgogICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgpz dGF0aWMgdm9pZCBydGw4MTM5X2luaXRfcmluZyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewog ICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIGlu dCBpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICB0cC0+Y3VyX3J4ID0g MDsKICAgICAgICB0cC0+Y3VyX3R4ID0gMDsKICAgICAgICB0cC0+ZGlydHlfdHggPSAwOwoKICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICAgICAgICB0cC0+dHhfaW5m b1tpXS5za2IgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgIHRwLT50eF9pbmZvW2ldLm1h cHBpbmcgPSAwOwogICAgICAgICAgICAgICAgdHAtPnR4X2J1ZltpXSA9ICZ0cC0+dHhfYnVmc1tp ICogMTUzNl07CiAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgoKc3Rh dGljIGludCBuZXh0X3RpY2sgPSAzICogMTAwOwoKCnN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTM5 X3R1bmVfdHdpc3RlciAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKSB7fQojIDE2MDAgIjgx Mzl0b28uYyIKc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxMzlfdGhyZWFkX2l0ZXIgKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy dGw4MTM5X3ByaXZhdGUgKnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICppb2FkZHIpCnsKICAgICAgICBpbnQgbWlpX3JlZzU7CgogICAgICAgIG1paV9yZWc1ID0gbWRp b19yZWFkIChkZXYsIHRwLT5waHlzWzBdLCA1KTsKCiAgICAgICAgaWYgKCF0cC0+ZHVwbGV4X2xv Y2sgJiYgbWlpX3JlZzUgIT0gMHhmZmZmKSB7CiAgICAgICAgICAgICAgICBpbnQgZHVwbGV4ID0g KG1paV9yZWc1ICYgMHgwMTAwKQogICAgICAgICAgICAgICAgICAgIHx8IChtaWlfcmVnNSAmIDB4 MDFDMCkgPT0gMHgwMDQwOwogICAgICAgICAgICAgICAgaWYgKHRwLT5mdWxsX2R1cGxleCAhPSBk dXBsZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmZ1bGxfZHVwbGV4ID0gZHVwbGV4 OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1paV9yZWc1KSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRrICgiPDY+IgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiVzOiBTZXR0aW5nICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkIGxp bmsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBhcnRuZXIgYWJp bGl0eSBvZiAlNC40eC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXYtPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+ ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0cC0+cGh5c1swXSwgbWlpX3JlZzUpOwogICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiPDY+ IiIlczogbWVkaWEgaXMgdW5jb25uZWN0ZWQsIGxpbmsgZG93biwgb3IgaW5jb21wYXRpYmxlIGNv bm5lY3Rpb25cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+ bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAgICAgfQog ICAgICAgIH0KCiAgICAgICAgbmV4dF90aWNrID0gMTAwICogNjA7CgogICAgICAgIHJ0bDgxMzlf dHVuZV90d2lzdGVyIChkZXYsIHRwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCn0KCgpzdGF0aWMg aW50IHJ0bDgxMzlfdGhyZWFkICh2b2lkICpkYXRhKQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKmRldiA9IGRhdGE7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYt PnByaXY7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0OwoKICAgICAgICBkYWVtb25pemUg KCk7CiAgICAgICAgcmVwYXJlbnRfdG9faW5pdCgpOwogICAgICAgIGRvIHsgX19hc21fXyBfX3Zv bGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgKHZvaWQpKCZnZXRfY3VycmVudCgpLT5zaWdt YXNrX2xvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBzaWdlbXB0eXNldCgmZ2V0X2N1cnJlbnQo KS0+YmxvY2tlZCk7CiAgICAgICAgcmVjYWxjX3NpZ3BlbmRpbmcoZ2V0X2N1cnJlbnQoKSk7CiAg ICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6 IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwoKICAgICAgICBzdHJuY3B5IChnZXRfY3VycmVudCgp LT5jb21tLCBkZXYtPm5hbWUsIHNpemVvZihnZXRfY3VycmVudCgpLT5jb21tKSAtIDEpOwogICAg ICAgIGdldF9jdXJyZW50KCktPmNvbW1bc2l6ZW9mKGdldF9jdXJyZW50KCktPmNvbW0pIC0gMV0g PSAnXDAnOwoKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgICAgdGltZW91dCA9IG5l eHRfdGljazsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGlt ZW91dCA9IGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCAoJnRwLT50aHJfd2FpdCwgdGlt ZW91dCk7CiAgICAgICAgICAgICAgICB9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcgKGdldF9jdXJy ZW50KCkpICYmICh0aW1lb3V0ID4gMCkpOwoKICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVu ZGluZyAoZ2V0X2N1cnJlbnQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgICAgIHJ0bmxfbG9jayAoKTsKICAgICAgICAgICAgICAgIHJ0bDgxMzlfdGhyZWFk X2l0ZXIgKGRldiwgdHAsIHRwLT5tbWlvX2FkZHIpOwogICAgICAgICAgICAgICAgcnRubF91bmxv Y2sgKCk7CiAgICAgICAgfQoKICAgICAgICBjb21wbGV0ZV9hbmRfZXhpdCAoJnRwLT50aHJfZXhp dGVkLCAwKTsKfQoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfdHhfY2xlYXIgKHN0cnVjdCBydGw4MTM5 X3ByaXZhdGUgKnRwKQp7CiAgICAgICAgaW50IGk7CgogICAgICAgIHRwLT5jdXJfdHggPSAwOwog ICAgICAgIHRwLT5kaXJ0eV90eCA9IDA7CgoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsr KSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcmluZ19pbmZvICpycCA9ICZ0cC0+dHhfaW5mb1tp XTsKICAgICAgICAgICAgICAgIGlmIChycC0+bWFwcGluZyAhPSAwKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV91bm1hcF9zaW5nbGUgKHRwLT5wY2lfZGV2LCBycC0+bWFwcGluZywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtPnNrYi0+bGVuLCAxKTsK ICAgICAgICAgICAgICAgICAgICAgICAgcnAtPm1hcHBpbmcgPSAwOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgaWYgKHJwLT5za2IpIHsKICAgICAgICAgICAgICAgICAgICAgICAg a2ZyZWVfc2tiKHJwLT5za2IpOwogICAgICAgICAgICAgICAgICAgICAgICBycC0+c2tiID0gKCh2 b2lkICopMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9kcm9wcGVkKys7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9CgoKc3RhdGljIHZvaWQgcnRsODEzOV90eF90 aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlf cHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gdHAtPm1taW9f YWRkcjsKICAgICAgICBpbnQgaTsKICAgICAgICB1OCB0bXA4OwogICAgICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgog ICAgICAgIHRwLT54c3RhdHMudHhfdGltZW91dHMrKzsKCgogICAgICAgIHRtcDggPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7CiAg ICAgICAgaWYgKHRtcDggJiBDbWRUeEVuYikKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0gKChDbWRSeEVu YikpKTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShp b2FkZHIgKyAoSW50ck1hc2spKSkgPSAoKDB4MDAwMCkpKTsKCgogICAgICAgIHByaW50ayAoIjw3 PiIgIiVzOiBUeCBxdWV1ZSBzdGFydCBlbnRyeSAlbGQgIGRpcnR5IGVudHJ5ICVsZC5cbiIsCiAg ICAgICAgICAgICAgICBkZXYtPm5hbWUsIHRwLT5jdXJfdHgsIHRwLT5kaXJ0eV90eCk7CiAgICAg ICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKICAgICAgICAgICAgICAgIHByaW50ayAoIjw3PiIg IiVzOiAgVHggZGVzY3JpcHRvciAlZCBpcyAlOC44bHguJXNcbiIsCiAgICAgICAgICAgICAgICAg ICAgICAgIGRldi0+bmFtZSwgaSwgKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeFN0YXR1czAgKyAoaSAqIDQpKSkpKSksCiAg ICAgICAgICAgICAgICAgICAgICAgIGkgPT0gdHAtPmRpcnR5X3R4ICUgNCA/CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiAocXVldWUgaGVhZCkiIDogIiIpOwoKCiAgICAgICAgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxh Z3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRwLT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg cnRsODEzOV90eF9jbGVhciAodHApOwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5 IiwgImNjIik7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgcnRsODEzOV9od19zdGFydCAoZGV2KTsK CiAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKfQoKCnN0YXRpYyBpbnQgcnRsODEzOV9z dGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7 CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAg dm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnk7 CiAgICAgICAgdTMyIGRtYV9hZGRyOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxv Y2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7CgoKICAgICAgICBlbnRyeSA9IHRw LT5jdXJfdHggJSA0OwoKICAgICAgICBpZighKHRwLT50eF9pbmZvW2VudHJ5XS5za2IgPT0gKCh2 b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRc biIsICJ0cC0+dHhfaW5mb1tlbnRyeV0uc2tiID09IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJ T05fXywxNzY1KTsgfTsKICAgICAgICBpZighKHRwLT50eF9pbmZvW2VudHJ5XS5tYXBwaW5nID09 IDApKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJ0 cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyA9PSAwIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18s MTc2Nik7IH07CgogICAgICAgIHRwLT50eF9pbmZvW2VudHJ5XS5za2IgPSBza2I7CiAgICAgICAg aWYgKCAhKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDMpICYmICgoc3RydWN0IHNrYl9zaGFy ZWRfaW5mbyAqKSgoc2tiKS0+ZW5kKSktPm5yX2ZyYWdzID09IDAgJiYKICAgICAgICAgICAgICAg ICAgICAgICAgc2tiLT5pcF9zdW1tZWQgIT0gMSkgewogICAgICAgICAgICAgICAgdHAtPnhzdGF0 cy50eF9idWZfbWFwcGVkKys7CiAgICAgICAgICAgICAgICB0cC0+dHhfaW5mb1tlbnRyeV0ubWFw cGluZyA9CiAgICAgICAgICAgICAgICAgICAgcGNpX21hcF9zaW5nbGUgKHRwLT5wY2lfZGV2LCBz a2ItPmRhdGEsIHNrYi0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx KTsKICAgICAgICAgICAgICAgIGRtYV9hZGRyID0gdHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmc7 CiAgICAgICAgfSBlbHNlIGlmIChza2ItPmxlbiA8IDE1MzYpIHsKICAgICAgICAgICAgICAgIHNr Yl9jb3B5X2FuZF9jc3VtX2Rldihza2IsIHRwLT50eF9idWZbZW50cnldKTsKICAgICAgICAgICAg ICAgIGRtYV9hZGRyID0gdHAtPnR4X2J1ZnNfZG1hICsgKHRwLT50eF9idWZbZW50cnldIC0gdHAt PnR4X2J1ZnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBrZnJlZV9za2Ioc2ti KTsKICAgICAgICAgICAgICAgIHRwLT50eF9pbmZvW2VudHJ5XS5za2IgPSAoKHZvaWQgKikwKTsK ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgZG8geyBfX2FzbV9f IF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRwLT5sb2NrKTsgfSB3 aGlsZSAoMCk7CiAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lk ICopKGlvYWRkciArIChUeEFkZHIwICsgKGVudHJ5ICogNCkpKSkgPSAoKGRtYV9hZGRyKSkpOyAo Kih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeEFkZHIwICsg KGVudHJ5ICogNCkpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4U3RhdHVzMCArIChlbnRyeSAqIHNp emVvZiAodTMyKSkpKSkgPSAoKHRwLT50eF9mbGFnIHwgKHNrYi0+bGVuID49IDYwID8gc2tiLT5s ZW4gOiA2MCkpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFR4U3RhdHVzMCArIChlbnRyeSAqIHNpemVvZiAodTMyKSkpKSkpOyB9IHdoaWxlICgwKTsK CgogICAgICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwoKICAgICAgICB0cC0+Y3VyX3R4 Kys7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICQwLDAoJSVlc3Ap IjogOiA6Im1lbW9yeSIpOwogICAgICAgIGlmICgodHAtPmN1cl90eCAtIDQpID09IHRwLT5kaXJ0 eV90eCkKICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUgKGRldik7CiAgICAgICAgZG8g eyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5 Iik7IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogICAgICAgIHJldHVybiAwOwp9CgoKc3RhdGljIHZvaWQgcnRs ODEzOV90eF9pbnRlcnJ1cHQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmlvYWRkcikKewogICAgICAgIHVuc2lnbmVk IGxvbmcgZGlydHlfdHgsIHR4X2xlZnQ7CgogICAgICAgIGlmKCEoZGV2ICE9ICgodm9pZCAqKTAp KSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2 ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywxODExKTsgfTsKICAgICAgICBpZigh KHRwICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywl cyxsaW5lPSVkXG4iLCAidHAgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDE4MTIp OyB9OwogICAgICAgIGlmKCEoaW9hZGRyICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3Nl cnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiaW9hZGRyICE9IE5VTEwiLCI4MTM5 dG9vLmMiLF9fRlVOQ1RJT05fXywxODEzKTsgfTsKCiAgICAgICAgZGlydHlfdHggPSB0cC0+ZGly dHlfdHg7CiAgICAgICAgdHhfbGVmdCA9IHRwLT5jdXJfdHggLSBkaXJ0eV90eDsKICAgICAgICB3 aGlsZSAodHhfbGVmdCA+IDApIHsKICAgICAgICAgICAgICAgIGludCBlbnRyeSA9IGRpcnR5X3R4 ICUgNDsKICAgICAgICAgICAgICAgIGludCB0eHN0YXR1czsKCiAgICAgICAgICAgICAgICB0eHN0 YXR1cyA9ICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9p ZCAqKShpb2FkZHIgKyAoVHhTdGF0dXMwICsgKGVudHJ5ICogc2l6ZW9mICh1MzIpKSkpKSkpOwoK ICAgICAgICAgICAgICAgIGlmICghKHR4c3RhdHVzICYgKFR4U3RhdE9LIHwgVHhVbmRlcnJ1biB8 IFR4QWJvcnRlZCkpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCgogICAgICAgICAg ICAgICAgaWYgKHR4c3RhdHVzICYgKFR4T3V0T2ZXaW5kb3cgfCBUeEFib3J0ZWQpKSB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHR4c3RhdHVzICYgVHhBYm9ydGVkKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lk ICopKGlvYWRkciArIChUeENvbmZpZykpKSA9ICgoVHhDbGVhckFidCB8ICg2IDw8IFR4RE1BU2hp ZnQpKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChU eENvbmZpZykpKSk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAmIFR4Q2Fycmllckxvc3QpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAmIFR4T3V0T2ZXaW5kb3cpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsK CgoKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo dHhzdGF0dXMgJiBUeFVuZGVycnVuKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICh0cC0+dHhfZmxhZyA8IDB4MDAzMDAwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0cC0+dHhfZmxhZyArPSAweDAwMDIwMDAwOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5jb2xsaXNpb25z ICs9ICh0eHN0YXR1cyA+PiAyNCkgJiAxNTsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0 YXRzLnR4X2J5dGVzICs9IHR4c3RhdHVzICYgMHg3ZmY7CiAgICAgICAgICAgICAgICAgICAgICAg IHRwLT5zdGF0cy50eF9wYWNrZXRzKys7CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAg ICAgIGlmICh0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyAhPSAwKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV91bm1hcF9zaW5nbGUodHAtPnBjaV9kZXYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2luZm9bZW50cnldLnNr Yi0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAg ICAgICAgICAgICAgICAgICAgICB0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyA9IDA7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycSAodHAtPnR4X2lu Zm9bZW50cnldLnNrYik7CiAgICAgICAgICAgICAgICB0cC0+dHhfaW5mb1tlbnRyeV0uc2tiID0g KCh2b2lkICopMCk7CgogICAgICAgICAgICAgICAgZGlydHlfdHgrKzsKICAgICAgICAgICAgICAg IHR4X2xlZnQtLTsKICAgICAgICB9CgoKICAgICAgICBpZiAodHAtPmN1cl90eCAtIGRpcnR5X3R4 ID4gNCkgewogICAgICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiJXM6IE91dC1vZi1zeW5jIGRp cnR5IHBvaW50ZXIsICVsZCB2cy4gJWxkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2 LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CiAgICAgICAgICAgICAgICBkaXJ0eV90eCAr PSA0OwogICAgICAgIH0KCgoKICAgICAgICBpZiAodHAtPmRpcnR5X3R4ICE9IGRpcnR5X3R4KSB7 CiAgICAgICAgICAgICAgICB0cC0+ZGlydHlfdHggPSBkaXJ0eV90eDsKICAgICAgICAgICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1v cnkiKTsKICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkIChkZXYpKQogICAg ICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlIChkZXYpOwogICAgICAgIH0KfQoK CgpzdGF0aWMgdm9pZCBydGw4MTM5X3J4X2VyciAodTMyIHJ4X3N0YXR1cywgc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGw4MTM5X3By aXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCnsKICAgICAgICB1OCB0bXA4OwogICAgICAgIGludCB0 bXBfd29yazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg ICBpZiAocnhfc3RhdHVzICYgUnhUb29Mb25nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICB9CiAgICAgICAgdHAtPnN0YXRzLnJ4X2Vy cm9ycysrOwogICAgICAgIGlmIChyeF9zdGF0dXMgJiAoUnhCYWRTeW1ib2wgfCBSeEJhZEFsaWdu KSkKICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKICAgICAgICBp ZiAocnhfc3RhdHVzICYgKFJ4UnVudCB8IFJ4VG9vTG9uZykpCiAgICAgICAgICAgICAgICB0cC0+ c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogICAgICAgIGlmIChyeF9zdGF0dXMgJiBSeENSQ0Vy cikKICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CgoKCgogICAgICAg IGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENo aXBDbWQpKSkgPSAoKENtZFR4RW5iKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgo dm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7IH0gd2hpbGUgKDApOwogICAgICAgIHRtcF93 b3JrID0gMjAwOwogICAgICAgIHdoaWxlICgtLXRtcF93b3JrID4gMCkgewogICAgICAgICAgICAg ICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDEpID8gKCgxKSA+IDIwMDAwID8gX19iYWRfdWRlbGF5 KCkgOiBfX2NvbnN0X3VkZWxheSgoMSkgKiAweDEwYzZ1bCkpIDogX191ZGVsYXkoMSkpOwogICAg ICAgICAgICAgICAgdG1wOCA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICop KGlvYWRkciArIChDaGlwQ21kKSkpKTsKICAgICAgICAgICAgICAgIGlmICghKHRtcDggJiBDbWRS eEVuYikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBp ZiAodG1wX3dvcmsgPD0gMCkKICAgICAgICAgICAgICAgIHByaW50ayAoIjw0PiIgIjgxMzl0b28i ICI6ICIgInJ4IHN0b3Agd2FpdCB0b28gbG9uZ1xuIik7CgogICAgICAgIHRtcF93b3JrID0gMjAw OwogICAgICAgIHdoaWxlICgtLXRtcF93b3JrID4gMCkgewogICAgICAgICAgICAgICAgZG8geyAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkp KSA9ICgoQ21kUnhFbmIgfCBDbWRUeEVuYikpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq KSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgxKSA/ICgoMSkgPiAyMDAwMCA/IF9fYmFkX3Vk ZWxheSgpIDogX19jb25zdF91ZGVsYXkoKDEpICogMHgxMGM2dWwpKSA6IF9fdWRlbGF5KDEpKTsK ICAgICAgICAgICAgICAgIHRtcDggPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9p ZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7CiAgICAgICAgICAgICAgICBpZiAoKHRtcDggJiBD bWRSeEVuYikgJiYgKHRtcDggJiBDbWRUeEVuYikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgIH0KICAgICAgICBpZiAodG1wX3dvcmsgPD0gMCkKICAgICAgICAgICAgICAg IHByaW50ayAoIjw0PiIgIjgxMzl0b28iICI6ICIgInR4L3J4IGVuYWJsZSB3YWl0IHRvbyBsb25n XG4iKTsKCgogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQg KikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfVW5sb2NrKSkpOyAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2ZnOTM0NikpKSk7IH0gd2hp bGUgKDApOwoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShp b2FkZHIgKyAoQ2hpcENtZCkpKSA9ICgoQ21kUnhFbmIgfCBDbWRUeEVuYikpKTsKCiAgICAgICAg dHAtPnJ4X2NvbmZpZyA9IHJ0bDgxMzlfcnhfY29uZmlnIHwgQWNjZXB0QnJvYWRjYXN0IHwgQWNj ZXB0TXlQaHlzOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKiko aW9hZGRyICsgKFJ4Q29uZmlnKSkpID0gKCh0cC0+cnhfY29uZmlnKSkpOwogICAgICAgIHRwLT5j dXJfcnggPSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsg KENmZzkzNDYpKSkgPSAoKENmZzkzNDZfTG9jaykpKTsKCgogICAgICAgIGRvIHsgKCoodm9sYXRp bGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhCdWYpKSkgPSAoKHRwLT5y eF9yaW5nX2RtYSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2Fk ZHIgKyAoUnhCdWYpKSkpOyB9IHdoaWxlICgwKTsKCgogICAgICAgIF9fc2V0X3J4X21vZGUgKGRl dik7Cn0KCnN0YXRpYyB2b2lkIHJ0bDgxMzlfcnhfaW50ZXJydXB0IChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0bDgxMzlf cHJpdmF0ZSAqdHAsIHZvaWQgKmlvYWRkcikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgKnJ4X3Jp bmc7CiAgICAgICAgdTE2IGN1cl9yeDsKCiAgICAgICAgaWYoIShkZXYgIT0gKCh2b2lkICopMCkp KSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJkZXYg IT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDE5NjMpOyB9OwogICAgICAgIGlmKCEo dHAgIT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVz LGxpbmU9JWRcbiIsICJ0cCAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sMTk2NCk7 IH07CiAgICAgICAgaWYoIShpb2FkZHIgIT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2Vy dGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJpb2FkZHIgIT0gTlVMTCIsIjgxMzl0 b28uYyIsX19GVU5DVElPTl9fLDE5NjUpOyB9OwoKICAgICAgICByeF9yaW5nID0gdHAtPnJ4X3Jp bmc7CiAgICAgICAgY3VyX3J4ID0gdHAtPmN1cl9yeDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgICAgICAgd2hpbGUgKCgoKih2 b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSkg JiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CiAgICAgICAgICAgICAgICBpbnQgcmluZ19vZmZzZXQgPSBj dXJfcnggJSAoODE5MiA8PCAyKTsKICAgICAgICAgICAgICAgIHUzMiByeF9zdGF0dXM7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBwa3Rfc2l6ZTsKICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2I7CgogICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICQwLDAoJSVlc3Ap IjogOiA6Im1lbW9yeSIpOwoKCiAgICAgICAgICAgICAgICByeF9zdGF0dXMgPSAoKF9fdTMyKSgq KHUzMiAqKSAocnhfcmluZyArIHJpbmdfb2Zmc2V0KSkpOwogICAgICAgICAgICAgICAgcnhfc2l6 ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKICAgICAgICAgICAgICAgIHBrdF9zaXplID0gcnhfc2l6ZSAt IDQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAyMDAzICI4 MTM5dG9vLmMiCiAgICAgICAgICAgICAgICBpZiAocnhfc2l6ZSA9PSAweGZmZjApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgdHAtPnhzdGF0cy5lYXJseV9yeCsrOwogICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAgICAgIGlm ICgocnhfc2l6ZSA+ICgxNTM2ICs0KSkgfHwKICAgICAgICAgICAgICAgICAgICAocnhfc2l6ZSA8 IDgpIHx8CiAgICAgICAgICAgICAgICAgICAgKCEocnhfc3RhdHVzICYgUnhTdGF0dXNPSykpKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDgxMzlfcnhfZXJyIChyeF9zdGF0dXMsIGRldiwg dHAsIGlvYWRkcik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg ICAgIH0KIyAyMDI5ICI4MTM5dG9vLmMiCiAgICAgICAgICAgICAgICBza2IgPSBkZXZfYWxsb2Nf c2tiIChwa3Rfc2l6ZSArIDIpOwogICAgICAgICAgICAgICAgaWYgKHNrYikgewogICAgICAgICAg ICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKICAgICAgICAgICAgICAgICAgICAgICAgc2ti X3Jlc2VydmUgKHNrYiwgMik7CgogICAgICAgICAgICAgICAgICAgICAgICBldGhfY29weV9hbmRf c3VtIChza2IsICZyeF9yaW5nW3Jpbmdfb2Zmc2V0ICsgNF0sIHBrdF9zaXplLCAwKTsKICAgICAg ICAgICAgICAgICAgICAgICAgc2tiX3B1dCAoc2tiLCBwa3Rfc2l6ZSk7CgogICAgICAgICAgICAg ICAgICAgICAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMgKHNrYiwgZGV2KTsKICAg ICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcnggKHNrYik7CiAgICAgICAgICAgICAgICAgICAg ICAgIGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5z dGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0 YXRzLnJ4X3BhY2tldHMrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ayAoIjw0PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi JXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5z dGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY3Vy X3J4ID0gKGN1cl9yeCArIHJ4X3NpemUgKyA0ICsgMykgJiB+MzsKICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhCdWZQdHIp KSkgPSAoKGN1cl9yeCAtIDE2KSkpOwoKICAgICAgICAgICAgICAgIGlmICgoKih2b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMpKSkpICYgUnhB Y2tCaXRzKQogICAgICAgICAgICAgICAgICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSA9ICgoUnhBY2tCaXRz KSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKElu dHJTdGF0dXMpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogICAgICAgIHRwLT5jdXJf cnggPSBjdXJfcng7CgogICAgICAgIGlmICgoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAo KHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpICYgUnhCdWZFbXB0eSkgJiYKICAgICAgICAg ICAgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoSW50 clN0YXR1cykpKSkgJiBSeEFja0JpdHMpKQogICAgICAgICAgICAgICAgZG8geyAoKih2b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMpKSkgPSAo KFJ4QWNrQml0cykpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlv YWRkciArIChJbnRyU3RhdHVzKSkpKTsgfSB3aGlsZSAoMCk7Cn0KCgpzdGF0aWMgdm9pZCBydGw4 MTM5X3dlaXJkX2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaW9hZGRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywgaW50IGxpbmtfY2hhbmdlZCkK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgIGlmKCEoZGV2 ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxs aW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywyMDc3KTsg fTsKICAgICAgICBpZighKHRwICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24g ZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19G VU5DVElPTl9fLDIwNzgpOyB9OwogICAgICAgIGlmKCEoaW9hZGRyICE9ICgodm9pZCAqKTApKSkg eyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiaW9hZGRy ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywyMDc5KTsgfTsKCgogICAgICAgIHRw LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9ICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUg dW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhNaXNzZWQpKSkpKTsKICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3Nl ZCkpKSA9ICgoMCkpKTsKCiAgICAgICAgaWYgKChzdGF0dXMgJiBSeFVuZGVycnVuKSAmJiBsaW5r X2NoYW5nZWQgJiYKICAgICAgICAgICAgKHRwLT5kcnZfZmxhZ3MgJiBIQVNfTE5LX0NITkcpKSB7 CgogICAgICAgICAgICAgICAgaW50IGxwYXIgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSAoKHZvaWQgKikoaW9hZGRyICsgKE5XYXlMUEFSKSkpKTsKICAgICAgICAgICAgICAgIGludCBk dXBsZXggPSAobHBhciAmIDB4MDEwMCkgfHwgKGxwYXIgJiAweDAxQzApID09IDB4MDA0MAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRwLT5kdXBsZXhfbG9jazsKICAgICAgICAg ICAgICAgIGlmICh0cC0+ZnVsbF9kdXBsZXggIT0gZHVwbGV4KSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHRwLT5mdWxsX2R1cGxleCA9IGR1cGxleDsKCgoKCgogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgc3RhdHVzICY9IH5SeFVuZGVycnVuOwogICAgICAgIH0KCgogICAgICAg IGlmIChzdGF0dXMgJgogICAgICAgICAgICAoUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfCBSeEVy ciB8IFJ4RklGT092ZXIpKQogICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2Vycm9ycysrOwoK ICAgICAgICBpZiAoc3RhdHVzICYgKFBDU1RpbWVvdXQpKQogICAgICAgICAgICAgICAgdHAtPnN0 YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICBpZiAoc3RhdHVzICYgKFJ4VW5kZXJydW4g fCBSeEZJRk9PdmVyKSkKICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysr OwogICAgICAgIGlmIChzdGF0dXMgJiBQQ0lFcnIpIHsKICAgICAgICAgICAgICAgIHUxNiBwY2lf Y21kX3N0YXR1czsKICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkICh0cC0+cGNp X2RldiwgMHgwNiwgJnBjaV9jbWRfc3RhdHVzKTsKCiAgICAgICAgICAgICAgICBwcmludGsgKCI8 Mz4iICIlczogUENJIEJ1cyBlcnJvciAlNC40eC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAg IGRldi0+bmFtZSwgcGNpX2NtZF9zdGF0dXMpOwogICAgICAgIH0KfQoKCgoKc3RhdGljIHZvaWQg cnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7CiAgICAgICAgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaW5zdGFuY2U7 CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAg aW50IGJvZ3VzY250ID0gbWF4X2ludGVycnVwdF93b3JrOwogICAgICAgIHZvaWQgKmlvYWRkciA9 IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgaW50IGFja3N0YXQsIHN0YXR1czsKICAgICAgICBpbnQg bGlua19jaGFuZ2VkID0gMDsKCiAgICAgICAgKHZvaWQpKCZ0cC0+bG9jayk7CgogICAgICAgIGRv IHsKICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop ICgodm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSk7CgoKICAgICAgICAgICAgICAgIGlm IChzdGF0dXMgPT0gMHhGRkZGKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCgoKICAg ICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBSeFVuZGVycnVuKQogICAgICAgICAgICAgICAgICAg ICAgICBsaW5rX2NoYW5nZWQgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQg KikoaW9hZGRyICsgKENTQ1IpKSkpICYgQ1NDUl9MaW5rQ2hhbmdlQml0OwoKCgoKICAgICAgICAg ICAgICAgIGFja3N0YXQgPSBzdGF0dXMgJiB+UnhBY2tCaXRzOwogICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJbnRyU3RhdHVz KSkpID0gKChhY2tzdGF0KSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAg IGlmICgoc3RhdHVzICYKICAgICAgICAgICAgICAgICAgICAgKFBDSUVyciB8IFBDU1RpbWVvdXQg fCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8CiAgICAgICAgICAgICAgICAgICAgICBSeEZJRk9P dmVyIHwgVHhFcnIgfCBUeE9LIHwgUnhFcnIgfCBSeE9LKSkgPT0gMCkKICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgaWYgKG5ldGlmX3J1bm5pbmcgKGRldikg JiYgKHN0YXR1cyAmIFJ4QWNrQml0cykpCiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDgxMzlf cnhfaW50ZXJydXB0IChkZXYsIHRwLCBpb2FkZHIpOwoKCiAgICAgICAgICAgICAgICBpZiAoc3Rh dHVzICYgKFBDSUVyciB8IFBDU1RpbWVvdXQgfCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ4RklGT092ZXIgfCBUeEVyciB8IFJ4RXJyKSkK ICAgICAgICAgICAgICAgICAgICAgICAgcnRsODEzOV93ZWlyZF9pbnRlcnJ1cHQgKGRldiwgdHAs IGlvYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgbGlua19jaGFuZ2VkKTsKCiAgICAgICAgICAgICAgICBpZiAobmV0aWZfcnVubmlu ZyAoZGV2KSAmJiAoc3RhdHVzICYgKFR4T0sgfCBUeEVycikpKQogICAgICAgICAgICAgICAgICAg ICAgICBydGw4MTM5X3R4X2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyKTsKCiAgICAgICAgICAg ICAgICBib2d1c2NudC0tOwogICAgICAgIH0gd2hpbGUgKGJvZ3VzY250ID4gMCk7CgogICAgICAg IGlmIChib2d1c2NudCA8PSAwKSB7CiAgICAgICAgICAgICAgICBwcmludGsgKCI8ND4iICIlczog VG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsICIKICAgICAgICAgICAgICAgICAgICAgICAgIklu dHJTdGF0dXM9MHglNC40eC5cbiIsIGRldi0+bmFtZSwgc3RhdHVzKTsKCgogICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJbnRy U3RhdHVzKSkpID0gKCgweGZmZmYpKSk7CiAgICAgICAgfQoKICAgICAgICBkbyB7IH0gd2hpbGUo MCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK fQoKCnN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewog ICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZv aWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAg dW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKCiAgICAgICAgaWYgKHRwLT50aHJfcGlkID49IDAp IHsKICAgICAgICAgICAgICAgIHJldCA9IGtpbGxfcHJvYyAodHAtPnRocl9waWQsIDE1LCAxKTsK ICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRr ICgiPDM+IiAiJXM6IHVuYWJsZSB0byBzaWduYWwgdGhyZWFkXG4iLCBkZXYtPm5hbWUpOwogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbiAoJnRwLT50aHJfZXhpdGVkKTsKICAgICAgICB9 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAg OyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnkiKTsgKHZvaWQpKCZ0cC0+bG9jayk7IH0gd2hp bGUgKDApOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKiko aW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKDApKSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJNYXNrKSkpID0gKCgwKSkpOwoK CiAgICAgICAgdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKCh1bnNpZ25lZCBsb25nKSAo Kih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkp KSkpOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFJ4TWlzc2VkKSkpID0gKCgwKSkpOwoKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsg X19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1l bW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o IiI6IDogOiJtZW1vcnkiKTsKICAgICAgICBmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CgogICAg ICAgIHJ0bDgxMzlfdHhfY2xlYXIgKHRwKTsKCiAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudCh0 cC0+cGNpX2RldiwgKCg4MTkyIDw8IDIpICsgMTYgKyAyMDQ4KSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRwLT5yeF9yaW5nLCB0cC0+cnhfcmluZ19kbWEpOwogICAgICAgIHBjaV9mcmVl X2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgxNTM2ICogNCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0cC0+dHhfYnVmcywgdHAtPnR4X2J1ZnNfZG1hKTsKICAgICAgICB0cC0+cnhfcmlu ZyA9ICgodm9pZCAqKTApOwogICAgICAgIHRwLT50eF9idWZzID0gKCh2b2lkICopMCk7CgoKICAg ICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2Zn OTM0NikpKSA9ICgoQ2ZnOTM0Nl9VbmxvY2spKSk7CgogICAgICAgIGlmIChydGxfY2hpcF9pbmZv W3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0hsdENsaykKICAgICAgICAgICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChIbHRDbGspKSkgPSAoKCdI JykpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIHJldHVybiAwOwp9CgoK CgoKc3RhdGljIHZvaWQgbmV0ZGV2X2dldF9lc2V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBz dHJ1Y3QgZXRodG9vbF9jbWQgKmVzZXQpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRl ICpucCA9IGRldi0+cHJpdjsKICAgICAgICB2b2lkICppb2FkZHIgPSBucC0+bW1pb19hZGRyOwog ICAgICAgIHUxNiBhZHZlcnQ7CgogICAgICAgIGVzZXQtPnN1cHBvcnRlZCA9ICgxIDw8IDApCiAg ICAgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgMSkKICAgICAgICAgICAgICAgICAgICAgICAg fCAoMSA8PCAyKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IDMpCiAgICAgICAgICAg ICAgICAgICAgICAgIHwgKDEgPDwgNikKICAgICAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCA3 KTsKCiAgICAgICAgZXNldC0+YWR2ZXJ0aXNpbmcgPSAoMSA8PCA3KSB8ICgxIDw8IDYpOwogICAg ICAgIGFkdmVydCA9IG1kaW9fcmVhZCAoZGV2LCBucC0+cGh5c1swXSwgNCk7CiAgICAgICAgaWYg KGFkdmVydCAmIDB4MDAyMCkKICAgICAgICAgICAgICAgIGVzZXQtPmFkdmVydGlzaW5nIHw9ICgx IDw8IDApOwogICAgICAgIGlmIChhZHZlcnQgJiAweDAwNDApCiAgICAgICAgICAgICAgICBlc2V0 LT5hZHZlcnRpc2luZyB8PSAoMSA8PCAxKTsKICAgICAgICBpZiAoYWR2ZXJ0ICYgMHgwMDgwKQog ICAgICAgICAgICAgICAgZXNldC0+YWR2ZXJ0aXNpbmcgfD0gKDEgPDwgMik7CiAgICAgICAgaWYg KGFkdmVydCAmIDB4MDEwMCkKICAgICAgICAgICAgICAgIGVzZXQtPmFkdmVydGlzaW5nIHw9ICgx IDw8IDMpOwoKICAgICAgICBlc2V0LT5zcGVlZCA9ICgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopICgodm9pZCAqKShpb2FkZHIgKyAoTWVkaWFTdGF0dXMpKSkpICYgMHgwOCkgPyAxMCA6IDEw MDsKCgoKICAgICAgICBlc2V0LT5kdXBsZXggPSBucC0+ZnVsbF9kdXBsZXggPyAweDAxIDogMHgw MDsKICAgICAgICBlc2V0LT5wb3J0ID0gMHgwMDsKCiAgICAgICAgZXNldC0+cGh5X2FkZHJlc3Mg PSBucC0+cGh5c1swXTsKICAgICAgICBlc2V0LT50cmFuc2NlaXZlciA9IDB4MDA7CiAgICAgICAg ZXNldC0+YXV0b25lZyA9IChtZGlvX3JlYWQgKGRldiwgbnAtPnBoeXNbMF0sIDApICYgMHgxMDAw KSAhPSAwOwogICAgICAgIGVzZXQtPm1heHR4cGt0ID0gMTsKICAgICAgICBlc2V0LT5tYXhyeHBr dCA9IDE7Cn0KCgoKCgpzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3dvbCAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQp7CiAgICAgICAgc3RydWN0IHJ0 bDgxMzlfcHJpdmF0ZSAqbnAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gbnAt Pm1taW9fYWRkcjsKCiAgICAgICAgaWYgKHJ0bF9jaGlwX2luZm9bbnAtPmNoaXBzZXRdLmZsYWdz ICYgSGFzTFdha2UpIHsKICAgICAgICAgICAgICAgIHU4IGNmZzMgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnMykpKSk7CiAgICAgICAgICAg ICAgICB1OCBjZmc1ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9h ZGRyICsgKENvbmZpZzUpKSkpOwoKICAgICAgICAgICAgICAgIHdvbC0+c3VwcG9ydGVkID0gKDEg PDwgMCkgfCAoMSA8PCA1KQogICAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IDEpIHwgKDEg PDwgMikgfCAoMSA8PCAzKTsKCiAgICAgICAgICAgICAgICB3b2wtPndvbG9wdHMgPSAwOwogICAg ICAgICAgICAgICAgaWYgKGNmZzMgJiBDZmczX0xpbmtVcCkKICAgICAgICAgICAgICAgICAgICAg ICAgd29sLT53b2xvcHRzIHw9ICgxIDw8IDApOwogICAgICAgICAgICAgICAgaWYgKGNmZzMgJiBD ZmczX01hZ2ljKQogICAgICAgICAgICAgICAgICAgICAgICB3b2wtPndvbG9wdHMgfD0gKDEgPDwg NSk7CgoKICAgICAgICAgICAgICAgIGlmIChjZmc1ICYgQ2ZnNV9VV0YpCiAgICAgICAgICAgICAg ICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8PCAxKTsKICAgICAgICAgICAgICAgIGlmIChj Zmc1ICYgQ2ZnNV9NV0YpCiAgICAgICAgICAgICAgICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAo MSA8PCAyKTsKICAgICAgICAgICAgICAgIGlmIChjZmc1ICYgQ2ZnNV9CV0YpCiAgICAgICAgICAg ICAgICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8PCAzKTsKICAgICAgICB9Cn0KCgoKCgpz dGF0aWMgaW50IG5ldGRldl9zZXRfd29sIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCnsK ICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucCA9IGRldi0+cHJpdjsKICAgICAgICB2 b2lkICppb2FkZHIgPSBucC0+bW1pb19hZGRyOwogICAgICAgIHUzMiBzdXBwb3J0OwogICAgICAg IHU4IGNmZzMsIGNmZzU7CgogICAgICAgIHN1cHBvcnQgPSAoKHJ0bF9jaGlwX2luZm9bbnAtPmNo aXBzZXRdLmZsYWdzICYgSGFzTFdha2UpCiAgICAgICAgICAgICAgICAgICA/ICgoMSA8PCAwKSB8 ICgxIDw8IDUpCiAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAo MSA8PCAzKSkKICAgICAgICAgICAgICAgICAgIDogMCk7CiAgICAgICAgaWYgKHdvbC0+d29sb3B0 cyAmIH5zdXBwb3J0KQogICAgICAgICAgICAgICAgcmV0dXJuIC0yMjsKCiAgICAgICAgY2ZnMyA9 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcz KSkpKSAmIH4oQ2ZnM19MaW5rVXAgfCBDZmczX01hZ2ljKTsKICAgICAgICBpZiAod29sLT53b2xv cHRzICYgKDEgPDwgMCkpCiAgICAgICAgICAgICAgICBjZmczIHw9IENmZzNfTGlua1VwOwogICAg ICAgIGlmICh3b2wtPndvbG9wdHMgJiAoMSA8PCA1KSkKICAgICAgICAgICAgICAgIGNmZzMgfD0g Q2ZnM19NYWdpYzsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0Nl9VbmxvY2spKSk7CiAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzMpKSkg PSAoKGNmZzMpKSk7CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQg KikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfTG9jaykpKTsKCiAgICAgICAgY2Zn NSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25m aWc1KSkpKSAmIH4oQ2ZnNV9VV0YgfCBDZmc1X01XRiB8IENmZzVfQldGKTsKCgoKICAgICAgICBp ZiAod29sLT53b2xvcHRzICYgKDEgPDwgMSkpCiAgICAgICAgICAgICAgICBjZmc1IHw9IENmZzVf VVdGOwogICAgICAgIGlmICh3b2wtPndvbG9wdHMgJiAoMSA8PCAyKSkKICAgICAgICAgICAgICAg IGNmZzUgfD0gQ2ZnNV9NV0Y7CiAgICAgICAgaWYgKHdvbC0+d29sb3B0cyAmICgxIDw8IDMpKQog ICAgICAgICAgICAgICAgY2ZnNSB8PSBDZmc1X0JXRjsKICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnNSkpKSA9ICgoY2ZnNSkpKTsK CiAgICAgICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgaW50IG5ldGRldl9ldGh0b29sX2lvY3RsIChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcikKewogICAgICAgIHN0cnVjdCBy dGw4MTM5X3ByaXZhdGUgKm5wID0gZGV2LT5wcml2OwogICAgICAgIHUzMiBldGhjbWQ7CgoKCgog ICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mIChldGhjbWQpKSA/IF9fY29u c3RhbnRfY29weV9mcm9tX3VzZXIoKCZldGhjbWQpLCh1c2VyYWRkciksKHNpemVvZiAoZXRoY21k KSkpIDogX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKCgmZXRoY21kKSwodXNlcmFkZHIpLChzaXpl b2YgKGV0aGNtZCkpKSkpCiAgICAgICAgICAgICAgICByZXR1cm4gLTE0OwoKICAgICAgICBzd2l0 Y2ggKGV0aGNtZCkgewogICAgICAgIGNhc2UgMHgwMDAwMDAwMToKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY21kIGVzZXQgPSB7IDB4MDAw MDAwMDEgfTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVf XygiY2xpIjogOiA6Im1lbW9yeSIpOyAodm9pZCkoJm5wLT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAg ICAgICAgICAgICAgICAgICAgICAgIG5ldGRldl9nZXRfZXNldCAoZGV2LCAmZXNldCk7CiAgICAg ICAgICAgICAgICAgICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRp bGVfXygic3RpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2YgKGVzZXQpKSA/IF9fY29uc3Rh bnRfY29weV90b191c2VyKCh1c2VyYWRkciksKCZlc2V0KSwoc2l6ZW9mIChlc2V0KSkpIDogX19n ZW5lcmljX2NvcHlfdG9fdXNlcigodXNlcmFkZHIpLCgmZXNldCksKHNpemVvZiAoZXNldCkpKSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xNDsKICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICB9CgoKCiAgICAgICAgY2FzZSAw eDAwMDAwMDAzOgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZXRodG9vbF9kcnZpbmZvIGluZm8gPSB7IDB4MDAwMDAwMDMgfTsKICAgICAgICAgICAgICAg ICAgICAgICAgc3RyY3B5IChpbmZvLmRyaXZlciwgIjgxMzl0b28iKTsKICAgICAgICAgICAgICAg ICAgICAgICAgc3RyY3B5IChpbmZvLnZlcnNpb24sICIwLjkuMjAiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgc3RyY3B5IChpbmZvLmJ1c19pbmZvLCBucC0+cGNpX2Rldi0+c2xvdF9uYW1lKTsK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2Yg KGluZm8pKSA/IF9fY29uc3RhbnRfY29weV90b191c2VyKCh1c2VyYWRkciksKCZpbmZvKSwoc2l6 ZW9mIChpbmZvKSkpIDogX19nZW5lcmljX2NvcHlfdG9fdXNlcigodXNlcmFkZHIpLCgmaW5mbyks KHNpemVvZiAoaW5mbykpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xNDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgIGNhc2UgMHgwMDAwMDAwNToKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyB3b2wgPSB7IDB4MDAwMDAwMDUgfTsK ICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjog OiA6Im1lbW9yeSIpOyAodm9pZCkoJm5wLT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIG5ldGRldl9nZXRfd29sIChkZXYsICZ3b2wpOwogICAgICAgICAgICAgICAg ICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6 IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo X19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mICh3b2wpKSA/IF9fY29uc3RhbnRfY29weV90b191 c2VyKCh1c2VyYWRkciksKCZ3b2wpLChzaXplb2YgKHdvbCkpKSA6IF9fZ2VuZXJpY19jb3B5X3Rv X3VzZXIoKHVzZXJhZGRyKSwoJndvbCksKHNpemVvZiAod29sKSkpKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLTE0OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgY2FzZSAweDAwMDAwMDA2OgogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZv IHdvbDsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjOwogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemVvZiAod29sKSkgPyBfX2NvbnN0YW50 X2NvcHlfZnJvbV91c2VyKCgmd29sKSwodXNlcmFkZHIpLChzaXplb2YgKHdvbCkpKSA6IF9fZ2Vu ZXJpY19jb3B5X2Zyb21fdXNlcigoJndvbCksKHVzZXJhZGRyKSwoc2l6ZW9mICh3b2wpKSkpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTQ7CiAgICAgICAgICAgICAg ICAgICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsg KHZvaWQpKCZucC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICBy YyA9IG5ldGRldl9zZXRfd29sIChkZXYsICZ3b2wpOwogICAgICAgICAgICAgICAgICAgICAgICBk byB7IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1v cnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgIH0KCiAgICAgICAgcmV0dXJuIC05NTsKfQoKCnN0YXRpYyBpbnQgbmV0ZGV2X2lvY3Rs IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQp7CiAg ICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgc3Ry dWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSZycS0+ aWZyX2lmcnUuaWZydV9kYXRhOwogICAgICAgIGludCByYyA9IDA7CiAgICAgICAgaW50IHBoeSA9 IHRwLT5waHlzWzBdICYgMHgzZjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgaWYgKGNtZCAhPSAweDg5NDYpIHsKCiAgICAgICAgICAgICAgICBkYXRhLT5waHlfaWQgJj0g MHgxZjsKICAgICAgICAgICAgICAgIGRhdGEtPnJlZ19udW0gJj0gMHgxZjsKICAgICAgICB9Cgog ICAgICAgIHN3aXRjaCAoY21kKSB7CiAgICAgICAgY2FzZSAweDg5NDY6CiAgICAgICAgICAgICAg ICByZXR1cm4gbmV0ZGV2X2V0aHRvb2xfaW9jdGwoZGV2LCAodm9pZCAqKSBycS0+aWZyX2lmcnUu aWZydV9kYXRhKTsKCiAgICAgICAgY2FzZSAweDg5NDc6CiAgICAgICAgY2FzZSAweDg5RjA6CiAg ICAgICAgICAgICAgICBkYXRhLT5waHlfaWQgPSBwaHk7CgoKICAgICAgICBjYXNlIDB4ODk0ODoK ICAgICAgICBjYXNlIDB4ODlGMCArMToKICAgICAgICAgICAgICAgIGRhdGEtPnZhbF9vdXQgPSBt ZGlvX3JlYWQgKGRldiwgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtKTsKICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4ODk0OToKICAgICAgICBjYXNlIDB4ODlGMCArMjoK ICAgICAgICAgICAgICAgIGlmICghY2FwYWJsZSAoMTIpKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHJjID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIGlmIChkYXRhLT5waHlfaWQgPT0gcGh5KSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHUxNiB2YWx1ZSA9IGRhdGEtPnZhbF9pbjsKICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChkYXRhLT5yZWdfbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgMDoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPm1lZGlhbG9jayA9 ICh2YWx1ZSAmIDB4OTAwMCkgPyAwIDogMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAodHAtPm1lZGlhbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRwLT5mdWxsX2R1cGxleCA9ICh2YWx1ZSAmIDB4MDEwMCkgPyAxIDogMDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSA0OiBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgbWRpb193cml0ZShkZXYsIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251 bSwgZGF0YS0+dmFsX2luKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0 OgogICAgICAgICAgICAgICAgcmMgPSAtOTU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICByZXR1cm4gcmM7Cn0KCgpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxMzlf Z2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgx MzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gdHAtPm1t aW9fYWRkcjsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICBpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAgICAgICAgICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmdHAtPmxvY2spOyB9IHdoaWxlICgwKTsK ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9ICgodW5zaWduZWQg bG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhN aXNzZWQpKSkpKTsKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAo KHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpID0gKCgwKSkpOwogICAgICAgICAgICAgICAg ZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBv cGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgcmV0dXJuICZ0cC0+c3RhdHM7 Cn0KCgoKCnN0YXRpYyB1bnNpZ25lZCBjb25zdCBldGhlcm5ldF9wb2x5bm9taWFsID0gMHgwNGMx MWRiN1U7CnN0YXRpYyBpbmxpbmUgdTMyIGV0aGVyX2NyYyAoaW50IGxlbmd0aCwgdW5zaWduZWQg Y2hhciAqZGF0YSkKewogICAgICAgIGludCBjcmMgPSAtMTsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgICAgICAgd2hpbGUgKC0tbGVuZ3RoID49IDApIHsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgY3VycmVudF9vY3RldCA9ICpkYXRhKys7CiAgICAgICAgICAgICAgICBp bnQgYml0OwogICAgICAgICAgICAgICAgZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKywgY3Vy cmVudF9vY3RldCA+Pj0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgY3JjID0gKGNyYyA8PCAx KSBeICgoY3JjIDwgMCkgXiAoY3VycmVudF9vY3RldCAmIDEpID8KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBldGhlcm5ldF9wb2x5bm9taWFsIDogMCk7CiAgICAgICAgfQoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIHJldHVybiBjcmM7 Cn0KCgpzdGF0aWMgdm9pZCBfX3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7 CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAg dm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKICAgICAgICB1MzIgbWNfZmlsdGVyWzJdOwog ICAgICAgIGludCBpLCByeF9tb2RlOwogICAgICAgIHUzMiB0bXA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgICAgICAgaWYgKGRldi0+ZmxhZ3MgJiAweDEw MCkgewoKICAgICAgICAgICAgICAgIHByaW50ayAoIjw1PiIgIiVzOiBQcm9taXNjdW91cyBtb2Rl IGVuYWJsZWQuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwogICAgICAg ICAgICAgICAgcnhfbW9kZSA9CiAgICAgICAgICAgICAgICAgICAgQWNjZXB0QnJvYWRjYXN0IHwg QWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzIHwKICAgICAgICAgICAgICAgICAgICBBY2Nl cHRBbGxQaHlzOwogICAgICAgICAgICAgICAgbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0g MHhmZmZmZmZmZjsKICAgICAgICB9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0 X2ZpbHRlcl9saW1pdCkKICAgICAgICAgICAgICAgICAgIHx8IChkZXYtPmZsYWdzICYgMHgyMDAp KSB7CgogICAgICAgICAgICAgICAgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11 bHRpY2FzdCB8IEFjY2VwdE15UGh5czsKICAgICAgICAgICAgICAgIG1jX2ZpbHRlclsxXSA9IG1j X2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg IHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogICAgICAgICAgICAgICAgcnhfbW9kZSA9IEFj Y2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKICAgICAgICAgICAgICAgIG1jX2ZpbHRlclsx XSA9IG1jX2ZpbHRlclswXSA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBtY2xpc3Qg PSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKICAgICAgICAgICAg ICAgICAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGJpdF9uciA9IGV0aGVyX2NyYyg2LCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsK CiAgICAgICAgICAgICAgICAgICAgICAgIG1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gKChfX3Uz MikoMSA8PCAoYml0X25yICYgMzEpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJ4X21vZGUg fD0gQWNjZXB0TXVsdGljYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAg IHRtcCA9IHJ0bDgxMzlfcnhfY29uZmlnIHwgcnhfbW9kZTsKICAgICAgICBpZiAodHAtPnJ4X2Nv bmZpZyAhPSB0bXApIHsKICAgICAgICAgICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhDb25maWcpKSkgPSAoKHRtcCkpKTsgKCoodm9s YXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhDb25maWcpKSkpOyB9 IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIHRwLT5yeF9jb25maWcgPSB0bXA7CiAgICAgICAg fQogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2Fk ZHIgKyAoTUFSMCArIDApKSkgPSAoKG1jX2ZpbHRlclswXSkpKTsgKCoodm9sYXRpbGUgdW5zaWdu ZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoTUFSMCArIDApKSkpOyB9IHdoaWxlICgwKTsK ICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKE1BUjAgKyA0KSkpID0gKChtY19maWx0ZXJbMV0pKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BUjAgKyA0KSkpKTsgfSB3aGlsZSAoMCk7CgoK ICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnN0YXRpYyB2b2lkIHJ0bDgxMzlfc2V0X3J4 X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwoKICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmdHAtPmxvY2spOyB9IHdoaWxlICgwKTsK ICAgICAgICBfX3NldF9yeF9tb2RlKGRldik7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7 IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJt ZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7Cn0KIyAyNjQ0ICI4MTM5dG9vLmMiCnN0YXRpYyBz dHJ1Y3QgcGNpX2RyaXZlciBydGw4MTM5X3BjaV9kcml2ZXIgPSB7CiAgICAgICAgbmFtZTogIjgx Mzl0b28iLAogICAgICAgIGlkX3RhYmxlOiBydGw4MTM5X3BjaV90YmwsCiAgICAgICAgcHJvYmU6 IHJ0bDgxMzlfaW5pdF9vbmUsCiAgICAgICAgcmVtb3ZlOiBydGw4MTM5X3JlbW92ZV9vbmUsCgoK Cgp9OwoKCnN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRleHQuaW5p dCIpKSkgcnRsODEzOV9pbml0X21vZHVsZSAodm9pZCkKewoKCgoKCgoKICAgICAgICByZXR1cm4g cGNpX21vZHVsZV9pbml0ICgmcnRsODEzOV9wY2lfZHJpdmVyKTsKfQoKCnN0YXRpYyB2b2lkIF9f YXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fKCIudGV4dC5leGl0IikpKSBydGw4MTM5 X2NsZWFudXBfbW9kdWxlICh2b2lkKQp7CiAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgm cnRsODEzOV9wY2lfZHJpdmVyKTsKfQoKCnN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfcnRs ODEzOV9pbml0X21vZHVsZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkLF9fc2VjdGlvbl9fICgiLmlu aXRjYWxsLmluaXQiKSkpID0gcnRsODEzOV9pbml0X21vZHVsZTs7CnN0YXRpYyBleGl0Y2FsbF90 IF9fZXhpdGNhbGxfcnRsODEzOV9jbGVhbnVwX21vZHVsZSBfX2F0dHJpYnV0ZV9fICgodW51c2Vk LF9fc2VjdGlvbl9fICgiLmV4aXRjYWxsLmV4aXQiKSkpID0gcnRsODEzOV9jbGVhbnVwX21vZHVs ZTs7Cg==