From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30688 invoked by alias); 10 Jul 2002 15:06:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 30669 invoked by uid 71); 10 Jul 2002 15:06:00 -0000 Resent-Date: 10 Jul 2002 15:06:00 -0000 Resent-Message-ID: <20020710150600.30667.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, twisti@complang.tuwien.ac.at Received: (qmail 22471 invoked by uid 61); 10 Jul 2002 14:57:28 -0000 Message-Id: <20020710145728.22470.qmail@sources.redhat.com> Date: Wed, 10 Jul 2002 08:06:00 -0000 From: twisti@complang.tuwien.ac.at Reply-To: twisti@complang.tuwien.ac.at To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/7262: gcc-3.1 on x86 linux gets ice in extract_constrain_insn_cached X-SW-Source: 2002-07/txt/msg00296.txt.bz2 List-Id: >Number: 7262 >Category: c >Synopsis: gcc-3.1 on x86 linux gets ice in extract_constrain_insn_cached >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed Jul 10 08:06:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: TWISTI >Release: gcc version 3.1 and gcc version 3.1.1 20020710 (prerelease) >Organization: >Environment: i686-pc-linux-gnu, with gnu as/ld >Description: gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I../i386 -O2 -g3 -c heap.old.c heap.old.c: In function `lowest': heap.old.c:137: warning: left shift count >= width of type heap.old.c:142: warning: right shift count >= width of type heap.old.c:143: warning: right shift count >= width of type heap.old.c:147: warning: right shift count >= width of type heap.old.c:148: warning: right shift count >= width of type heap.old.c:155: warning: right shift count >= width of type heap.old.c:156: warning: right shift count >= width of type heap.old.c:160: warning: right shift count >= width of type heap.old.c:161: warning: right shift count >= width of type heap.old.c:177: insn does not satisfy its constraints: (insn:QI 13 12 14 (parallel[ (set (reg:CCZ 17 flags) (compare:CCZ (ashift:SI (reg/v:SI 59) (const_int 32 [0x20])) (const_int 0 [0x0]))) (set (reg/v:SI 60) (ashift:SI (reg/v:SI 59) (const_int 32 [0x20]))) ] ) 410 {*ashlsi3_cmp} (insn_list 4 (nil)) (nil)) heap.old.c:177: Internal compiler error in extract_constrain_insn_cached, at recog.c:2047 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="heap.old.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="heap.old.i" IyAxICJoZWFwLm9sZC5jIgojIDEgIjxidWlsdC1pbj4iCiNkZWZpbmUgX19WRVJTSU9OX18gIjMu MSIKI2RlZmluZSBfX1VTRVJfTEFCRUxfUFJFRklYX18gCiNkZWZpbmUgX19SRUdJU1RFUl9QUkVG SVhfXyAKI2RlZmluZSBfX0hBVkVfQlVJTFRJTl9TRVRKTVBfXyAxCiNkZWZpbmUgX19TSVpFX1RZ UEVfXyB1bnNpZ25lZCBpbnQKI2RlZmluZSBfX1BUUkRJRkZfVFlQRV9fIGludAojZGVmaW5lIF9f V0NIQVJfVFlQRV9fIGxvbmcgaW50CiNkZWZpbmUgX19XSU5UX1RZUEVfXyB1bnNpZ25lZCBpbnQK I2RlZmluZSBfX1NURENfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19HTlVDX18g MwojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5lIF9fR05VQ19NSU5PUl9fIDEKIyAxICI8Y29t bWFuZCBsaW5lPiIKI2RlZmluZSBfX0dOVUNfUEFUQ0hMRVZFTF9fIDAKIyAxICI8Y29tbWFuZCBs aW5lPiIKI2RlZmluZSBfX0VMRl9fIDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSB1bml4 IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX2dudV9saW51eF9fIDEKIyAxICI8Y29t bWFuZCBsaW5lPiIKI2RlZmluZSBsaW51eCAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUg X19FTEZfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX191bml4X18gMQojIDEgIjxj b21tYW5kIGxpbmU+IgojZGVmaW5lIF9fZ251X2xpbnV4X18gMQojIDEgIjxjb21tYW5kIGxpbmU+ IgojZGVmaW5lIF9fbGludXhfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX191bml4 IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX2xpbnV4IDEKIyAxICI8Y29tbWFuZCBs aW5lPiIKI2RlZmluZSBfX09QVElNSVpFX18gMQojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5l IF9fU1REQ19IT1NURURfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgaTM4NiAxCiMg MSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19pMzg2IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIK I2RlZmluZSBfX2kzODZfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX190dW5lX2kz ODZfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgSEFWRV9DT05GSUdfSCAxCiMgMSAi aGVhcC5vbGQuYyIKIyAyMiAiaGVhcC5vbGQuYyIKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi IDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKI2RlZmluZSBfQVNTRVJUX0ggMQoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDMKI2RlZmluZSBfRkVBVFVSRVNfSCAxCiMgMTA5ICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMwojZGVmaW5lIF9fS0VSTkVMX1NUUklDVF9OQU1FUyAKCgoKI2RlZmluZSBfX1VTRV9B TlNJIDEKIyAxNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiNkZWZpbmUgX0JTRF9TT1VS Q0UgMQojZGVmaW5lIF9TVklEX1NPVVJDRSAxCiMgMTY3ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMwojZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMQoKCgojZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAx OTk1MDZMCgoKCgojZGVmaW5lIF9fVVNFX1BPU0lYIDEKCgoKI2RlZmluZSBfX1VTRV9QT1NJWDIg MQoKCgojZGVmaW5lIF9fVVNFX1BPU0lYMTk5MzA5IDEKCgoKI2RlZmluZSBfX1VTRV9QT1NJWDE5 OTUwNiAxCiMgMjIzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojZGVmaW5lIF9fVVNFX01J U0MgMQoKCgojZGVmaW5lIF9fVVNFX0JTRCAxCgoKCiNkZWZpbmUgX19VU0VfU1ZJRCAxCiMgMjQz ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojZGVmaW5lIF9fU1REQ19JRUNfNTU5X18gMQoj ZGVmaW5lIF9fU1REQ19JRUNfNTU5X0NPTVBMRVhfXyAxCgoKI2RlZmluZSBfX1NURENfSVNPXzEw NjQ2X18gMjAwMDA5TAojIDI1NiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKI2RlZmluZSBf X0dOVV9MSUJSQVJZX18gNgoKCgojZGVmaW5lIF9fR0xJQkNfXyAyCiNkZWZpbmUgX19HTElCQ19N SU5PUl9fIDIKIyAyNzEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiNkZWZpbmUgX19HTlVD X1BSRVJFUShtYWosbWluKSAoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgo bWFqKSA8PCAxNikgKyAobWluKSkKCgoKCgojZGVmaW5lIF9fR0xJQkNfUFJFUkVRKG1haixtaW4p ICgoX19HTElCQ19fIDw8IDE2KSArIF9fR0xJQkNfTUlOT1JfXyA+PSAoKG1haikgPDwgMTYpICsg KG1pbikpCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDIwICIvdXNy L2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKI2RlZmluZSBfU1lTX0NERUZTX0ggMQojIDQ2ICIvdXNy L2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKI2RlZmluZSBfX1RIUk9XIAoKI2RlZmluZSBfX1AoYXJn cykgYXJncyBfX1RIUk9XCgoKI2RlZmluZSBfX1BNVChhcmdzKSBhcmdzCiMgNzAgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fQ09OQ0FUKHgseSkgeCAjIyB5CiNkZWZpbmUg X19TVFJJTkcoeCkgI3gKCgojZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCiNkZWZpbmUgX19sb25nX2Rv dWJsZV90IGxvbmcgZG91YmxlCgoKCgoKCgojZGVmaW5lIF9fQkVHSU5fREVDTFMgCiNkZWZpbmUg X19FTkRfREVDTFMgCgoKCgoKI2RlZmluZSBfX2JvdW5kZWQgCiNkZWZpbmUgX191bmJvdW5kZWQg CiNkZWZpbmUgX19wdHJ2YWx1ZSAKCgoKCgoKI2RlZmluZSBfX2ZsZXhhcnIgW10KIyAxMjYgIi91 c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fUkVESVJFQ1QobmFtZSxwcm90byxh bGlhcykgbmFtZSBwcm90byBfX2FzbV9fIChfX0FTTU5BTUUgKCNhbGlhcykpCiNkZWZpbmUgX19B U01OQU1FKGNuYW1lKSBfX0FTTU5BTUUyIChfX1VTRVJfTEFCRUxfUFJFRklYX18sIGNuYW1lKQoj ZGVmaW5lIF9fQVNNTkFNRTIocHJlZml4LGNuYW1lKSBfX1NUUklORyAocHJlZml4KSBjbmFtZQoj IDE0OSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19hdHRyaWJ1dGVfbWFs bG9jX18gX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKQojIDE1OCAiL3Vzci9pbmNsdWRlL3N5 cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpCiMgMTY3ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKI2RlZmluZSBfX2F0 dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXyAoKF9fdXNlZF9fKSkKIyAxNzkgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyh4KSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKHgpKSkKIyAxODkgIi91c3IvaW5jbHVkZS9z eXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fYXR0cmlidXRlX2Zvcm1hdF9zdHJmbW9uX18oYSxiKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zdHJmbW9uX18sIGEsIGIpKSkKIyAyMTIgIi91 c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fcmVzdHJpY3RfYXJyIF9fcmVzdHJp Y3QKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyOTggIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCiNkZWZpbmUgX19VU0VfRVhURVJOX0lOTElORVMgMQojIDMxMiAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEg MwoKCgoKI2RlZmluZSBfX3N0dWJfX19rZXJuZWxfY29zbCAKI2RlZmluZSBfX3N0dWJfX19rZXJu ZWxfc2lubCAKI2RlZmluZSBfX3N0dWJfX19rZXJuZWxfdGFubCAKI2RlZmluZSBfX3N0dWJfY2hm bGFncyAKI2RlZmluZSBfX3N0dWJfZmF0dGFjaCAKI2RlZmluZSBfX3N0dWJfZmNoZmxhZ3MgCiNk ZWZpbmUgX19zdHViX2ZkZXRhY2ggCiNkZWZpbmUgX19zdHViX2ZleGVjdmUgCiNkZWZpbmUgX19z dHViX2d0dHkgCiNkZWZpbmUgX19zdHViX3Bvc2l4X2ZhZHZpc2UgCiNkZWZpbmUgX19zdHViX3Bv c2l4X2ZhZHZpc2U2NCAKI2RlZmluZSBfX3N0dWJfcmV2b2tlIAojZGVmaW5lIF9fc3R1Yl9zZXRs b2dpbiAKI2RlZmluZSBfX3N0dWJfc2lncmV0dXJuIAojZGVmaW5lIF9fc3R1Yl9zc3RrIAojZGVm aW5lIF9fc3R1Yl9zdHR5IAojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDM3 ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwoKCgoKI2RlZmluZSBfX0FTU0VSVF9WT0lEX0NB U1QgKHZvaWQpCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgpleHRlcm4gdm9pZCBf X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2Nv bnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBj aGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgoKI2RlZmluZSBhc3NlcnQoZXhwcikgKF9fQVNTRVJUX1ZPSURfQ0FTVCAoKGV4cHIp ID8gMCA6IChfX2Fzc2VydF9mYWlsIChfX1NUUklORyhleHByKSwgX19GSUxFX18sIF9fTElORV9f LCBfX0FTU0VSVF9GVU5DVElPTiksIDApKSkKIyAxMDUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg MwojZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OIF9fUFJFVFRZX0ZVTkNUSU9OX18KIyAyMyAiaGVh cC5vbGQuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAxIDMKIyAyMSAiL3Vzci9p bmNsdWRlL3N5cy9tbWFuLmgiIDMKI2RlZmluZSBfU1lTX01NQU5fSCAxCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MwojZGVmaW5lIF9CSVRTX1RZUEVTX0ggMQoKCgojZGVmaW5lIF9fbmVlZF9zaXplX3QgCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx ODIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoj ZGVmaW5lIF9fc2l6ZV90X18gCiNkZWZpbmUgX19TSVpFX1RfXyAKI2RlZmluZSBfU0laRV9UIAoj ZGVmaW5lIF9TWVNfU0laRV9UX0ggCiNkZWZpbmUgX1RfU0laRV8gCiNkZWZpbmUgX1RfU0laRSAK I2RlZmluZSBfX1NJWkVfVCAKI2RlZmluZSBfU0laRV9UXyAKI2RlZmluZSBfQlNEX1NJWkVfVF8g CiNkZWZpbmUgX1NJWkVfVF9ERUZJTkVEXyAKI2RlZmluZSBfU0laRV9UX0RFRklORUQgCiNkZWZp bmUgX19faW50X3NpemVfdF9oIAojZGVmaW5lIF9HQ0NfU0laRV9UIAojZGVmaW5lIF9TSVpFVF8g CiNkZWZpbmUgX19zaXplX3QgCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjIx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3Vu ZGVmIF9fbmVlZF9zaXplX3QKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFk X3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hh ciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWdu ZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50 MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBf X2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f dWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFk X3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dp ZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsK dHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBl ZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBf X3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBf X3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5 cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVm IHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNf dDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tf dDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoK CiNkZWZpbmUgX19GRF9TRVRTSVpFIDEwMjQKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK IyAyMCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKI2RlZmluZSBfQklUU19Q VEhSRUFEVFlQRVNfSCAxCgojZGVmaW5lIF9fbmVlZF9zY2hlZHBhcmFtIAojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAz CiNkZWZpbmUgX19kZWZpbmVkX3NjaGVkcGFyYW0gMQoKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7 CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojdW5kZWYgX19uZWVkX3NjaGVkcGFyYW0K IyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKdHlwZWRlZiBpbnQg X19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQg X19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0 cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwojZGVmaW5lIF9QVEhS RUFEX0RFU0NSX0RFRklORUQgCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsK ICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hl ZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3Bl OwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9f c3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRo cmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2ln bmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jl c2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGlu dCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVh ZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJl YWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MiAiL3Vz ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAyNSAi L3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDIgMwojZGVmaW5lIF9fbmVlZF9zaXplX3QgCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAy MjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoj dW5kZWYgX19uZWVkX3NpemVfdAojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMiAzCgoK CnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKI2RlZmluZSBfX29mZl90X2RlZmluZWQgCgoKCnR5 cGVkZWYgX19tb2RlX3QgbW9kZV90OwojZGVmaW5lIF9fbW9kZV90X2RlZmluZWQgCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9tbWFu LmgiIDMKI2RlZmluZSBQUk9UX1JFQUQgMHgxCiNkZWZpbmUgUFJPVF9XUklURSAweDIKI2RlZmlu ZSBQUk9UX0VYRUMgMHg0CiNkZWZpbmUgUFJPVF9OT05FIDB4MAoKCiNkZWZpbmUgTUFQX1NIQVJF RCAweDAxCiNkZWZpbmUgTUFQX1BSSVZBVEUgMHgwMgoKI2RlZmluZSBNQVBfVFlQRSAweDBmCgoK CiNkZWZpbmUgTUFQX0ZJWEVEIDB4MTAKCiNkZWZpbmUgTUFQX0ZJTEUgMAojZGVmaW5lIE1BUF9B Tk9OWU1PVVMgMHgyMAojZGVmaW5lIE1BUF9BTk9OIE1BUF9BTk9OWU1PVVMKCgoKCiNkZWZpbmUg TUFQX0dST1dTRE9XTiAweDAxMDAKI2RlZmluZSBNQVBfREVOWVdSSVRFIDB4MDgwMAojZGVmaW5l IE1BUF9FWEVDVVRBQkxFIDB4MTAwMAojZGVmaW5lIE1BUF9MT0NLRUQgMHgyMDAwCiNkZWZpbmUg TUFQX05PUkVTRVJWRSAweDQwMDAKCgoKI2RlZmluZSBNU19BU1lOQyAxCiNkZWZpbmUgTVNfU1lO QyA0CiNkZWZpbmUgTVNfSU5WQUxJREFURSAyCgoKI2RlZmluZSBNQ0xfQ1VSUkVOVCAxCiNkZWZp bmUgTUNMX0ZVVFVSRSAyCiMgNzkgIi91c3IvaW5jbHVkZS9iaXRzL21tYW4uaCIgMwojZGVmaW5l IE1BRFZfTk9STUFMIDAKI2RlZmluZSBNQURWX1JBTkRPTSAxCiNkZWZpbmUgTUFEVl9TRVFVRU5U SUFMIDIKI2RlZmluZSBNQURWX1dJTExORUVEIDMKI2RlZmluZSBNQURWX0RPTlRORUVEIDQKIyA0 MyAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDIgMwoKCiNkZWZpbmUgTUFQX0ZBSUxFRCAoKHZv aWQgKikgLTEpCgoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKZXh0ZXJuIHZvaWQg Km1tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19wcm90LAogICAgICAgICAg ICAgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0KSA7CiMgNzcg Ii91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAzCmV4dGVybiBpbnQgbXVubWFwICh2b2lkICpfX2Fk ZHIsIHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIGludCBtcHJvdGVjdCAodm9pZCAqX19hZGRy LCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QpIDsKCgoKCmV4dGVybiBpbnQgbXN5bmMgKHZvaWQg Kl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19mbGFncykgOwoKCgoKZXh0ZXJuIGludCBtYWR2 aXNlICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fYWR2aWNlKSA7CiMgMTAxICIv dXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwpleHRlcm4gaW50IG1sb2NrIChfX2NvbnN0IHZvaWQg Kl9fYWRkciwgc2l6ZV90IF9fbGVuKSA7CgoKZXh0ZXJuIGludCBtdW5sb2NrIChfX2NvbnN0IHZv aWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSA7CgoKCgpleHRlcm4gaW50IG1sb2NrYWxsIChpbnQg X19mbGFncykgOwoKCgpleHRlcm4gaW50IG11bmxvY2thbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4g dm9pZCAqbXJlbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX29sZF9sZW4sIHNpemVfdCBfX25l d19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21heV9tb3ZlKSA7CgoKCgoKCmV4dGVy biBpbnQgbWluY29yZSAodm9pZCAqX19zdGFydCwgc2l6ZV90IF9fbGVuLCB1bnNpZ25lZCBjaGFy ICpfX3ZlYyk7CgoKCgpleHRlcm4gaW50IHNobV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg aW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpOwoKCmV4dGVybiBpbnQgc2htX3VubGluayAoX19j b25zdCBjaGFyICpfX25hbWUpOwoKCiMgMjQgImhlYXAub2xkLmMiIDIKIyAxICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKI2RlZmluZSBf VU5JU1REX0ggMQoKCgoKCgoKCgoKI2RlZmluZSBfUE9TSVhfVkVSU0lPTiAxOTk1MDZMCgoKCgoK I2RlZmluZSBfUE9TSVgyX0NfVkVSU0lPTiAxOTkyMDlMCgoKI2RlZmluZSBfUE9TSVgyX1ZFUlNJ T04gMTk5MjA5TAoKCgojZGVmaW5lIF9QT1NJWDJfQ19CSU5EIDEKCgoKI2RlZmluZSBfUE9TSVgy X0NfREVWIDEKCgoKI2RlZmluZSBfUE9TSVgyX1NXX0RFViAxCgoKCiNkZWZpbmUgX1BPU0lYMl9M T0NBTEVERUYgMQoKCgoKCiNkZWZpbmUgX1hPUEVOX1ZFUlNJT04gNAoKCgojZGVmaW5lIF9YT1BF Tl9YQ1VfVkVSU0lPTiA0CgoKI2RlZmluZSBfWE9QRU5fWFBHMiAxCiNkZWZpbmUgX1hPUEVOX1hQ RzMgMQojZGVmaW5lIF9YT1BFTl9YUEc0IDEKCgojZGVmaW5lIF9YT1BFTl9VTklYIDEKCgojZGVm aW5lIF9YT1BFTl9DUllQVCAxCgoKCiNkZWZpbmUgX1hPUEVOX0VOSF9JMThOIDEKCgojZGVmaW5l IF9YT1BFTl9MRUdBQ1kgMQojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDIxICIvdXNyL2luY2x1ZGUvYml0cy9w b3NpeF9vcHQuaCIgMwojZGVmaW5lIF9QT1NJWF9PUFRfSCAxCgoKI2RlZmluZSBfUE9TSVhfSk9C X0NPTlRST0wgMQoKCiNkZWZpbmUgX1BPU0lYX1NBVkVEX0lEUyAxCgoKI2RlZmluZSBfUE9TSVhf UFJJT1JJVFlfU0NIRURVTElORyAxCgoKI2RlZmluZSBfUE9TSVhfU1lOQ0hST05JWkVEX0lPIDEK CgojZGVmaW5lIF9QT1NJWF9GU1lOQyAxCgoKI2RlZmluZSBfUE9TSVhfTUFQUEVEX0ZJTEVTIDEK CgojZGVmaW5lIF9QT1NJWF9NRU1MT0NLIDEKCgojZGVmaW5lIF9QT1NJWF9NRU1MT0NLX1JBTkdF IDEKCgojZGVmaW5lIF9QT1NJWF9NRU1PUllfUFJPVEVDVElPTiAxCgoKI2RlZmluZSBfUE9TSVhf UE9MTCAxCgoKI2RlZmluZSBfUE9TSVhfU0VMRUNUIDEKCgojZGVmaW5lIF9QT1NJWF9DSE9XTl9S RVNUUklDVEVEIDEKCgoKI2RlZmluZSBfUE9TSVhfVkRJU0FCTEUgJ1wwJwoKCiNkZWZpbmUgX1BP U0lYX05PX1RSVU5DIDEKCgojZGVmaW5lIF9YT1BFTl9SRUFMVElNRSAxCgoKI2RlZmluZSBfWE9Q RU5fUkVBTFRJTUVfVEhSRUFEUyAxCgoKI2RlZmluZSBfWE9QRU5fU0hNIDEKCgojZGVmaW5lIF9Q T1NJWF9USFJFQURTIDEKCgojZGVmaW5lIF9QT1NJWF9SRUVOVFJBTlRfRlVOQ1RJT05TIDEKI2Rl ZmluZSBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TIDEKCgojZGVmaW5lIF9QT1NJWF9USFJF QURfUFJJT1JJVFlfU0NIRURVTElORyAxCgoKI2RlZmluZSBfUE9TSVhfVEhSRUFEX0FUVFJfU1RB Q0tTSVpFIDEKCgojZGVmaW5lIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS0FERFIgMQoKCiNkZWZp bmUgX1BPU0lYX1NFTUFQSE9SRVMgMQoKCiNkZWZpbmUgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMg MQoKCiNkZWZpbmUgX1BPU0lYX0FTWU5DSFJPTk9VU19JTyAxCiNkZWZpbmUgX1BPU0lYX0FTWU5D X0lPIDEKCiNkZWZpbmUgX0xGU19BU1lOQ0hST05PVVNfSU8gMQoKCiNkZWZpbmUgX0xGUzY0X0FT WU5DSFJPTk9VU19JTyAxCgoKI2RlZmluZSBfTEZTX0xBUkdFRklMRSAxCiNkZWZpbmUgX0xGUzY0 X0xBUkdFRklMRSAxCiNkZWZpbmUgX0xGUzY0X1NURElPIDEKCgojZGVmaW5lIF9QT1NJWF9TSEFS RURfTUVNT1JZX09CSkVDVFMgMQoKCiNkZWZpbmUgX1BPU0lYX0NQVVRJTUUgMjAwOTEyTAoKCiNk ZWZpbmUgX1BPU0lYX1RIUkVBRF9DUFVUSU1FIDIwMDkxMkwKCgojZGVmaW5lIF9QT1NJWF9SRUdF WFAgMQoKCiNkZWZpbmUgX1BPU0lYX1JFQURFUl9XUklURVJfTE9DS1MgMjAwOTEyTAoKCiNkZWZp bmUgX1BPU0lYX1NIRUxMIDEKCgojZGVmaW5lIF9QT1NJWF9USU1FT1VUUyAyMDA5MTJMCgoKI2Rl ZmluZSBfUE9TSVhfU1BJTl9MT0NLUyAyMDA5MTJMCgoKI2RlZmluZSBfUE9TSVhfU1BBV04gMjAw OTEyTAoKCiNkZWZpbmUgX1BPU0lYX1RJTUVSUyAxCgoKI2RlZmluZSBfUE9TSVhfQkFSUklFUlMg MjAwOTEyTAojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgoKCiNkZWZpbmUg U1RESU5fRklMRU5PIDAKI2RlZmluZSBTVERPVVRfRklMRU5PIDEKI2RlZmluZSBTVERFUlJfRklM RU5PIDIKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CiNkZWZpbmUgX19zc2l6ZV90 X2RlZmluZWQgCgoKI2RlZmluZSBfX25lZWRfc2l6ZV90IAojZGVmaW5lIF9fbmVlZF9OVUxMIAoj IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMjIxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgi IDMKI3VuZGVmIF9fbmVlZF9zaXplX3QKIyAzNjkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51 eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwojZGVmaW5lIE5VTEwgKCh2b2lkICopMCkKCgoKCgoj dW5kZWYgX19uZWVkX05VTEwKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQw ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90Owoj ZGVmaW5lIF9faW50cHRyX3RfZGVmaW5lZCAKCgoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNvY2ts ZW5fdDsKI2RlZmluZSBfX3NvY2tsZW5fdF9kZWZpbmVkIAoKCgoKCiNkZWZpbmUgUl9PSyA0CiNk ZWZpbmUgV19PSyAyCiNkZWZpbmUgWF9PSyAxCiNkZWZpbmUgRl9PSyAwCgoKZXh0ZXJuIGludCBh Y2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CiMgMjcxICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKI2RlZmluZSBTRUVLX1NFVCAwCiNkZWZpbmUgU0VFS19DVVIgMQoj ZGVmaW5lIFNFRUtfRU5EIDIKCgoKCiNkZWZpbmUgTF9TRVQgU0VFS19TRVQKI2RlZmluZSBMX0lO Q1IgU0VFS19DVVIKI2RlZmluZSBMX1hUTkQgU0VFS19FTkQKIyAyOTAgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZz ZXQsIGludCBfX3doZW5jZSkgOwojIDMwNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy biBpbnQgY2xvc2UgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2Zk LCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUg KGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKSA7CiMgMzUzICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSA7 CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFy bSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwojIDM3MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsK CgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBf X3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICA7CgoKCmV4dGVybiBpbnQgdXNsZWVwIChfX3Vz ZWNvbmRzX3QgX191c2Vjb25kcykgOwoKCgoKCmV4dGVybiBpbnQgcGF1c2UgKHZvaWQpIDsKCgoK ZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwg X19naWRfdCBfX2dyb3VwKQogICAgIDsKCgoKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2ZkLCBf X3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgOwoKCgoKZXh0ZXJuIGludCBsY2hvd24g KF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkK ICAgICA7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpl eHRlcm4gaW50IGZjaGRpciAoaW50IF9fZmQpIDsKIyA0MjMgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgOwoj IDQzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAq X19idWYpIDsKCgoKCmV4dGVybiBpbnQgZHVwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVw MiAoaW50IF9fZmQsIGludCBfX2ZkMikgOwoKCmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKCgoK CgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0 IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBfX2VudnBbXSkgOwoj IDQ2NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCmV4dGVybiBpbnQgZXhl Y2xlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoK CmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9f YXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBj aGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCgpleHRlcm4gaW50IGV4ZWNscCAoX19jb25zdCBj aGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgoKZXh0ZXJuIGludCBu aWNlIChpbnQgX19pbmMpIDsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2NvbmZuYW1lLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVu dW0KICB7CiAgICBfUENfTElOS19NQVgsCiNkZWZpbmUgX1BDX0xJTktfTUFYIF9QQ19MSU5LX01B WAogICAgX1BDX01BWF9DQU5PTiwKI2RlZmluZSBfUENfTUFYX0NBTk9OIF9QQ19NQVhfQ0FOT04K ICAgIF9QQ19NQVhfSU5QVVQsCiNkZWZpbmUgX1BDX01BWF9JTlBVVCBfUENfTUFYX0lOUFVUCiAg ICBfUENfTkFNRV9NQVgsCiNkZWZpbmUgX1BDX05BTUVfTUFYIF9QQ19OQU1FX01BWAogICAgX1BD X1BBVEhfTUFYLAojZGVmaW5lIF9QQ19QQVRIX01BWCBfUENfUEFUSF9NQVgKICAgIF9QQ19QSVBF X0JVRiwKI2RlZmluZSBfUENfUElQRV9CVUYgX1BDX1BJUEVfQlVGCiAgICBfUENfQ0hPV05fUkVT VFJJQ1RFRCwKI2RlZmluZSBfUENfQ0hPV05fUkVTVFJJQ1RFRCBfUENfQ0hPV05fUkVTVFJJQ1RF RAogICAgX1BDX05PX1RSVU5DLAojZGVmaW5lIF9QQ19OT19UUlVOQyBfUENfTk9fVFJVTkMKICAg IF9QQ19WRElTQUJMRSwKI2RlZmluZSBfUENfVkRJU0FCTEUgX1BDX1ZESVNBQkxFCiAgICBfUENf U1lOQ19JTywKI2RlZmluZSBfUENfU1lOQ19JTyBfUENfU1lOQ19JTwogICAgX1BDX0FTWU5DX0lP LAojZGVmaW5lIF9QQ19BU1lOQ19JTyBfUENfQVNZTkNfSU8KICAgIF9QQ19QUklPX0lPLAojZGVm aW5lIF9QQ19QUklPX0lPIF9QQ19QUklPX0lPCiAgICBfUENfU09DS19NQVhCVUYsCiNkZWZpbmUg X1BDX1NPQ0tfTUFYQlVGIF9QQ19TT0NLX01BWEJVRgogICAgX1BDX0ZJTEVTSVpFQklUUywKI2Rl ZmluZSBfUENfRklMRVNJWkVCSVRTIF9QQ19GSUxFU0laRUJJVFMKICAgIF9QQ19SRUNfSU5DUl9Y RkVSX1NJWkUsCiNkZWZpbmUgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSBfUENfUkVDX0lOQ1JfWEZF Ul9TSVpFCiAgICBfUENfUkVDX01BWF9YRkVSX1NJWkUsCiNkZWZpbmUgX1BDX1JFQ19NQVhfWEZF Ul9TSVpFIF9QQ19SRUNfTUFYX1hGRVJfU0laRQogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoj ZGVmaW5lIF9QQ19SRUNfTUlOX1hGRVJfU0laRSBfUENfUkVDX01JTl9YRkVSX1NJWkUKICAgIF9Q Q19SRUNfWEZFUl9BTElHTiwKI2RlZmluZSBfUENfUkVDX1hGRVJfQUxJR04gX1BDX1JFQ19YRkVS X0FMSUdOCiAgICBfUENfQUxMT0NfU0laRV9NSU4sCiNkZWZpbmUgX1BDX0FMTE9DX1NJWkVfTUlO IF9QQ19BTExPQ19TSVpFX01JTgogICAgX1BDX1NZTUxJTktfTUFYCiNkZWZpbmUgX1BDX1NZTUxJ TktfTUFYIF9QQ19TWU1MSU5LX01BWAogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdfTUFYLAoj ZGVmaW5lIF9TQ19BUkdfTUFYIF9TQ19BUkdfTUFYCiAgICBfU0NfQ0hJTERfTUFYLAojZGVmaW5l IF9TQ19DSElMRF9NQVggX1NDX0NISUxEX01BWAogICAgX1NDX0NMS19UQ0ssCiNkZWZpbmUgX1ND X0NMS19UQ0sgX1NDX0NMS19UQ0sKICAgIF9TQ19OR1JPVVBTX01BWCwKI2RlZmluZSBfU0NfTkdS T1VQU19NQVggX1NDX05HUk9VUFNfTUFYCiAgICBfU0NfT1BFTl9NQVgsCiNkZWZpbmUgX1NDX09Q RU5fTUFYIF9TQ19PUEVOX01BWAogICAgX1NDX1NUUkVBTV9NQVgsCiNkZWZpbmUgX1NDX1NUUkVB TV9NQVggX1NDX1NUUkVBTV9NQVgKICAgIF9TQ19UWk5BTUVfTUFYLAojZGVmaW5lIF9TQ19UWk5B TUVfTUFYIF9TQ19UWk5BTUVfTUFYCiAgICBfU0NfSk9CX0NPTlRST0wsCiNkZWZpbmUgX1NDX0pP Ql9DT05UUk9MIF9TQ19KT0JfQ09OVFJPTAogICAgX1NDX1NBVkVEX0lEUywKI2RlZmluZSBfU0Nf U0FWRURfSURTIF9TQ19TQVZFRF9JRFMKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAojZGVmaW5l IF9TQ19SRUFMVElNRV9TSUdOQUxTIF9TQ19SRUFMVElNRV9TSUdOQUxTCiAgICBfU0NfUFJJT1JJ VFlfU0NIRURVTElORywKI2RlZmluZSBfU0NfUFJJT1JJVFlfU0NIRURVTElORyBfU0NfUFJJT1JJ VFlfU0NIRURVTElORwogICAgX1NDX1RJTUVSUywKI2RlZmluZSBfU0NfVElNRVJTIF9TQ19USU1F UlMKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCiNkZWZpbmUgX1NDX0FTWU5DSFJPTk9VU19JTyBf U0NfQVNZTkNIUk9OT1VTX0lPCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCiNkZWZpbmUgX1NDX1BS SU9SSVRJWkVEX0lPIF9TQ19QUklPUklUSVpFRF9JTwogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywK I2RlZmluZSBfU0NfU1lOQ0hST05JWkVEX0lPIF9TQ19TWU5DSFJPTklaRURfSU8KICAgIF9TQ19G U1lOQywKI2RlZmluZSBfU0NfRlNZTkMgX1NDX0ZTWU5DCiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoj ZGVmaW5lIF9TQ19NQVBQRURfRklMRVMgX1NDX01BUFBFRF9GSUxFUwogICAgX1NDX01FTUxPQ0ss CiNkZWZpbmUgX1NDX01FTUxPQ0sgX1NDX01FTUxPQ0sKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoj ZGVmaW5lIF9TQ19NRU1MT0NLX1JBTkdFIF9TQ19NRU1MT0NLX1JBTkdFCiAgICBfU0NfTUVNT1JZ X1BST1RFQ1RJT04sCiNkZWZpbmUgX1NDX01FTU9SWV9QUk9URUNUSU9OIF9TQ19NRU1PUllfUFJP VEVDVElPTgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKI2RlZmluZSBfU0NfTUVTU0FHRV9QQVNT SU5HIF9TQ19NRVNTQUdFX1BBU1NJTkcKICAgIF9TQ19TRU1BUEhPUkVTLAojZGVmaW5lIF9TQ19T RU1BUEhPUkVTIF9TQ19TRU1BUEhPUkVTCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoj ZGVmaW5lIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNU UwogICAgX1NDX0FJT19MSVNUSU9fTUFYLAojZGVmaW5lIF9TQ19BSU9fTElTVElPX01BWCBfU0Nf QUlPX0xJU1RJT19NQVgKICAgIF9TQ19BSU9fTUFYLAojZGVmaW5lIF9TQ19BSU9fTUFYIF9TQ19B SU9fTUFYCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAojZGVmaW5lIF9TQ19BSU9fUFJJT19E RUxUQV9NQVggX1NDX0FJT19QUklPX0RFTFRBX01BWAogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoj ZGVmaW5lIF9TQ19ERUxBWVRJTUVSX01BWCBfU0NfREVMQVlUSU1FUl9NQVgKICAgIF9TQ19NUV9P UEVOX01BWCwKI2RlZmluZSBfU0NfTVFfT1BFTl9NQVggX1NDX01RX09QRU5fTUFYCiAgICBfU0Nf TVFfUFJJT19NQVgsCiNkZWZpbmUgX1NDX01RX1BSSU9fTUFYIF9TQ19NUV9QUklPX01BWAogICAg X1NDX1ZFUlNJT04sCiNkZWZpbmUgX1NDX1ZFUlNJT04gX1NDX1ZFUlNJT04KICAgIF9TQ19QQUdF U0laRSwKI2RlZmluZSBfU0NfUEFHRVNJWkUgX1NDX1BBR0VTSVpFCiNkZWZpbmUgX1NDX1BBR0Vf U0laRSBfU0NfUEFHRVNJWkUKICAgIF9TQ19SVFNJR19NQVgsCiNkZWZpbmUgX1NDX1JUU0lHX01B WCBfU0NfUlRTSUdfTUFYCiAgICBfU0NfU0VNX05TRU1TX01BWCwKI2RlZmluZSBfU0NfU0VNX05T RU1TX01BWCBfU0NfU0VNX05TRU1TX01BWAogICAgX1NDX1NFTV9WQUxVRV9NQVgsCiNkZWZpbmUg X1NDX1NFTV9WQUxVRV9NQVggX1NDX1NFTV9WQUxVRV9NQVgKICAgIF9TQ19TSUdRVUVVRV9NQVgs CiNkZWZpbmUgX1NDX1NJR1FVRVVFX01BWCBfU0NfU0lHUVVFVUVfTUFYCiAgICBfU0NfVElNRVJf TUFYLAojZGVmaW5lIF9TQ19USU1FUl9NQVggX1NDX1RJTUVSX01BWAoKCgogICAgX1NDX0JDX0JB U0VfTUFYLAojZGVmaW5lIF9TQ19CQ19CQVNFX01BWCBfU0NfQkNfQkFTRV9NQVgKICAgIF9TQ19C Q19ESU1fTUFYLAojZGVmaW5lIF9TQ19CQ19ESU1fTUFYIF9TQ19CQ19ESU1fTUFYCiAgICBfU0Nf QkNfU0NBTEVfTUFYLAojZGVmaW5lIF9TQ19CQ19TQ0FMRV9NQVggX1NDX0JDX1NDQUxFX01BWAog ICAgX1NDX0JDX1NUUklOR19NQVgsCiNkZWZpbmUgX1NDX0JDX1NUUklOR19NQVggX1NDX0JDX1NU UklOR19NQVgKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAojZGVmaW5lIF9TQ19DT0xMX1dFSUdI VFNfTUFYIF9TQ19DT0xMX1dFSUdIVFNfTUFYCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAojZGVm aW5lIF9TQ19FUVVJVl9DTEFTU19NQVggX1NDX0VRVUlWX0NMQVNTX01BWAogICAgX1NDX0VYUFJf TkVTVF9NQVgsCiNkZWZpbmUgX1NDX0VYUFJfTkVTVF9NQVggX1NDX0VYUFJfTkVTVF9NQVgKICAg IF9TQ19MSU5FX01BWCwKI2RlZmluZSBfU0NfTElORV9NQVggX1NDX0xJTkVfTUFYCiAgICBfU0Nf UkVfRFVQX01BWCwKI2RlZmluZSBfU0NfUkVfRFVQX01BWCBfU0NfUkVfRFVQX01BWAogICAgX1ND X0NIQVJDTEFTU19OQU1FX01BWCwKI2RlZmluZSBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYIF9TQ19D SEFSQ0xBU1NfTkFNRV9NQVgKCiAgICBfU0NfMl9WRVJTSU9OLAojZGVmaW5lIF9TQ18yX1ZFUlNJ T04gX1NDXzJfVkVSU0lPTgogICAgX1NDXzJfQ19CSU5ELAojZGVmaW5lIF9TQ18yX0NfQklORCBf U0NfMl9DX0JJTkQKICAgIF9TQ18yX0NfREVWLAojZGVmaW5lIF9TQ18yX0NfREVWIF9TQ18yX0Nf REVWCiAgICBfU0NfMl9GT1JUX0RFViwKI2RlZmluZSBfU0NfMl9GT1JUX0RFViBfU0NfMl9GT1JU X0RFVgogICAgX1NDXzJfRk9SVF9SVU4sCiNkZWZpbmUgX1NDXzJfRk9SVF9SVU4gX1NDXzJfRk9S VF9SVU4KICAgIF9TQ18yX1NXX0RFViwKI2RlZmluZSBfU0NfMl9TV19ERVYgX1NDXzJfU1dfREVW CiAgICBfU0NfMl9MT0NBTEVERUYsCiNkZWZpbmUgX1NDXzJfTE9DQUxFREVGIF9TQ18yX0xPQ0FM RURFRgoKICAgIF9TQ19QSUksCiNkZWZpbmUgX1NDX1BJSSBfU0NfUElJCiAgICBfU0NfUElJX1hU SSwKI2RlZmluZSBfU0NfUElJX1hUSSBfU0NfUElJX1hUSQogICAgX1NDX1BJSV9TT0NLRVQsCiNk ZWZpbmUgX1NDX1BJSV9TT0NLRVQgX1NDX1BJSV9TT0NLRVQKICAgIF9TQ19QSUlfSU5URVJORVQs CiNkZWZpbmUgX1NDX1BJSV9JTlRFUk5FVCBfU0NfUElJX0lOVEVSTkVUCiAgICBfU0NfUElJX09T SSwKI2RlZmluZSBfU0NfUElJX09TSSBfU0NfUElJX09TSQogICAgX1NDX1BPTEwsCiNkZWZpbmUg X1NDX1BPTEwgX1NDX1BPTEwKICAgIF9TQ19TRUxFQ1QsCiNkZWZpbmUgX1NDX1NFTEVDVCBfU0Nf U0VMRUNUCiAgICBfU0NfVUlPX01BWElPViwKI2RlZmluZSBfU0NfVUlPX01BWElPViBfU0NfVUlP X01BWElPVgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKI2RlZmluZSBfU0NfSU9W X01BWCBfU0NfSU9WX01BWAogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0sCiNkZWZpbmUgX1ND X1BJSV9JTlRFUk5FVF9TVFJFQU0gX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0KICAgIF9TQ19QSUlf SU5URVJORVRfREdSQU0sCiNkZWZpbmUgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSBfU0NfUElJX0lO VEVSTkVUX0RHUkFNCiAgICBfU0NfUElJX09TSV9DT1RTLAojZGVmaW5lIF9TQ19QSUlfT1NJX0NP VFMgX1NDX1BJSV9PU0lfQ09UUwogICAgX1NDX1BJSV9PU0lfQ0xUUywKI2RlZmluZSBfU0NfUElJ X09TSV9DTFRTIF9TQ19QSUlfT1NJX0NMVFMKICAgIF9TQ19QSUlfT1NJX00sCiNkZWZpbmUgX1ND X1BJSV9PU0lfTSBfU0NfUElJX09TSV9NCiAgICBfU0NfVF9JT1ZfTUFYLAojZGVmaW5lIF9TQ19U X0lPVl9NQVggX1NDX1RfSU9WX01BWAoKCiAgICBfU0NfVEhSRUFEUywKI2RlZmluZSBfU0NfVEhS RUFEUyBfU0NfVEhSRUFEUwogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKI2RlZmluZSBf U0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMKICAgIF9T Q19HRVRHUl9SX1NJWkVfTUFYLAojZGVmaW5lIF9TQ19HRVRHUl9SX1NJWkVfTUFYIF9TQ19HRVRH Ul9SX1NJWkVfTUFYCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKI2RlZmluZSBfU0NfR0VUUFdf Ul9TSVpFX01BWCBfU0NfR0VUUFdfUl9TSVpFX01BWAogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoj ZGVmaW5lIF9TQ19MT0dJTl9OQU1FX01BWCBfU0NfTE9HSU5fTkFNRV9NQVgKICAgIF9TQ19UVFlf TkFNRV9NQVgsCiNkZWZpbmUgX1NDX1RUWV9OQU1FX01BWCBfU0NfVFRZX05BTUVfTUFYCiAgICBf U0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKI2RlZmluZSBfU0NfVEhSRUFEX0RFU1RS VUNUT1JfSVRFUkFUSU9OUyBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUwogICAgX1ND X1RIUkVBRF9LRVlTX01BWCwKI2RlZmluZSBfU0NfVEhSRUFEX0tFWVNfTUFYIF9TQ19USFJFQURf S0VZU19NQVgKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAojZGVmaW5lIF9TQ19USFJFQURfU1RB Q0tfTUlOIF9TQ19USFJFQURfU1RBQ0tfTUlOCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoj ZGVmaW5lIF9TQ19USFJFQURfVEhSRUFEU19NQVggX1NDX1RIUkVBRF9USFJFQURTX01BWAogICAg X1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKI2RlZmluZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tB RERSIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJ WkUsCiNkZWZpbmUgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSBfU0NfVEhSRUFEX0FUVFJfU1RB Q0tTSVpFCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCiNkZWZpbmUgX1NDX1RI UkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORwog ICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCiNkZWZpbmUgX1NDX1RIUkVBRF9QUklPX0lOSEVS SVQgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQKICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoj ZGVmaW5lIF9TQ19USFJFQURfUFJJT19QUk9URUNUIF9TQ19USFJFQURfUFJJT19QUk9URUNUCiAg ICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAojZGVmaW5lIF9TQ19USFJFQURfUFJPQ0VTU19T SEFSRUQgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRAoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05G LAojZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19DT05GIF9TQ19OUFJPQ0VTU09SU19DT05GCiAgICBf U0NfTlBST0NFU1NPUlNfT05MTiwKI2RlZmluZSBfU0NfTlBST0NFU1NPUlNfT05MTiBfU0NfTlBS T0NFU1NPUlNfT05MTgogICAgX1NDX1BIWVNfUEFHRVMsCiNkZWZpbmUgX1NDX1BIWVNfUEFHRVMg X1NDX1BIWVNfUEFHRVMKICAgIF9TQ19BVlBIWVNfUEFHRVMsCiNkZWZpbmUgX1NDX0FWUEhZU19Q QUdFUyBfU0NfQVZQSFlTX1BBR0VTCiAgICBfU0NfQVRFWElUX01BWCwKI2RlZmluZSBfU0NfQVRF WElUX01BWCBfU0NfQVRFWElUX01BWAogICAgX1NDX1BBU1NfTUFYLAojZGVmaW5lIF9TQ19QQVNT X01BWCBfU0NfUEFTU19NQVgKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKI2RlZmluZSBfU0NfWE9Q RU5fVkVSU0lPTiBfU0NfWE9QRU5fVkVSU0lPTgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoj ZGVmaW5lIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiBfU0NfWE9QRU5fWENVX1ZFUlNJT04KICAgIF9T Q19YT1BFTl9VTklYLAojZGVmaW5lIF9TQ19YT1BFTl9VTklYIF9TQ19YT1BFTl9VTklYCiAgICBf U0NfWE9QRU5fQ1JZUFQsCiNkZWZpbmUgX1NDX1hPUEVOX0NSWVBUIF9TQ19YT1BFTl9DUllQVAog ICAgX1NDX1hPUEVOX0VOSF9JMThOLAojZGVmaW5lIF9TQ19YT1BFTl9FTkhfSTE4TiBfU0NfWE9Q RU5fRU5IX0kxOE4KICAgIF9TQ19YT1BFTl9TSE0sCiNkZWZpbmUgX1NDX1hPUEVOX1NITSBfU0Nf WE9QRU5fU0hNCgogICAgX1NDXzJfQ0hBUl9URVJNLAojZGVmaW5lIF9TQ18yX0NIQVJfVEVSTSBf U0NfMl9DSEFSX1RFUk0KICAgIF9TQ18yX0NfVkVSU0lPTiwKI2RlZmluZSBfU0NfMl9DX1ZFUlNJ T04gX1NDXzJfQ19WRVJTSU9OCiAgICBfU0NfMl9VUEUsCiNkZWZpbmUgX1NDXzJfVVBFIF9TQ18y X1VQRQoKICAgIF9TQ19YT1BFTl9YUEcyLAojZGVmaW5lIF9TQ19YT1BFTl9YUEcyIF9TQ19YT1BF Tl9YUEcyCiAgICBfU0NfWE9QRU5fWFBHMywKI2RlZmluZSBfU0NfWE9QRU5fWFBHMyBfU0NfWE9Q RU5fWFBHMwogICAgX1NDX1hPUEVOX1hQRzQsCiNkZWZpbmUgX1NDX1hPUEVOX1hQRzQgX1NDX1hP UEVOX1hQRzQKCiAgICBfU0NfQ0hBUl9CSVQsCiNkZWZpbmUgX1NDX0NIQVJfQklUIF9TQ19DSEFS X0JJVAogICAgX1NDX0NIQVJfTUFYLAojZGVmaW5lIF9TQ19DSEFSX01BWCBfU0NfQ0hBUl9NQVgK ICAgIF9TQ19DSEFSX01JTiwKI2RlZmluZSBfU0NfQ0hBUl9NSU4gX1NDX0NIQVJfTUlOCiAgICBf U0NfSU5UX01BWCwKI2RlZmluZSBfU0NfSU5UX01BWCBfU0NfSU5UX01BWAogICAgX1NDX0lOVF9N SU4sCiNkZWZpbmUgX1NDX0lOVF9NSU4gX1NDX0lOVF9NSU4KICAgIF9TQ19MT05HX0JJVCwKI2Rl ZmluZSBfU0NfTE9OR19CSVQgX1NDX0xPTkdfQklUCiAgICBfU0NfV09SRF9CSVQsCiNkZWZpbmUg X1NDX1dPUkRfQklUIF9TQ19XT1JEX0JJVAogICAgX1NDX01CX0xFTl9NQVgsCiNkZWZpbmUgX1ND X01CX0xFTl9NQVggX1NDX01CX0xFTl9NQVgKICAgIF9TQ19OWkVSTywKI2RlZmluZSBfU0NfTlpF Uk8gX1NDX05aRVJPCiAgICBfU0NfU1NJWkVfTUFYLAojZGVmaW5lIF9TQ19TU0laRV9NQVggX1ND X1NTSVpFX01BWAogICAgX1NDX1NDSEFSX01BWCwKI2RlZmluZSBfU0NfU0NIQVJfTUFYIF9TQ19T Q0hBUl9NQVgKICAgIF9TQ19TQ0hBUl9NSU4sCiNkZWZpbmUgX1NDX1NDSEFSX01JTiBfU0NfU0NI QVJfTUlOCiAgICBfU0NfU0hSVF9NQVgsCiNkZWZpbmUgX1NDX1NIUlRfTUFYIF9TQ19TSFJUX01B WAogICAgX1NDX1NIUlRfTUlOLAojZGVmaW5lIF9TQ19TSFJUX01JTiBfU0NfU0hSVF9NSU4KICAg IF9TQ19VQ0hBUl9NQVgsCiNkZWZpbmUgX1NDX1VDSEFSX01BWCBfU0NfVUNIQVJfTUFYCiAgICBf U0NfVUlOVF9NQVgsCiNkZWZpbmUgX1NDX1VJTlRfTUFYIF9TQ19VSU5UX01BWAogICAgX1NDX1VM T05HX01BWCwKI2RlZmluZSBfU0NfVUxPTkdfTUFYIF9TQ19VTE9OR19NQVgKICAgIF9TQ19VU0hS VF9NQVgsCiNkZWZpbmUgX1NDX1VTSFJUX01BWCBfU0NfVVNIUlRfTUFYCgogICAgX1NDX05MX0FS R01BWCwKI2RlZmluZSBfU0NfTkxfQVJHTUFYIF9TQ19OTF9BUkdNQVgKICAgIF9TQ19OTF9MQU5H TUFYLAojZGVmaW5lIF9TQ19OTF9MQU5HTUFYIF9TQ19OTF9MQU5HTUFYCiAgICBfU0NfTkxfTVNH TUFYLAojZGVmaW5lIF9TQ19OTF9NU0dNQVggX1NDX05MX01TR01BWAogICAgX1NDX05MX05NQVgs CiNkZWZpbmUgX1NDX05MX05NQVggX1NDX05MX05NQVgKICAgIF9TQ19OTF9TRVRNQVgsCiNkZWZp bmUgX1NDX05MX1NFVE1BWCBfU0NfTkxfU0VUTUFYCiAgICBfU0NfTkxfVEVYVE1BWCwKI2RlZmlu ZSBfU0NfTkxfVEVYVE1BWCBfU0NfTkxfVEVYVE1BWAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMy LAojZGVmaW5lIF9TQ19YQlM1X0lMUDMyX09GRjMyIF9TQ19YQlM1X0lMUDMyX09GRjMyCiAgICBf U0NfWEJTNV9JTFAzMl9PRkZCSUcsCiNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGQklHIF9TQ19Y QlM1X0lMUDMyX09GRkJJRwogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKI2RlZmluZSBfU0NfWEJT NV9MUDY0X09GRjY0IF9TQ19YQlM1X0xQNjRfT0ZGNjQKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJ RywKI2RlZmluZSBfU0NfWEJTNV9MUEJJR19PRkZCSUcgX1NDX1hCUzVfTFBCSUdfT0ZGQklHCgog ICAgX1NDX1hPUEVOX0xFR0FDWSwKI2RlZmluZSBfU0NfWE9QRU5fTEVHQUNZIF9TQ19YT1BFTl9M RUdBQ1kKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKI2RlZmluZSBfU0NfWE9QRU5fUkVBTFRJTUUg X1NDX1hPUEVOX1JFQUxUSU1FCiAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKI2RlZmlu ZSBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUyBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUwoK ICAgIF9TQ19BRFZJU09SWV9JTkZPLAojZGVmaW5lIF9TQ19BRFZJU09SWV9JTkZPIF9TQ19BRFZJ U09SWV9JTkZPCiAgICBfU0NfQkFSUklFUlMsCiNkZWZpbmUgX1NDX0JBUlJJRVJTIF9TQ19CQVJS SUVSUwogICAgX1NDX0JBU0UsCiNkZWZpbmUgX1NDX0JBU0UgX1NDX0JBU0UKICAgIF9TQ19DX0xB TkdfU1VQUE9SVCwKI2RlZmluZSBfU0NfQ19MQU5HX1NVUFBPUlQgX1NDX0NfTEFOR19TVVBQT1JU CiAgICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKI2RlZmluZSBfU0NfQ19MQU5HX1NVUFBPUlRfUiBf U0NfQ19MQU5HX1NVUFBPUlRfUgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKI2RlZmluZSBfU0Nf Q0xPQ0tfU0VMRUNUSU9OIF9TQ19DTE9DS19TRUxFQ1RJT04KICAgIF9TQ19DUFVUSU1FLAojZGVm aW5lIF9TQ19DUFVUSU1FIF9TQ19DUFVUSU1FCiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCiNkZWZp bmUgX1NDX1RIUkVBRF9DUFVUSU1FIF9TQ19USFJFQURfQ1BVVElNRQogICAgX1NDX0RFVklDRV9J TywKI2RlZmluZSBfU0NfREVWSUNFX0lPIF9TQ19ERVZJQ0VfSU8KICAgIF9TQ19ERVZJQ0VfU1BF Q0lGSUMsCiNkZWZpbmUgX1NDX0RFVklDRV9TUEVDSUZJQyBfU0NfREVWSUNFX1NQRUNJRklDCiAg ICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCiNkZWZpbmUgX1NDX0RFVklDRV9TUEVDSUZJQ19SIF9T Q19ERVZJQ0VfU1BFQ0lGSUNfUgogICAgX1NDX0ZEX01HTVQsCiNkZWZpbmUgX1NDX0ZEX01HTVQg X1NDX0ZEX01HTVQKICAgIF9TQ19GSUZPLAojZGVmaW5lIF9TQ19GSUZPIF9TQ19GSUZPCiAgICBf U0NfUElQRSwKI2RlZmluZSBfU0NfUElQRSBfU0NfUElQRQogICAgX1NDX0ZJTEVfQVRUUklCVVRF UywKI2RlZmluZSBfU0NfRklMRV9BVFRSSUJVVEVTIF9TQ19GSUxFX0FUVFJJQlVURVMKICAgIF9T Q19GSUxFX0xPQ0tJTkcsCiNkZWZpbmUgX1NDX0ZJTEVfTE9DS0lORyBfU0NfRklMRV9MT0NLSU5H CiAgICBfU0NfRklMRV9TWVNURU0sCiNkZWZpbmUgX1NDX0ZJTEVfU1lTVEVNIF9TQ19GSUxFX1NZ U1RFTQogICAgX1NDX01PTk9UT05JQ19DTE9DSywKI2RlZmluZSBfU0NfTU9OT1RPTklDX0NMT0NL IF9TQ19NT05PVE9OSUNfQ0xPQ0sKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAojZGVmaW5lIF9TQ19N VUxUSV9QUk9DRVNTIF9TQ19NVUxUSV9QUk9DRVNTCiAgICBfU0NfU0lOR0xFX1BST0NFU1MsCiNk ZWZpbmUgX1NDX1NJTkdMRV9QUk9DRVNTIF9TQ19TSU5HTEVfUFJPQ0VTUwogICAgX1NDX05FVFdP UktJTkcsCiNkZWZpbmUgX1NDX05FVFdPUktJTkcgX1NDX05FVFdPUktJTkcKICAgIF9TQ19SRUFE RVJfV1JJVEVSX0xPQ0tTLAojZGVmaW5lIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTIF9TQ19SRUFE RVJfV1JJVEVSX0xPQ0tTCiAgICBfU0NfU1BJTl9MT0NLUywKI2RlZmluZSBfU0NfU1BJTl9MT0NL UyBfU0NfU1BJTl9MT0NLUwogICAgX1NDX1JFR0VYUCwKI2RlZmluZSBfU0NfUkVHRVhQIF9TQ19S RUdFWFAKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAojZGVmaW5lIF9TQ19SRUdFWF9WRVJTSU9OIF9T Q19SRUdFWF9WRVJTSU9OCiAgICBfU0NfU0hFTEwsCiNkZWZpbmUgX1NDX1NIRUxMIF9TQ19TSEVM TAogICAgX1NDX1NJR05BTFMsCiNkZWZpbmUgX1NDX1NJR05BTFMgX1NDX1NJR05BTFMKICAgIF9T Q19TUEFXTiwKI2RlZmluZSBfU0NfU1BBV04gX1NDX1NQQVdOCiAgICBfU0NfU1BPUkFESUNfU0VS VkVSLAojZGVmaW5lIF9TQ19TUE9SQURJQ19TRVJWRVIgX1NDX1NQT1JBRElDX1NFUlZFUgogICAg X1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIsCiNkZWZpbmUgX1NDX1RIUkVBRF9TUE9SQURJQ19T RVJWRVIgX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIKICAgIF9TQ19TWVNURU1fREFUQUJBU0Us CiNkZWZpbmUgX1NDX1NZU1RFTV9EQVRBQkFTRSBfU0NfU1lTVEVNX0RBVEFCQVNFCiAgICBfU0Nf U1lTVEVNX0RBVEFCQVNFX1IsCiNkZWZpbmUgX1NDX1NZU1RFTV9EQVRBQkFTRV9SIF9TQ19TWVNU RU1fREFUQUJBU0VfUgogICAgX1NDX1RJTUVPVVRTLAojZGVmaW5lIF9TQ19USU1FT1VUUyBfU0Nf VElNRU9VVFMKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywKI2RlZmluZSBfU0NfVFlQRURf TUVNT1JZX09CSkVDVFMgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTCiAgICBfU0NfVVNFUl9HUk9V UFMsCiNkZWZpbmUgX1NDX1VTRVJfR1JPVVBTIF9TQ19VU0VSX0dST1VQUwogICAgX1NDX1VTRVJf R1JPVVBTX1IsCiNkZWZpbmUgX1NDX1VTRVJfR1JPVVBTX1IgX1NDX1VTRVJfR1JPVVBTX1IKICAg IF9TQ18yX1BCUywKI2RlZmluZSBfU0NfMl9QQlMgX1NDXzJfUEJTCiAgICBfU0NfMl9QQlNfQUND T1VOVElORywKI2RlZmluZSBfU0NfMl9QQlNfQUNDT1VOVElORyBfU0NfMl9QQlNfQUNDT1VOVElO RwogICAgX1NDXzJfUEJTX0xPQ0FURSwKI2RlZmluZSBfU0NfMl9QQlNfTE9DQVRFIF9TQ18yX1BC U19MT0NBVEUKICAgIF9TQ18yX1BCU19NRVNTQUdFLAojZGVmaW5lIF9TQ18yX1BCU19NRVNTQUdF IF9TQ18yX1BCU19NRVNTQUdFCiAgICBfU0NfMl9QQlNfVFJBQ0ssCiNkZWZpbmUgX1NDXzJfUEJT X1RSQUNLIF9TQ18yX1BCU19UUkFDSwogICAgX1NDX1NZTUxPT1BfTUFYLAojZGVmaW5lIF9TQ19T WU1MT09QX01BWCBfU0NfU1lNTE9PUF9NQVgKICAgIF9TQ19TVFJFQU1TLAojZGVmaW5lIF9TQ19T VFJFQU1TIF9TQ19TVFJFQU1TCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKI2RlZmluZSBfU0Nf Ml9QQlNfQ0hFQ0tQT0lOVCBfU0NfMl9QQlNfQ0hFQ0tQT0lOVAoKICAgIF9TQ19WNl9JTFAzMl9P RkYzMiwKI2RlZmluZSBfU0NfVjZfSUxQMzJfT0ZGMzIgX1NDX1Y2X0lMUDMyX09GRjMyCiAgICBf U0NfVjZfSUxQMzJfT0ZGQklHLAojZGVmaW5lIF9TQ19WNl9JTFAzMl9PRkZCSUcgX1NDX1Y2X0lM UDMyX09GRkJJRwogICAgX1NDX1Y2X0xQNjRfT0ZGNjQsCiNkZWZpbmUgX1NDX1Y2X0xQNjRfT0ZG NjQgX1NDX1Y2X0xQNjRfT0ZGNjQKICAgIF9TQ19WNl9MUEJJR19PRkZCSUcsCiNkZWZpbmUgX1ND X1Y2X0xQQklHX09GRkJJRyBfU0NfVjZfTFBCSUdfT0ZGQklHCgogICAgX1NDX0hPU1RfTkFNRV9N QVgsCiNkZWZpbmUgX1NDX0hPU1RfTkFNRV9NQVggX1NDX0hPU1RfTkFNRV9NQVgKICAgIF9TQ19U UkFDRSwKI2RlZmluZSBfU0NfVFJBQ0UgX1NDX1RSQUNFCiAgICBfU0NfVFJBQ0VfRVZFTlRfRklM VEVSLAojZGVmaW5lIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIgX1NDX1RSQUNFX0VWRU5UX0ZJTFRF UgogICAgX1NDX1RSQUNFX0lOSEVSSVQsCiNkZWZpbmUgX1NDX1RSQUNFX0lOSEVSSVQgX1NDX1RS QUNFX0lOSEVSSVQKICAgIF9TQ19UUkFDRV9MT0cKI2RlZmluZSBfU0NfVFJBQ0VfTE9HIF9TQ19U UkFDRV9MT0cKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1NfUEFUSCwKI2RlZmluZSBfQ1NfUEFU SCBfQ1NfUEFUSAojIDU2MyAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwogICAgX0NT X1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwojZGVmaW5lIF9DU19WNl9XSURUSF9SRVNUUklDVEVE X0VOVlMgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwogIH07CiMgNTAxICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAoX19jb25zdCBjaGFy ICpfX3BhdGgsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQg X19mZCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1l KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAo aW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlk X3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoK ZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgOwojIDUzNiAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwojIDU0NSAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0cGdpZCAoX19waWRfdCBfX3Bp ZCwgX19waWRfdCBfX3BnaWQpIDsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl cm4gaW50IHNldHBncnAgKHZvaWQpIDsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIDsKCgoKCgoKCmV4dGVybiBfX3VpZF90IGdldHVp ZCAodm9pZCkgOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIDsKCgpleHRlcm4gX19n aWRfdCBnZXRnaWQgKHZvaWQpIDsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSA7CgoK CgpleHRlcm4gaW50IGdldGdyb3VwcyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgOwoj IDYxMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0dWlkIChfX3VpZF90 IF9fdWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRf dCBfX2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoK CgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRy ZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSA7CgoKCgpleHRlcm4gaW50IHNl dGVnaWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9yayAodm9pZCkg OwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgOwoKCgoKCmV4dGVybiBjaGFyICp0 dHluYW1lIChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNo YXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBf X2ZkKSA7CgoKCgoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGxp bmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsKCgoKZXh0ZXJu IGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSA7 CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRo LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19s ZW4pIDsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKZXh0 ZXJuIGludCBybWRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIF9fcGlkX3Qg dGNnZXRwZ3JwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwg X19waWRfdCBfX3BncnBfaWQpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2b2lkKSA7CiMg NzE3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25z dCBjaGFyICpfX25hbWUpIDsKCgoKCgoKCiNkZWZpbmUgX19uZWVkX2dldG9wdCAKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZ2V0 b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2dl dG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4 dGVybiBpbnQgb3B0b3B0OwojIDEzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2dldG9wdC5oIiAzCmV4 dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBjb25zdCBj aGFyICpfX3Nob3J0b3B0cyk7CiMgMTY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZ2V0b3B0LmgiIDMK I3VuZGVmIF9fbmVlZF9nZXRvcHQKIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoK CgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg OwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6 ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlkIChsb25nIGludCBfX2lkKSA7CgoK CgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg OwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3Qg X19sZW4pIDsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIDsKCgpleHRlcm4gaW50IHJl dm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1 bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIDsKCgoK CgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFy ICpnZXR1c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lkKSA7 CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9u IChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSA7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290 IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25z dCBjaGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7CgoK CgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBzeW5j ICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9f ZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg0MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg1 NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9p ZCkgOwojIDg2NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYnJrICh2b2lk ICpfX2FkZHIpIDsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19kZWx0YSkgOwoj IDg4NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChs b25nIGludCBfX3N5c25vLCAuLi4pIDsKIyA5MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoj ZGVmaW5lIEZfVUxPQ0sgMAojZGVmaW5lIEZfTE9DSyAxCiNkZWZpbmUgRl9UTE9DSyAyCiNkZWZp bmUgRl9URVNUIDMKCgpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29m Zl90IF9fbGVuKSA7CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBm ZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgOwojIDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCgoKIyAyNSAiaGVh cC5vbGQuYyIgMgojIDEgIi4uL2dsb2JhbC5oIiAxCiMgMjAgIi4uL2dsb2JhbC5oIgojZGVmaW5l IF9fZ2xvYmFsX2hfIAoKIyAxICIuLi9jb25maWcuaCIgMQoKCgoKCgoKI2RlZmluZSBIQVZFX01N QVAgMQojIDE3ICIuLi9jb25maWcuaCIKI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKCgoKCgojZGVm aW5lIFNURENfSEVBREVSUyAxCgoKI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQoKCgoKCiNk ZWZpbmUgSEFWRV9NQVBfRkFJTEVEIDEKCgojZGVmaW5lIEhBVkVfTUFQX0FOT05ZTU9VUyAxCgoK I2RlZmluZSBVU0VfVEhSRUFEUyAxCiNkZWZpbmUgRVhURVJOQUxfT1ZFUkZMT1cgMQojZGVmaW5l IERPTlRfRlJFRV9GSVJTVCAxCgoKI2RlZmluZSBTWVNERVBfRElSICJpMzg2IgoKI2RlZmluZSBP TERfQ09NUElMRVIgMQoKCiNkZWZpbmUgSEFWRV9HRVRDV0QgMQoKCiNkZWZpbmUgSEFWRV9HRVRQ QUdFU0laRSAxCgoKI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCgoKI2RlZmluZSBIQVZFX01L RElSIDEKCgojZGVmaW5lIEhBVkVfTUtUSU1FIDEKCgojZGVmaW5lIEhBVkVfU0VMRUNUIDEKCgoj ZGVmaW5lIEhBVkVfU09DS0VUIDEKCgojZGVmaW5lIEhBVkVfRElSRU5UX0ggMQoKCiNkZWZpbmUg SEFWRV9GQ05UTF9IIDEKIyA4NCAiLi4vY29uZmlnLmgiCiNkZWZpbmUgSEFWRV9TWVNfVElNRV9I IDEKCgojZGVmaW5lIEhBVkVfVU5JU1REX0ggMQoKCiNkZWZpbmUgSEFWRV9MSUJNIDEKCgojZGVm aW5lIFBBQ0tBR0UgImNhY2FvIgoKCiNkZWZpbmUgVkVSU0lPTiAiMC40MCIKIyAyMyAiLi4vZ2xv YmFsLmgiIDIKCiNkZWZpbmUgTkVXX0dDIAoKI2RlZmluZSBTVEFUSVNUSUNTIAojIDM2ICIuLi9n bG9iYWwuaCIKI2RlZmluZSBTSVpFX0ZST01fQ0xBU1NJTkZPIAoKCgojIDEgIi91c3IvbGliL2dj Yy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKI2RlZmluZSBfU1RESU9f SCAxCgoKCgojZGVmaW5lIF9fbmVlZF9zaXplX3QgCiNkZWZpbmUgX19uZWVkX05VTEwgCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAy MjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoj dW5kZWYgX19uZWVkX3NpemVfdAojIDM2NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBOVUxMCgoKCgojZGVmaW5lIE5VTEwgKCh2b2lk ICopMCkKCgoKCgojdW5kZWYgX19uZWVkX05VTEwKIyA0NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiNkZWZpbmUgX19uZWVkX0ZJTEUgCiNk ZWZpbmUgX19uZWVkX19fRklMRSAKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsK CiNkZWZpbmUgX19GSUxFX2RlZmluZWQgMQoKI3VuZGVmIF9fbmVlZF9GSUxFCgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwoKI2RlZmluZSBfX19fRklMRV9kZWZpbmVkIDEKCiN1 bmRlZiBfX25lZWRfX19GSUxFCgoKCiNkZWZpbmUgX1NURElPX1VTRVNfSU9TVFJFQU0gCgojIDEg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK I2RlZmluZSBfSU9fU1RESU9fSCAKCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMK CgoKCiNkZWZpbmUgX0dfY29uZmlnX2ggMQoKCgoKI2RlZmluZSBfX25lZWRfc2l6ZV90IAojZGVm aW5lIF9fbmVlZF93Y2hhcl90IAojZGVmaW5lIF9fbmVlZF93aW50X3QgCiNkZWZpbmUgX19uZWVk X05VTEwgCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAyMjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9z dGRkZWYuaCIgMwojdW5kZWYgX19uZWVkX3NpemVfdAojIDI0OCAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiNkZWZpbmUgX193Y2hhcl90X18gCiNk ZWZpbmUgX19XQ0hBUl9UX18gCiNkZWZpbmUgX1dDSEFSX1QgCiNkZWZpbmUgX1RfV0NIQVJfIAoj ZGVmaW5lIF9UX1dDSEFSIAojZGVmaW5lIF9fV0NIQVJfVCAKI2RlZmluZSBfV0NIQVJfVF8gCiNk ZWZpbmUgX0JTRF9XQ0hBUl9UXyAKI2RlZmluZSBfV0NIQVJfVF9ERUZJTkVEXyAKI2RlZmluZSBf V0NIQVJfVF9ERUZJTkVEIAojZGVmaW5lIF9XQ0hBUl9UX0ggCiNkZWZpbmUgX19faW50X3djaGFy X3RfaCAKI2RlZmluZSBfX0lOVF9XQ0hBUl9UX0ggCiNkZWZpbmUgX0dDQ19XQ0hBUl9UIAojIDI3 NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1 bmRlZiBfQlNEX1dDSEFSX1RfCiMgMjk0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4x L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwojIDMxMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBf X25lZWRfd2NoYXJfdAoKCgoKI2RlZmluZSBfV0lOVF9UIAoKCgoKdHlwZWRlZiB1bnNpZ25lZCBp bnQgd2ludF90OwoKI3VuZGVmIF9fbmVlZF93aW50X3QKIyAzNjQgIi91c3IvbGliL2djYy1saWIv aTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwojdW5kZWYgTlVMTAoKCgoKI2RlZmlu ZSBOVUxMICgodm9pZCAqKTApCgoKCgoKI3VuZGVmIF9fbmVlZF9OVUxMCiMgMTUgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjMgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj ZGVmaW5lIF9fbmVlZF9tYnN0YXRlX3QgCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwoj IDQ3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojZGVmaW5lIF9fbmVlZF93aW50X3QgCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz MjMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoj dW5kZWYgX19uZWVkX3dpbnRfdAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDIxICIvdXNyL2luY2x1ZGUvYml0cy93 Y2hhci5oIiAzCiNkZWZpbmUgX0JJVFNfV0NIQVJfSCAxCgojZGVmaW5lIF9fV0NIQVJfTUlOICgt MjE0NzQ4MzY0N2wgLSAxbCkKI2RlZmluZSBfX1dDSEFSX01BWCAoMjE0NzQ4MzY0N2wpCiMgNTEg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK I2RlZmluZSBfX21ic3RhdGVfdF9kZWZpbmVkIDEKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19j b3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwog IH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKCiN1bmRlZiBfX25lZWRfbWJzdGF0ZV90CiMgMjUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiNkZWZpbmUgX0dfc2l6ZV90IHNpemVfdAp0 eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9 IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3Rh dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojZGVmaW5lIF9HX3NzaXplX3QgX19zc2l6ZV90 CiNkZWZpbmUgX0dfb2ZmX3QgX19vZmZfdAojZGVmaW5lIF9HX29mZjY0X3QgX19vZmY2NF90CiNk ZWZpbmUgX0dfcGlkX3QgX19waWRfdAojZGVmaW5lIF9HX3VpZF90IF9fdWlkX3QKI2RlZmluZSBf R193Y2hhcl90IHdjaGFyX3QKI2RlZmluZSBfR193aW50X3Qgd2ludF90CiNkZWZpbmUgX0dfc3Rh dDY0IHN0YXQ2NAojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs dWRlL2djb252LmgiIDMKI2RlZmluZSBfR0NPTlZfSCAxCgoKI2RlZmluZSBfX25lZWRfbWJzdGF0 ZV90IAojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDMKI2RlZmluZSBfX25lZWRfd2ludF90IAojIDEgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIzICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF93aW50X3QK IyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwojdW5kZWYgX19uZWVkX21ic3RhdGVfdAojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg MiAzCiNkZWZpbmUgX19uZWVkX3NpemVfdCAKI2RlZmluZSBfX25lZWRfd2NoYXJfdCAKIyAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIy MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1 bmRlZiBfX25lZWRfc2l6ZV90CiMgMzExICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4x L2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF93Y2hhcl90CiMgMzIgIi91c3IvaW5j bHVkZS9nY29udi5oIiAyIDMKCgojZGVmaW5lIF9fVU5LTk9XTl8xMDY0Nl9DSEFSICgod2NoYXJf dCkgMHhmZmZkKQoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog IF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAog IF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZf SU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09O Vl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEs CiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj dDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4 dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0 YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7 CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7 CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90 IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0 IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwog IHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBl ZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgojZGVmaW5lIF9HX0hBVkVfQk9PTCAxCgoKCiNk ZWZpbmUgX0dfSEFWRV9BVEVYSVQgMQojZGVmaW5lIF9HX0hBVkVfU1lTX0NERUZTIDEKI2RlZmlu ZSBfR19IQVZFX1NZU19XQUlUIDEKI2RlZmluZSBfR19ORUVEX1NUREFSR19IIDEKI2RlZmluZSBf R192YV9saXN0IF9fZ251Y192YV9saXN0CgojZGVmaW5lIF9HX0hBVkVfUFJJTlRGX0ZQIDEKI2Rl ZmluZSBfR19IQVZFX01NQVAgMQojZGVmaW5lIF9HX0hBVkVfTE9OR19ET1VCTEVfSU8gMQojZGVm aW5lIF9HX0hBVkVfSU9fRklMRV9PUEVOIDEKI2RlZmluZSBfR19IQVZFX0lPX0dFVExJTkVfSU5G TyAxCgojZGVmaW5lIF9HX0lPX0lPX0ZJTEVfVkVSU0lPTiAweDIwMDAxCgojZGVmaW5lIF9HX09Q RU42NCBfX29wZW42NAojZGVmaW5lIF9HX0xTRUVLNjQgX19sc2VlazY0CiNkZWZpbmUgX0dfRlNU QVQ2NChmZCxidWYpIF9fZnhzdGF0NjQgKF9TVEFUX1ZFUiwgZmQsIGJ1ZikKCgojZGVmaW5lIF9H X0hBVkVfU1RfQkxLU0laRSBkZWZpbmVkIChfU1RBVEJVRl9TVF9CTEtTSVpFKQoKI2RlZmluZSBf R19CVUZTSVogODE5MgoKCiNkZWZpbmUgX0dfTkFNRVNfSEFWRV9VTkRFUlNDT1JFIDAKI2RlZmlu ZSBfR19WVEFCTEVfTEFCRUxfSEFTX0xFTkdUSCAxCiNkZWZpbmUgX0dfVVNJTkdfVEhVTktTIDEK I2RlZmluZSBfR19WVEFCTEVfTEFCRUxfUFJFRklYICJfX3Z0XyIKI2RlZmluZSBfR19WVEFCTEVf TEFCRUxfUFJFRklYX0lEIF9fdnRfCgoKCiNkZWZpbmUgX0dfQVJHUyhBUkdMSVNUKSBBUkdMSVNU CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCiNkZWZpbmUgX0lPX3Bvc190IF9HX2Zw b3NfdAojZGVmaW5lIF9JT19mcG9zX3QgX0dfZnBvc190CiNkZWZpbmUgX0lPX2Zwb3M2NF90IF9H X2Zwb3M2NF90CiNkZWZpbmUgX0lPX3NpemVfdCBfR19zaXplX3QKI2RlZmluZSBfSU9fc3NpemVf dCBfR19zc2l6ZV90CiNkZWZpbmUgX0lPX29mZl90IF9HX29mZl90CiNkZWZpbmUgX0lPX29mZjY0 X3QgX0dfb2ZmNjRfdAojZGVmaW5lIF9JT19waWRfdCBfR19waWRfdAojZGVmaW5lIF9JT191aWRf dCBfR191aWRfdAojZGVmaW5lIF9JT19pY29udl90IF9HX2ljb252X3QKI2RlZmluZSBfSU9fSEFW RV9TWVNfV0FJVCBfR19IQVZFX1NZU19XQUlUCiNkZWZpbmUgX0lPX0hBVkVfU1RfQkxLU0laRSBf R19IQVZFX1NUX0JMS1NJWkUKI2RlZmluZSBfSU9fQlVGU0laIF9HX0JVRlNJWgojZGVmaW5lIF9J T192YV9saXN0IF9HX3ZhX2xpc3QKI2RlZmluZSBfSU9fd2ludF90IF9HX3dpbnRfdAoKCgojZGVm aW5lIF9fbmVlZF9fX3ZhX2xpc3QgCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu MS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyAzNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4 LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCiN1bmRlZiBfX25lZWRfX192YV9saXN0CgoKCgojZGVm aW5lIF9fR05VQ19WQV9MSVNUIAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9s aXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgojdW5kZWYgX0lPX3ZhX2xpc3QK I2RlZmluZSBfSU9fdmFfbGlzdCBfX2dudWNfdmFfbGlzdAojIDc2ICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwojZGVmaW5lIF9QQVJBTVMocHJvdG9zKSBfX1AocHJvdG9zKQoKCgoKCgoKI2RlZmlu ZSBfSU9fVU5JRklFRF9KVU1QVEFCTEVTIDEKCgoKCgojZGVmaW5lIEVPRiAoLTEpCiMgMTA1ICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMwojZGVmaW5lIF9JT1NfSU5QVVQgMQojZGVmaW5lIF9JT1Nf T1VUUFVUIDIKI2RlZmluZSBfSU9TX0FURU5EIDQKI2RlZmluZSBfSU9TX0FQUEVORCA4CiNkZWZp bmUgX0lPU19UUlVOQyAxNgojZGVmaW5lIF9JT1NfTk9DUkVBVEUgMzIKI2RlZmluZSBfSU9TX05P UkVQTEFDRSA2NAojZGVmaW5lIF9JT1NfQklOIDEyOAoKCgoKCgoKI2RlZmluZSBfSU9fTUFHSUMg MHhGQkFEMDAwMAojZGVmaW5lIF9PTERfU1RESU9fTUFHSUMgMHhGQUJDMDAwMAojZGVmaW5lIF9J T19NQUdJQ19NQVNLIDB4RkZGRjAwMDAKI2RlZmluZSBfSU9fVVNFUl9CVUYgMQojZGVmaW5lIF9J T19VTkJVRkZFUkVEIDIKI2RlZmluZSBfSU9fTk9fUkVBRFMgNAojZGVmaW5lIF9JT19OT19XUklU RVMgOAojZGVmaW5lIF9JT19FT0ZfU0VFTiAweDEwCiNkZWZpbmUgX0lPX0VSUl9TRUVOIDB4MjAK I2RlZmluZSBfSU9fREVMRVRFX0RPTlRfQ0xPU0UgMHg0MAojZGVmaW5lIF9JT19MSU5LRUQgMHg4 MAojZGVmaW5lIF9JT19JTl9CQUNLVVAgMHgxMDAKI2RlZmluZSBfSU9fTElORV9CVUYgMHgyMDAK I2RlZmluZSBfSU9fVElFRF9QVVRfR0VUIDB4NDAwCiNkZWZpbmUgX0lPX0NVUlJFTlRMWV9QVVRU SU5HIDB4ODAwCiNkZWZpbmUgX0lPX0lTX0FQUEVORElORyAweDEwMDAKI2RlZmluZSBfSU9fSVNf RklMRUJVRiAweDIwMDAKI2RlZmluZSBfSU9fQkFEX1NFRU4gMHg0MDAwCiNkZWZpbmUgX0lPX1VT RVJfTE9DSyAweDgwMDAKCgojZGVmaW5lIF9JT19TS0lQV1MgMDEKI2RlZmluZSBfSU9fTEVGVCAw MgojZGVmaW5lIF9JT19SSUdIVCAwNAojZGVmaW5lIF9JT19JTlRFUk5BTCAwMTAKI2RlZmluZSBf SU9fREVDIDAyMAojZGVmaW5lIF9JT19PQ1QgMDQwCiNkZWZpbmUgX0lPX0hFWCAwMTAwCiNkZWZp bmUgX0lPX1NIT1dCQVNFIDAyMDAKI2RlZmluZSBfSU9fU0hPV1BPSU5UIDA0MDAKI2RlZmluZSBf SU9fVVBQRVJDQVNFIDAxMDAwCiNkZWZpbmUgX0lPX1NIT1dQT1MgMDIwMDAKI2RlZmluZSBfSU9f U0NJRU5USUZJQyAwNDAwMAojZGVmaW5lIF9JT19GSVhFRCAwMTAwMDAKI2RlZmluZSBfSU9fVU5J VEJVRiAwMjAwMDAKI2RlZmluZSBfSU9fU1RESU8gMDQwMDAwCiNkZWZpbmUgX0lPX0RPTlRfQ0xP U0UgMDEwMDAwMAojZGVmaW5lIF9JT19CT09MQUxQSEEgMDIwMDAwMAoKCnN0cnVjdCBfSU9fanVt cF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBl ZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9J T19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7 CiMgMTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3Vs dAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJv ciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpz dHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CiNkZWZpbmUgX0lPX2ZpbGVfZmxhZ3MgX2Zs YWdzCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFy KiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0 ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hh ciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1 cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJr ZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9i bGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgojZGVmaW5lIF9fSEFWRV9DT0xVTU4gCgog IHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0 OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9f cGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAq IHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVj dCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf c3RkZXJyXzsKCiNkZWZpbmUgX0lPX3N0ZGluICgoX0lPX0ZJTEUqKSgmX0lPXzJfMV9zdGRpbl8p KQojZGVmaW5lIF9JT19zdGRvdXQgKChfSU9fRklMRSopKCZfSU9fMl8xX3N0ZG91dF8pKQojZGVm aW5lIF9JT19zdGRlcnIgKChfSU9fRklMRSopKCZfSU9fMl8xX3N0ZGVycl8pKQojIDM0NCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lk ICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVm IF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpf X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoK Cgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9f cG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tp ZSk7CiMgMzk2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93 IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4g aW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVy ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwoKI2RlZmlu ZSBfSU9fZ2V0Y191bmxvY2tlZChfZnApICgoX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfZnApLT5f SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfZnApLT5f SU9fcmVhZF9wdHIrKykKCgojZGVmaW5lIF9JT19wZWVrY191bmxvY2tlZChfZnApICgoX2ZwKS0+ X0lPX3JlYWRfcHRyID49IChfZnApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKF9mcCkg PT0gRU9GID8gRU9GIDogKih1bnNpZ25lZCBjaGFyICopIChfZnApLT5fSU9fcmVhZF9wdHIpCgoK CiNkZWZpbmUgX0lPX3B1dGNfdW5sb2NrZWQoX2NoLF9mcCkgKCgoX2ZwKS0+X0lPX3dyaXRlX3B0 ciA+PSAoX2ZwKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfZnAsICh1bnNpZ25lZCBj aGFyKSAoX2NoKSkgOiAodW5zaWduZWQgY2hhcikgKCooX2ZwKS0+X0lPX3dyaXRlX3B0cisrID0g KF9jaCkpKQoKCgoKI2RlZmluZSBfSU9fZ2V0d2NfdW5sb2NrZWQoX2ZwKSAoKF9mcCktPl93aWRl X2RhdGEtPl9JT19yZWFkX3B0ciA+PSAoX2ZwKS0+X3dpZGVfZGF0YS0+X0lPX3JlYWRfZW5kID8g X193dWZsb3cgKF9mcCkgOiAoX0lPX3dpbnRfdCkgKihfZnApLT5fd2lkZV9kYXRhLT5fSU9fcmVh ZF9wdHIrKykKCgojZGVmaW5lIF9JT19wdXR3Y191bmxvY2tlZChfd2NoLF9mcCkgKChfZnApLT5f d2lkZV9kYXRhLT5fSU9fd3JpdGVfcHRyID49IChfZnApLT5fd2lkZV9kYXRhLT5fSU9fd3JpdGVf ZW5kID8gX193b3ZlcmZsb3cgKF9mcCwgX3djaCkgOiAoX0lPX3dpbnRfdCkgKCooX2ZwKS0+X3dp ZGVfZGF0YS0+X0lPX3dyaXRlX3B0cisrID0gKF93Y2gpKSkKCgoKCiNkZWZpbmUgX0lPX2Zlb2Zf dW5sb2NrZWQoX19mcCkgKCgoX19mcCktPl9mbGFncyAmIF9JT19FT0ZfU0VFTikgIT0gMCkKI2Rl ZmluZSBfSU9fZmVycm9yX3VubG9ja2VkKF9fZnApICgoKF9fZnApLT5fZmxhZ3MgJiBfSU9fRVJS X1NFRU4pICE9IDApCgpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpleHRl cm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9J T19mZW9mIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxF ICpfX2ZwKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7 CgoKI2RlZmluZSBfSU9fUEVORElOR19PVVRQVVRfQ09VTlQoX2ZwKSAoKF9mcCktPl9JT193cml0 ZV9wdHIgLSAoX2ZwKS0+X0lPX3dyaXRlX2Jhc2UpCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmls ZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICop IDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDQ4ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwojZGVmaW5lIF9JT19wZWVrYyhfZnApIF9JT19wZWVrY191bmxv Y2tlZCAoX2ZwKQojZGVmaW5lIF9JT19mbG9ja2ZpbGUoX2ZwKSAKI2RlZmluZSBfSU9fZnVubG9j a2ZpbGUoX2ZwKSAKI2RlZmluZSBfSU9fZnRyeWxvY2tmaWxlKF9mcCkgCiNkZWZpbmUgX0lPX2Ns ZWFudXBfcmVnaW9uX3N0YXJ0KF9mY3QsX2ZwKSAKI2RlZmluZSBfSU9fY2xlYW51cF9yZWdpb25f ZW5kKF9Eb2l0KSAKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4g KF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChf SU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29m ZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9J T19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lP X2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA3NSAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDg5ICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9z X3Q7CiMgOTggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5o IiAzCiNkZWZpbmUgX0lPRkJGIDAKI2RlZmluZSBfSU9MQkYgMQojZGVmaW5lIF9JT05CRiAyCgoK CgojZGVmaW5lIEJVRlNJWiBfSU9fQlVGU0laCiMgMTE4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt bGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwojZGVmaW5lIFNFRUtfU0VUIDAKI2RlZmluZSBT RUVLX0NVUiAxCiNkZWZpbmUgU0VFS19FTkQgMgoKCgoKI2RlZmluZSBQX3RtcGRpciAiL3RtcCIK IyAxMzggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1 ZGUvYml0cy9zdGRpb19saW0uaCIgMwojZGVmaW5lIExfdG1wbmFtIDIwCiNkZWZpbmUgVE1QX01B WCAyMzgzMjgKI2RlZmluZSBGSUxFTkFNRV9NQVggNDA5NgoKCiNkZWZpbmUgTF9jdGVybWlkIDkK I2RlZmluZSBMX2N1c2VyaWQgOQoKCgoKCiNkZWZpbmUgRk9QRU5fTUFYIDE2CiMgMTM5ICIvdXNy L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVy biBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsK CiNkZWZpbmUgc3RkaW4gc3RkaW4KI2RlZmluZSBzdGRvdXQgc3Rkb3V0CiNkZWZpbmUgc3RkZXJy IHN0ZGVycgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsK CmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9f bmV3KSA7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE3MCAiL3Vzci9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRt cG5hbSAoY2hhciAqX19zKSA7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykg OwojIDE4NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hh ciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9f c3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg OwojIDIxMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt ZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg OwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu YW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMg MjQwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CiMg MjYzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBf X21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGlu dCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsK CgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h eGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMs IDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzM0ICIvdXNyL2xpYi9nY2MtbGliL2kz ODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwojIDM2MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJl YW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0 Y2hhciAodm9pZCkgOwoKCgojZGVmaW5lIGdldGMoX2ZwKSBfSU9fZ2V0YyAoX2ZwKQoKCgpleHRl cm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hh cl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt KSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4g aW50IHB1dGNoYXIgKGludCBfX2MpIDsKCgoKI2RlZmluZSBwdXRjKF9jaCxfZnApIF9JT19wdXRj IChfY2gsIF9mcCkKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoKCgoK ZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50 IF9fdywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19y ZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgOwoj IDQyNiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMK ZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ1MCAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmcHV0cyAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7 CiMgNDYwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5n ZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90 IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsK CgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tl ZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9f b2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJl YW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIDsKIyA1MDQgIi91c3Iv bGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQg ZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9f cG9zKQogICAgIDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3Qg ZnBvc190ICpfX3BvcykgOwojIDU0MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7 CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAo RklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsK ZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4g dm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gaW50IHN5c19uZXJy OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CiMgNTcxICIvdXNy L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50 IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hh ciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9z ZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19z KSA7CiMgNjE4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBp bnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tm aWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDYzOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4 LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAx IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwojZGVmaW5lIF9fU1RESU9fSU5M SU5FIGV4dGVybiBfX2lubGluZQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJl dHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5l IGludApnZXRjaGFyICh2b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4 dGVybiBfX2lubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAo KF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChf X2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4 dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0 ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0 ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoK CmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0 YyAoX19jLCBzdGRvdXQpOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2Vk IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193 cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0 cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVh bSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50 CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9f c3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9f b3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNo YXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBf X2lubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRv dXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZs b3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihz dGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CiMgMTExICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsK fQoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkK ewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CgoKCgoKCgoj ZGVmaW5lIGZyZWFkX3VubG9ja2VkKHB0cixzaXplLG4sc3RyZWFtKSAoX19leHRlbnNpb25fXyAo KF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobikg JiYgKHNpemVfdCkgKChzaXplKSAqIChuKSkgPD0gOCAmJiAoc2l6ZSkgIT0gMCkgPyAoeyBjaGFy ICpfX3B0ciA9IChjaGFyICopIChwdHIpOyBGSUxFICpfX3N0cmVhbSA9IChzdHJlYW0pOyBzaXpl X3QgX19jbnQ7IGZvciAoX19jbnQgPSAoc2l6ZSkgKiAobik7IF9fY250ID4gMDsgLS1fX2NudCkg eyBpbnQgX19jID0gX0lPX2dldGNfdW5sb2NrZWQgKF9fc3RyZWFtKTsgaWYgKF9fYyA9PSBFT0Yp IGJyZWFrOyAqX19wdHIrKyA9IF9fYzsgfSAoKHNpemVfdCkgKChzaXplKSAqIChuKSkgLSBfX2Nu dCkgLyAoc2l6ZSk7IH0pIDogKCgoX19idWlsdGluX2NvbnN0YW50X3AgKHNpemUpICYmIChzaXpl KSA9PSAwKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChuKSA9PSAwKSkgPyAoKHZv aWQpIChwdHIpLCAodm9pZCkgKHN0cmVhbSksICh2b2lkKSAoc2l6ZSksICh2b2lkKSAobiksIDAp IDogZnJlYWRfdW5sb2NrZWQgKHB0ciwgc2l6ZSwgbiwgc3RyZWFtKSkpKQojIDE1MSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW8uaCIgMwojZGVmaW5lIGZ3cml0ZV91bmxvY2tlZChwdHIsc2l6ZSxu LHN0cmVhbSkgKF9fZXh0ZW5zaW9uX18gKChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZSkgJiYg X19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChzaXplX3QpICgoc2l6ZSkgKiAobikpIDw9IDgg JiYgKHNpemUpICE9IDApID8gKHsgY29uc3QgY2hhciAqX19wdHIgPSAoY29uc3QgY2hhciAqKSAo cHRyKTsgRklMRSAqX19zdHJlYW0gPSAoc3RyZWFtKTsgc2l6ZV90IF9fY250OyBmb3IgKF9fY250 ID0gKHNpemUpICogKG4pOyBfX2NudCA+IDA7IC0tX19jbnQpIGlmIChfSU9fcHV0Y191bmxvY2tl ZCAoKl9fcHRyKyssIF9fc3RyZWFtKSA9PSBFT0YpIGJyZWFrOyAoKHNpemVfdCkgKChzaXplKSAq IChuKSkgLSBfX2NudCkgLyAoc2l6ZSk7IH0pIDogKCgoX19idWlsdGluX2NvbnN0YW50X3AgKHNp emUpICYmIChzaXplKSA9PSAwKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChuKSA9 PSAwKSkgPyAoKHZvaWQpIChwdHIpLCAodm9pZCkgKHN0cmVhbSksICh2b2lkKSAoc2l6ZSksIG4p IDogZndyaXRlX3VubG9ja2VkIChwdHIsIHNpemUsIG4sIHN0cmVhbSkpKSkKIyAxNjkgIi91c3Iv aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKI3VuZGVmIF9fU1RESU9fSU5MSU5FCiMgNjQwICIvdXNy L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiMgNDEg Ii4uL2dsb2JhbC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyOCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiNkZWZpbmUgX19uZWVkX3NpemVfdCAKCiNkZWZpbmUgX19u ZWVkX3djaGFyX3QgCiNkZWZpbmUgX19uZWVkX05VTEwgCgojIDEgIi91c3IvbGliL2djYy1saWIv aTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNyL2xpYi9nY2Mt bGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF9zaXpl X3QKIyAzMTEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYu aCIgMwojdW5kZWYgX19uZWVkX3djaGFyX3QKIyAzNjQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s aW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwojdW5kZWYgTlVMTAoKCgoKI2RlZmluZSBOVUxM ICgodm9pZCAqKTApCgoKCgoKI3VuZGVmIF9fbmVlZF9OVUxMCiMgMzQgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCgoKCgojZGVmaW5lIF9TVERMSUJfSCAxCiMgOTQgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK ICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBs b25nIGludCByZW07CiAgfSBsZGl2X3Q7CiNkZWZpbmUgX19sZGl2X3RfZGVmaW5lZCAxCiMgMTIy ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKI2RlZmluZSBSQU5EX01BWCAyMTQ3NDgzNjQ3CgoK CgojZGVmaW5lIEVYSVRfRkFJTFVSRSAxCiNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKCgoKI2RlZmlu ZSBNQl9DVVJfTUFYIChfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICgpKQpleHRlcm4gc2l6ZV90IF9f Y3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50 IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRv bGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CiMg MTYzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBs b25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2Jhc2UpCiAgICAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoK CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CiMgMjUwICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJu IGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxv bmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSA7CiNkZWZpbmUgX19zdHJ0b2xfaW50ZXJuYWxfZGVmaW5lZCAxCgoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CiNkZWZpbmUgX19z dHJ0b3VsX2ludGVybmFsX2RlZmluZWQgMQoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwojZGVmaW5lIF9fc3RydG9sbF9pbnRlcm5hbF9kZWZp bmVkIDEKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3Ry dG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwojZGVmaW5lIF9fc3RydG91bGxfaW50 ZXJuYWxfZGVmaW5lZCAxCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikK ewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0 ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewog IHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg IGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5k cHRyLCBfX2Jhc2UsIDApOwp9CiMgMzI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg IGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5k cHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1 cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoK CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19u cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19i YXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f YmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAq X19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkp Owp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICBy ZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9 CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewog IHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KCgpf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0 IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAoKHZv aWQgKikwKSwgMTApOwp9CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNo YXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0 IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKI2Rl ZmluZSBfU1lTX1RZUEVTX0ggMQoKCgoKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlw ZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9f dV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRf dCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CiNkZWZpbmUgX191X2NoYXJfZGVm aW5lZCAKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9f dDsKCgoKI2RlZmluZSBfX2lub190X2RlZmluZWQgCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2 X3Q7CiNkZWZpbmUgX19kZXZfdF9kZWZpbmVkIAoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CiNk ZWZpbmUgX19naWRfdF9kZWZpbmVkIAojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKI2RlZmluZSBfX25saW5rX3RfZGVmaW5lZCAKCgoK dHlwZWRlZiBfX3VpZF90IHVpZF90OwojZGVmaW5lIF9fdWlkX3RfZGVmaW5lZCAKIyA5OSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKI2RlZmluZSBf X3BpZF90X2RlZmluZWQgCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CiNkZWZpbmUgX19pZF90X2Rl ZmluZWQgCiMgMTE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2RhZGRy X3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKI2RlZmluZSBfX2RhZGRyX3Rf ZGVmaW5lZCAKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKI2RlZmluZSBfX2tleV90X2RlZmlu ZWQgCgoKCgoKI2RlZmluZSBfX25lZWRfdGltZV90IAojZGVmaW5lIF9fbmVlZF90aW1lcl90IAoj ZGVmaW5lIF9fbmVlZF9jbG9ja2lkX3QgCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMg NjUgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKI2RlZmluZSBfX3RpbWVfdF9kZWZpbmVkIDEKCgoK CnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCiN1bmRlZiBfX25lZWRfdGltZV90CgoKCiNkZWZp bmUgX19jbG9ja2lkX3RfZGVmaW5lZCAxCgoKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRf dDsKCgoKCgoKI2RlZmluZSBfX3RpbWVyX3RfZGVmaW5lZCAxCgoKCgp0eXBlZGVmIF9fdGltZXJf dCB0aW1lcl90OwoKCiN1bmRlZiBfX25lZWRfdGltZXJfdAojIDEzMyAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojZGVmaW5l IF9fbmVlZF9zaXplX3QgCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEv aW5jbHVkZS9zdGRkZWYuaCIgMwojdW5kZWYgX19uZWVkX3NpemVfdAojIDE0NyAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1 aW50OwojIDE4MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiNkZWZpbmUgX19pbnROX3Qo TixNT0RFKSB0eXBlZGVmIGludCBpbnQgIyNOICMjX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChNT0RFKSkpCgojZGVmaW5lIF9fdV9pbnROX3QoTixNT0RFKSB0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludCAjI04gIyNfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKE1PREUpKSkKCgoKI2Rl ZmluZSBfX2ludDhfdF9kZWZpbmVkIAp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVf aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX193b3JkX18pKSk7CgoKCgoKI2RlZmluZSBfX0JJVF9UWVBFU19ERUZJTkVEX18gMQoKCgoK IyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDMKI2RlZmluZSBfRU5ESUFOX0ggMQojIDMyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMK I2RlZmluZSBfX0xJVFRMRV9FTkRJQU4gMTIzNAojZGVmaW5lIF9fQklHX0VORElBTiA0MzIxCiNk ZWZpbmUgX19QRFBfRU5ESUFOIDM0MTIKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5o IiAxIDMKCgoKCgoKI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCiMgMzggIi91 c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCgoKCgojZGVmaW5lIF9fRkxPQVRfV09SRF9PUkRFUiBf X0JZVEVfT1JERVIKCgoKI2RlZmluZSBMSVRUTEVfRU5ESUFOIF9fTElUVExFX0VORElBTgojZGVm aW5lIEJJR19FTkRJQU4gX19CSUdfRU5ESUFOCiNkZWZpbmUgUERQX0VORElBTiBfX1BEUF9FTkRJ QU4KI2RlZmluZSBCWVRFX09SREVSIF9fQllURV9PUkRFUgoKCgojZGVmaW5lIF9fTE9OR19MT05H X1BBSVIoSEksTE8pIExPLCBISQojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAzCiNkZWZpbmUgX1NZU19TRUxFQ1RfSCAxCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0 LmgiIDMKI2RlZmluZSBfX0ZEX1pFUk8oZmRzcCkgZG8geyBpbnQgX19kMCwgX19kMTsgX19hc21f XyBfX3ZvbGF0aWxlX18gKCJjbGQ7IHJlcDsgc3Rvc2wiIDogIj1jIiAoX19kMCksICI9RCIgKF9f ZDEpIDogImEiICgwKSwgIjAiIChzaXplb2YgKGZkX3NldCkgLyBzaXplb2YgKF9fZmRfbWFzaykp LCAiMSIgKCZfX0ZEU19CSVRTIChmZHNwKVswXSkgOiAibWVtb3J5Iik7IH0gd2hpbGUgKDApCiMg MzcgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAzCiNkZWZpbmUgX19GRF9TRVQoZmQsZmRz cCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJidHNsICUxLCUwIiA6ICI9bSIgKF9fRkRTX0JJVFMg KGZkc3ApW19fRkRFTFQgKGZkKV0pIDogInIiICgoKGludCkgKGZkKSkgJSBfX05GREJJVFMpIDog ImNjIiwibWVtb3J5IikKCgoKCiNkZWZpbmUgX19GRF9DTFIoZmQsZmRzcCkgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJidHJsICUxLCUwIiA6ICI9bSIgKF9fRkRTX0JJVFMgKGZkc3ApW19fRkRFTFQg KGZkKV0pIDogInIiICgoKGludCkgKGZkKSkgJSBfX05GREJJVFMpIDogImNjIiwibWVtb3J5IikK CgoKCiNkZWZpbmUgX19GRF9JU1NFVChmZCxmZHNwKSAoX19leHRlbnNpb25fXyAoe3JlZ2lzdGVy IGNoYXIgX19yZXN1bHQ7IF9fYXNtX18gX192b2xhdGlsZV9fICgiYnRsICUxLCUyIDsgc2V0Y2Ig JWIwIiA6ICI9cSIgKF9fcmVzdWx0KSA6ICJyIiAoKChpbnQpIChmZCkpICUgX19ORkRCSVRTKSwg Im0iIChfX0ZEU19CSVRTIChmZHNwKVtfX0ZERUxUIChmZCldKSA6ICJjYyIpOyBfX3Jlc3VsdDsg fSkpCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIg MwojZGVmaW5lIF9TSUdTRVRfSF90eXBlcyAxCgp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKI2RlZmluZSBfU0lHU0VUX05XT1JEUyAoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBs b25nIGludCkpKQp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFs WygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0 X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiNkZWZpbmUgX19zaWdz ZXRfdF9kZWZpbmVkIAp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCiNkZWZpbmUgX19u ZWVkX3RpbWVfdCAKI2RlZmluZSBfX25lZWRfdGltZXNwZWMgCiMgMSAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMSAzCiMgNzMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKI3VuZGVmIF9fbmVlZF90aW1l X3QKIyAxMDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKI2RlZmluZSBfX3RpbWVzcGVjX2RlZmlu ZWQgMQoKCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25n IGludCB0dl9uc2VjOwogIH07CgoKI3VuZGVmIF9fbmVlZF90aW1lc3BlYwojIDQ1ICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKI2RlZmluZSBfX25lZWRfdGltZXZhbCAKIyAxICIvdXNy L2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDYwICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgi IDMKI3VuZGVmIF9fbmVlZF90aW1ldmFsCgojZGVmaW5lIF9TVFJVQ1RfVElNRVZBTCAxCgoKCgpz dHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3Qg dHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgp0eXBl ZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CiNkZWZpbmUgX19zdXNlY29uZHNfdF9kZWZp bmVkIAoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKI2RlZmluZSBfX05GREJJVFMg KDggKiBzaXplb2YgKF9fZmRfbWFzaykpCiNkZWZpbmUgX19GREVMVChkKSAoKGQpIC8gX19ORkRC SVRTKQojZGVmaW5lIF9fRkRNQVNLKGQpICgoX19mZF9tYXNrKSAxIDw8ICgoZCkgJSBfX05GREJJ VFMpKQoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNb MTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CiNkZWZpbmUgX19GRFNfQklUUyhzZXQp ICgoc2V0KS0+X19mZHNfYml0cykKCiAgfSBmZF9zZXQ7CgoKI2RlZmluZSBGRF9TRVRTSVpFIF9f RkRfU0VUU0laRQoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCiNkZWZpbmUgTkZEQklU UyBfX05GREJJVFMKCgoKCiNkZWZpbmUgRkRfU0VUKGZkLGZkc2V0cCkgX19GRF9TRVQgKGZkLCBm ZHNldHApCiNkZWZpbmUgRkRfQ0xSKGZkLGZkc2V0cCkgX19GRF9DTFIgKGZkLCBmZHNldHApCiNk ZWZpbmUgRkRfSVNTRVQoZmQsZmRzZXRwKSBfX0ZEX0lTU0VUIChmZCwgZmRzZXRwKQojZGVmaW5l IEZEX1pFUk8oZmRzZXRwKSBfX0ZEX1pFUk8gKGZkc2V0cCkKCgoKCgoKCgoKZXh0ZXJuIGludCBz ZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAg ICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAg ICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDExOCAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMwoKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMSAiL3Vzci9pbmNsdWRl L3N5cy9zeXNtYWNyb3MuaCIgMwojZGVmaW5lIF9TWVNfU1lTTUFDUk9TX0ggMQoKCgoKCgojZGVm aW5lIG1ham9yKGRldikgKChpbnQpKCgoZGV2KSA+PiA4KSAmIDB4ZmYpKQojZGVmaW5lIG1pbm9y KGRldikgKChpbnQpKChkZXYpICYgMHhmZikpCiNkZWZpbmUgbWFrZWRldihtYWpvcixtaW5vcikg KCgoKHVuc2lnbmVkIGludCkgKG1ham9yKSkgPDwgOCkgfCAoKHVuc2lnbmVkIGludCkgKG1pbm9y KSkpCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDIzMCAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKI2RlZmluZSBf X2Jsa2NudF90X2RlZmluZWQgCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKI2Rl ZmluZSBfX2ZzYmxrY250X3RfZGVmaW5lZCAKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNu dF90OwojZGVmaW5lIF9fZnNmaWxjbnRfdF9kZWZpbmVkIAojIDI2MiAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzCgojIDM5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0 ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2ln bmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBp bnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVi dWYpIDsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAg ICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwog ICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsK ICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJh bmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50 IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNo YXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZv aWQpIDsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCmV4dGVy biBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgOwoKCgoKCgoKZXh0ZXJuIGRvdWJs ZSBkcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgOwpleHRl cm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpl eHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChs b25nIGludCBfX3NlZWR2YWwpIDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1 bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSA7CmV4dGVybiB2b2lkIGxjb25nNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSA7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQog IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg X19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRl cm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpl eHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoK ZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs dCkgOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1 bHQpIDsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0 IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194 c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmlj dCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWws IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIDsKCmV4dGVybiBpbnQgc2VlZDQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgpleHRlcm4gaW50IGxjb25nNDhfciAo dW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKCgoKCgojZGVmaW5lIF9fbWFsbG9jX2FuZF9j YWxsb2NfZGVmaW5lZCAKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRy KSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEgIi91c3IvaW5j bHVkZS9hbGxvY2EuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojZGVmaW5l IF9BTExPQ0FfSCAxCgoKCiNkZWZpbmUgX19uZWVkX3NpemVfdCAKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBfX25lZWRf c2l6ZV90CiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9p ZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7CgoKI2RlZmluZSBhbGxvY2Eoc2l6ZSkgX19idWls dGluX2FsbG9jYSAoc2l6ZSkKCgoKIyA1NDcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoK CgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFi b3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQg YXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAo dm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykK ICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9f c2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1 dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICA7 CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0 ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBp bnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRl cm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKIyA2NzIgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf X3Jlc29sdmVkKSA7CgoKCgoKI2RlZmluZSBfX0NPTVBBUl9GTl9UIAp0eXBlZGVmIGludCAoKl9f Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwojIDY4OSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQg Kl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0 ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJu IGludCBhYnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxv bmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoj IDcxMCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251 bWVyLCBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVy biBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq X19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAq cWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpl eHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh ciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9f bmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRf ciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAg ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoK CgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4 dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVy biBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6 ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0 ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24p CiAgICAgOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9u c2UpIDsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldGxvYWRh dmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgoKIyA0MiAiLi4vZ2xv YmFsLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDMKI2RlZmluZSBfU1RSSU5HX0ggMQoKCgoKCgojZGVmaW5lIF9fbmVlZF9z aXplX3QgCiNkZWZpbmUgX19uZWVkX05VTEwgCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwojdW5kZWYgX19uZWVkX3NpemVfdAojIDM2 NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1 bmRlZiBOVUxMCgoKCgojZGVmaW5lIE5VTEwgKCh2b2lkICopMCkKCgoKCgojdW5kZWYgX19uZWVk X05VTEwKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1l bWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICpt ZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAg ICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2 b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwojIDc3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj LAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBz aXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CiMgMTIw ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBj aGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK IyAxNjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9f Y29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9f cywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFy ICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFy ICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAxODcgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqX19z dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAo Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKIyAy MTggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z dCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDIyOSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7CgoK CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90 IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAq X19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0 IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50 IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDI3MiAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMg Mjk0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAq Kl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkgOwojIDM1NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcuaCIgMwojZGVmaW5lIF9TVFJJTkdfQVJDSF91bmFsaWduZWQgMQojIDM1OCAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIF9fU1RS SU5HX0lOTElORSBleHRlcm4gX19pbmxpbmUKIyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAzCiNkZWZpbmUgX19TVFJJTkcyX1NNQUxMX0dFVDE2KHNyYyxpZHgpICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAxXSA8PCA4IHwg KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4XSkK CgojZGVmaW5lIF9fU1RSSU5HMl9TTUFMTF9HRVQzMihzcmMsaWR4KSAoKCgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAzXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4ICsgMl0p IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMp KVtpZHggKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHNyYykpW2lkeF0pCiMgOTMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwoj ZGVmaW5lIF9fc3RyaW5nMl8xYnB0cl9wKF9feCkgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKF9f eCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoX194KSA9PSAxKQoKCgoKCiNkZWZpbmUg bWVtc2V0KHMsYyxuKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYm IChuKSA8PSAxNiA/ICgobikgPT0gMSA/IF9fbWVtc2V0XzEgKHMsIGMpIDogX19tZW1zZXRfZ2Mg KHMsIGMsIG4pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYykgJiYgKGMpID09ICdcMCcgPyAo eyB2b2lkICpfX3MgPSAocyk7IF9fYnplcm8gKF9fcywgbik7IF9fczsgfSkgOiBtZW1zZXQgKHMs IGMsIG4pKSkpCiMgMTA4ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBf X21lbXNldF8xKHMsYykgKHsgdm9pZCAqX19zID0gKHMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9 IChfX3VpbnQ4X3QpIGM7IF9fczsgfSkKCgojZGVmaW5lIF9fbWVtc2V0X2djKHMsYyxuKSAoeyB2 b2lkICpfX3MgPSAocyk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0 IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBf X2MgPSAoX191aW50OF90KSAoYyk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKG4pKSB7IGNhc2Ug MTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv aWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNh c2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo dm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVk IHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChj aGFyICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsg Y2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0 KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5z aWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICop IF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq KSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVh azsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3Ug KyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVu c2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KQojIDE5MCAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19iemVybyhzLG4pIF9fYnVpbHRpbl9tZW1z ZXQgKHMsICdcMCcsIG4pCiMgMzg3ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0 ZXJuIHZvaWQgKl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwojZGVmaW5l IHN0cmNocihzLGMpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYykgJiYg KGMpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAocywgYykgOiBzdHJjaHIgKHMsIGMp KSkKIyA3NTQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cm5jcHko ZGVzdCxzcmMsbikgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpICYm IF9fYnVpbHRpbl9jb25zdGFudF9wIChuKSA/IChzdHJsZW4gKHNyYykgKyAxID49ICgoc2l6ZV90 KSAobikpID8gKGNoYXIgKikgbWVtY3B5IChkZXN0LCBzcmMsIG4pIDogc3RybmNweSAoZGVzdCwg c3JjLCBuKSkgOiBzdHJuY3B5IChkZXN0LCBzcmMsIG4pKSkKIyA3NzYgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cm5jYXQoZGVzdCxzcmMsbikgKF9fZXh0ZW5zaW9u X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChu KSA/IChzdHJsZW4gKHNyYykgPCAoKHNpemVfdCkgKG4pKSA/IHN0cmNhdCAoZGVzdCwgc3JjKSA6 IHN0cm5jYXQgKGRlc3QsIHNyYywgbikpIDogc3RybmNhdCAoZGVzdCwgc3JjLCBuKSkpCiMgNzg4 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBzdHJjbXAoczEsczIpIF9f ZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25z dGFudF9wIChzMSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiAoX19zMV9sZW4gPSBz dHJsZW4gKHMxKSwgX19zMl9sZW4gPSBzdHJsZW4gKHMyKSwgKCFfX3N0cmluZzJfMWJwdHJfcCAo czEpIHx8IF9fczFfbGVuID49IDQpICYmICghX19zdHJpbmcyXzFicHRyX3AgKHMyKSB8fCBfX3My X2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHMxKSwgKF9fY29uc3QgY2hh ciAqKSAoczIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsg MSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczEp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoczEpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChzMikgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMyKSA/IF9fc3RyY21wX2NjIChz MSwgczIsIF9fczFfbGVuKSA6IF9fc3RyY21wX2NnIChzMSwgczIsIF9fczFfbGVuKSkgOiAoX19i dWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczIpICYmIChfX3My X2xlbiA9IHN0cmxlbiAoczIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w IChzMSkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMxKSA/IF9fc3RyY21wX2NjIChzMSwgczIsIF9f czJfbGVuKSA6IF9fc3RyY21wX2djIChzMSwgczIsIF9fczJfbGVuKSkgOiBzdHJjbXAgKHMxLCBz MikpKSk7IH0pCiMgODA5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBf X3N0cmNtcF9jYyhzMSxzMixsKSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoczIpKVswXSk7 IGlmIChsID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbMV0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzFdKTsgaWYgKGwgPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoczEpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHMyKSlbMl0pOyBpZiAobCA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVszXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKQojIDgzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNk ZWZpbmUgX19zdHJjbXBfY2coczEsczIsbDEpIChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5z aWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoczIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVswXSAtIF9fczJbMF0pOyBpZiAobDEgPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoczEpKVsxXSAtIF9fczJbMV0pOyBpZiAobDEgPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoczEpKVsyXSAtIF9fczJbMl0pOyBpZiAobDEgPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHMxKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkKIyA4NTggIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIF9fc3RyY21wX2djKHMxLHMyLGwyKSAoX19l eHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHMyKSlbMF07IGlmIChsMiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsx XSk7IGlmIChsMiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsyXSk7IGlm IChsMiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKQojIDg4NyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgc3Ry bmNtcChzMSxzMixuKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYm ICgoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBzdHJsZW4gKHMxKSA8ICgoc2l6ZV90KSAo bikpKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiBzdHJsZW4gKHMyKSA8ICgoc2l6 ZV90KSAobikpKSkgPyBzdHJjbXAgKHMxLCBzMikgOiBzdHJuY21wIChzMSwgczIsIG4pKSkKIyA5 MDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cmNzcG4ocyxyZWpl Y3QpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX3IwLCBfX3IxLCBfX3IyOyAoX19idWlsdGluX2Nv bnN0YW50X3AgKHJlamVjdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHJlamVjdCkgPyAoKF9fcjAg PSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0sIF9fcjAgPT0gJ1wwJykgPyBzdHJsZW4g KHMpIDogKChfX3IxID0gKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzFdLCBfX3IxID09ICdc MCcpID8gX19zdHJjc3BuX2MxIChzLCBfX3IwKSA6ICgoX19yMiA9ICgoX19jb25zdCBjaGFyICop IChyZWplY3QpKVsyXSwgX19yMiA9PSAnXDAnKSA/IF9fc3RyY3Nwbl9jMiAocywgX19yMCwgX19y MSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzNdID09ICdcMCcgPyBfX3N0cmNzcG5f YzMgKHMsIF9fcjAsIF9fcjEsIF9fcjIpIDogc3RyY3NwbiAocywgcmVqZWN0KSkpKSkgOiBzdHJj c3BuIChzLCByZWplY3QpKTsgfSkKIyA5MTcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIg MwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MxIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0 ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0g X19yZWplY3QpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9f aW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWpl Y3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0Mik7 CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs dCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsr X19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyLCBpbnQgX19yZWplY3QzKTsK ZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19yZWplY3QxLCBpbnQgX19yZWplY3QyLAogICAgICAgICAgICAgIGludCBfX3JlamVjdDMp CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRd ICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19f cmVzdWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICAr K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKCgoKI2RlZmluZSBzdHJzcG4ocyxh Y2NlcHQpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGlu X2NvbnN0YW50X3AgKGFjY2VwdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKGFjY2VwdCkgPyAoKF9f YTAgPSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMF0sIF9fYTAgPT0gJ1wwJykgPyAoKHZv aWQpIChzKSwgMCkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMV0sIF9f YTEgPT0gJ1wwJykgPyBfX3N0cnNwbl9jMSAocywgX19hMCkgOiAoKF9fYTIgPSAoKF9fY29uc3Qg Y2hhciAqKSAoYWNjZXB0KSlbMl0sIF9fYTIgPT0gJ1wwJykgPyBfX3N0cnNwbl9jMiAocywgX19h MCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzNdID09ICdcMCcgPyBfX3N0 cnNwbl9jMyAocywgX19hMCwgX19hMSwgX19hMikgOiBzdHJzcG4gKHMsIGFjY2VwdCkpKSkpIDog c3Ryc3BuIChzLCBhY2NlcHQpKTsgfSkKIyA5NzQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs dCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jlc3Vs dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5f YzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApf X3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2Vw dDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVz dWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAgICArK19f cmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0 cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRl cm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0MykKewogIHJlZ2lzdGVyIHNpemVf dCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBf X3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCiNkZWZp bmUgc3RycGJyayhzLGFjY2VwdCkgX19leHRlbnNpb25fXyAoeyBjaGFyIF9fYTAsIF9fYTEsIF9f YTI7IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWNjZXB0KSAmJiBfX3N0cmluZzJfMWJwdHJfcCAo YWNjZXB0KSA/ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVswXSwgX19hMCA9 PSAnXDAnKSA/ICgodm9pZCkgKHMpLCBOVUxMKSA6ICgoX19hMSA9ICgoX19jb25zdCBjaGFyICop IChhY2NlcHQpKVsxXSwgX19hMSA9PSAnXDAnKSA/IHN0cmNociAocywgX19hMCkgOiAoKF9fYTIg PSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMl0sIF9fYTIgPT0gJ1wwJykgPyBfX3N0cnBi cmtfYzIgKHMsIF9fYTAsIF9fYTEpIDogKCgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVszXSA9 PSAnXDAnID8gX19zdHJwYnJrX2MzIChzLCBfX2EwLCBfX2ExLCBfX2EyKSA6IHN0cnBicmsgKHMs IGFjY2VwdCkpKSkpIDogc3RycGJyayAocywgYWNjZXB0KSk7IH0pCiMgMTAzMSAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19z dHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0 MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3Mg IT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAq KTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z dHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykK ewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0g X19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytfX3M7CiAgcmV0 dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9 CiMgMTA3NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19zdHJ0b2tf cihzLHNlcCxuZXh0cCkgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzZXAp ICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzZXApID8gKCgoX19jb25zdCBjaGFyICopIChzZXApKVsw XSAhPSAnXDAnICYmICgoX19jb25zdCBjaGFyICopIChzZXApKVsxXSA9PSAnXDAnID8gX19zdHJ0 b2tfcl8xYyAocywgKChfX2NvbnN0IGNoYXIgKikgKHNlcCkpWzBdLCBuZXh0cCkgOiBfX3N0cnRv a19yIChzLCBzZXAsIG5leHRwKSkgOiBfX3N0cnRva19yIChzLCBzZXAsIG5leHRwKSkpCiMgMTA4 MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpf X3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0 ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAs IGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQg KikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytf X3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcyAhPSAnXDAnKQogICAgewog ICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnKQogICAgICAg IGlmICgqX19zKysgPT0gX19zZXApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fc1stMV0gPSAn XDAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgKl9fbmV4dHAgPSBfX3M7 CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgojZGVmaW5lIHN0cnRva19yKHMsc2VwLG5leHRw KSBfX3N0cnRva19yIChzLCBzZXAsIG5leHRwKQoKCgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ryc2Vw X2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiNkZWZpbmUgX19z dHJzZXAocyxyZWplY3QpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX3IwLCBfX3IxLCBfX3IyOyAo X19idWlsdGluX2NvbnN0YW50X3AgKHJlamVjdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHJlamVj dCkgJiYgKF9fcjAgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0sICgoX19jb25zdCBj aGFyICopIChyZWplY3QpKVswXSAhPSAnXDAnKSA/ICgoX19yMSA9ICgoX19jb25zdCBjaGFyICop IChyZWplY3QpKVsxXSwgKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzFdID09ICdcMCcpID8g X19zdHJzZXBfMWMgKHMsIF9fcjApIDogKChfX3IyID0gKChfX2NvbnN0IGNoYXIgKikgKHJlamVj dCkpWzJdLCBfX3IyID09ICdcMCcpID8gX19zdHJzZXBfMmMgKHMsIF9fcjAsIF9fcjEpIDogKCgo X19jb25zdCBjaGFyICopIChyZWplY3QpKVszXSA9PSAnXDAnID8gX19zdHJzZXBfM2MgKHMsIF9f cjAsIF9fcjEsIF9fcjIpIDogX19zdHJzZXBfZyAocywgcmVqZWN0KSkpKSA6IF9fc3Ryc2VwX2cg KHMsIHJlamVjdCkpOyB9KQojIDExMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpl eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl Y3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFy IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3Jl dHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoX19yZWplY3QpICYmIChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9f cmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWpl Y3QpKSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19y ZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf X3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7 CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZv aWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAg ICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2Nw ID09IF9fcmVqZWN0MikKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAn OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAg ICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVj dDEsIGNoYXIgX19yZWplY3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAq Kl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewog IHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lk ICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAg d2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9 PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0gX19yZWplY3QzKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJl dHVybiBfX3JldHZhbDsKfQoKI2RlZmluZSBzdHJzZXAocyxyZWplY3QpIF9fc3Ryc2VwIChzLCBy ZWplY3QpCiMgMTIwOCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19u ZWVkX21hbGxvY19hbmRfY2FsbG9jIAoKCgoKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25z dCBjaGFyICpfX3N0cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKI2RlZmluZSBf X3N0cmR1cChzKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHMpICYmIF9f c3RyaW5nMl8xYnB0cl9wIChzKSA/ICgoKF9fY29uc3QgY2hhciAqKSAocykpWzBdID09ICdcMCcg PyAoY2hhciAqKSBjYWxsb2MgKDEsIDEpIDogKHsgc2l6ZV90IF9fbGVuID0gc3RybGVuIChzKSAr IDE7IGNoYXIgKl9fcmV0dmFsID0gKGNoYXIgKikgbWFsbG9jIChfX2xlbik7IGlmIChfX3JldHZh bCAhPSBOVUxMKSBfX3JldHZhbCA9IChjaGFyICopIG1lbWNweSAoX19yZXR2YWwsIHMsIF9fbGVu KTsgX19yZXR2YWw7IH0pKSA6IF9fc3RyZHVwIChzKSkpCiMgMTIyNyAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgc3RyZHVwKHMpIF9fc3RyZHVwIChzKQoKCgoKCmV4dGVy biBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKI2RlZmluZSBfX3N0cm5kdXAocyxuKSAo X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHMpICYmIF9fc3RyaW5nMl8xYnB0 cl9wIChzKSA/ICgoKF9fY29uc3QgY2hhciAqKSAocykpWzBdID09ICdcMCcgPyAoY2hhciAqKSBj YWxsb2MgKDEsIDEpIDogKHsgc2l6ZV90IF9fbGVuID0gc3RybGVuIChzKSArIDE7IHNpemVfdCBf X24gPSAobik7IGNoYXIgKl9fcmV0dmFsOyBpZiAoX19uIDwgX19sZW4pIF9fbGVuID0gX19uICsg MTsgX19yZXR2YWwgPSAoY2hhciAqKSBtYWxsb2MgKF9fbGVuKTsgaWYgKF9fcmV0dmFsICE9IE5V TEwpIHsgX19yZXR2YWxbX19sZW4gLSAxXSA9ICdcMCc7IF9fcmV0dmFsID0gKGNoYXIgKikgbWVt Y3B5IChfX3JldHZhbCwgcywgX19sZW4gLSAxKTsgfSBfX3JldHZhbDsgfSkpIDogX19zdHJuZHVw IChzLCBuKSkpCiMgMTI2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiN1bmRlZiBf X1NUUklOR19JTkxJTkUKIyAzNjEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDQz ICIuLi9nbG9iYWwuaCIgMgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI3ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCiNkZWZpbmUgX1RJTUVfSCAxCgoKCgoKCgoKI2RlZmluZSBfX25l ZWRfc2l6ZV90IAojZGVmaW5lIF9fbmVlZF9OVUxMIAojIDEgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF9zaXplX3QK IyAzNjQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIg MwojdW5kZWYgTlVMTAoKCgoKI2RlZmluZSBOVUxMICgodm9pZCAqKTApCgoKCgoKI3VuZGVmIF9f bmVlZF9OVUxMCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwoj ZGVmaW5lIF9CSVRTX1RJTUVfSCAxCgoKCgoKCgojZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAw MDBsCgoKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3lzY29uZiAoaW50KTsKI2RlZmluZSBDTEtfVENL ICgoX19jbG9ja190KSBfX3N5c2NvbmYgKDIpKQoKCgoKI2RlZmluZSBDTE9DS19SRUFMVElNRSAw CgojZGVmaW5lIENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCAyCgojZGVmaW5lIENMT0NLX1RIUkVB RF9DUFVUSU1FX0lEIDMKCgojZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQojIDQzICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojZGVmaW5lIF9fY2xv Y2tfdF9kZWZpbmVkIDEKCgoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgMTE4ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWlu OwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3ll YXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9u ZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1 Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0 cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRl cm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRp bWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoK CgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpf X3Jlc3RyaWN0IF9fdHApIDsKIyAxOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHN0 cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpleHRlcm4gc3Ry dWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgpleHRlcm4g c3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSA7 CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0 cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpf X3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVj dCB0bSAqX190cCkgOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGlt ZXIpIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9f cmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf X2J1ZikgOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmlj dCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Zikg OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4 dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIDsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJu IGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90 ICpfX3doZW4pIDsKCgoKCgojZGVmaW5lIF9faXNsZWFwKHllYXIpICgoeWVhcikgJSA0ID09IDAg JiYgKCh5ZWFyKSAlIDEwMCAhPSAwIHx8ICh5ZWFyKSAlIDQwMCA9PSAwKSkKIyAyNzEgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkg OwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4g aW50IGR5c2l6ZSAoaW50IF9feWVhcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK CmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0 ZWRfdGltZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5p bmcpIDsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSA7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9j a2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSA7CgoKZXh0ZXJuIGludCBj bG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKl9fdHApCiAgICAgOwojIDMwOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50 IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAg ICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgOwoKCmV4dGVybiBpbnQgdGlt ZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkgOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1 ZSkgOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVj dCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIDsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJy dW4gKHRpbWVyX3QgX190aW1lcmlkKSA7CiMgMzYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoj IDQ0ICIuLi9nbG9iYWwuaCIgMgoKIyAxICIuLi90b29sYm94L21lbW9yeS5oIiAxCiMgMTUgIi4u L3Rvb2xib3gvbWVtb3J5LmgiCiNkZWZpbmUgQ09ERU1NQVAgCgojZGVmaW5lIEFMSUdOKHBvcyxz aXplKSAoICggKChwb3MpKyhzaXplKS0xKSAvIChzaXplKSkqKHNpemUpICkKI2RlZmluZSBQQURE SU5HKHBvcyxzaXplKSAoIEFMSUdOKChwb3MpLChzaXplKSkgLSAocG9zKSApCiNkZWZpbmUgT0ZG U0VUKHMsZWwpICggKGludCkgKCAoc2l6ZV90KSAmKCAoKHMqKTApIC0+IGVsICkgKSApCgoKI2Rl ZmluZSBORVcodHlwZSkgKCh0eXBlKikgbWVtX2FsbG9jICggc2l6ZW9mKHR5cGUpICkpCiNkZWZp bmUgRlJFRShwdHIsdHlwZSkgbWVtX2ZyZWUgKHB0ciwgc2l6ZW9mKHR5cGUpICkKCiNkZWZpbmUg TE5FVyh0eXBlKSAoKHR5cGUqKSBsaXRfbWVtX2FsbG9jICggc2l6ZW9mKHR5cGUpICkpCiNkZWZp bmUgTEZSRUUocHRyLHR5cGUpIGxpdF9tZW1fZnJlZSAocHRyLCBzaXplb2YodHlwZSkgKQoKI2Rl ZmluZSBNTkVXKHR5cGUsbnVtKSAoKHR5cGUqKSBtZW1fYWxsb2MgKCBzaXplb2YodHlwZSkgKiAo bnVtKSApKQojZGVmaW5lIE1GUkVFKHB0cix0eXBlLG51bSkgbWVtX2ZyZWUgKHB0ciwgc2l6ZW9m KHR5cGUpICogKG51bSkgKQojZGVmaW5lIE1SRUFMTE9DKHB0cix0eXBlLG51bTEsbnVtMikgbWVt X3JlYWxsb2MgKHB0ciwgc2l6ZW9mKHR5cGUpICogKG51bTEpLCBzaXplb2YodHlwZSkgKiAobnVt MikgKQoKCiNkZWZpbmUgRE5FVyh0eXBlKSAoKHR5cGUqKSBkdW1wX2FsbG9jICggc2l6ZW9mKHR5 cGUpICkpCiNkZWZpbmUgRE1ORVcodHlwZSxudW0pICgodHlwZSopIGR1bXBfYWxsb2MgKCBzaXpl b2YodHlwZSkgKiAobnVtKSApKQojZGVmaW5lIERNUkVBTExPQyhwdHIsdHlwZSxudW0xLG51bTIp IGR1bXBfcmVhbGxvYyAocHRyLCBzaXplb2YodHlwZSkqKG51bTEpLCBzaXplb2YodHlwZSkgKiAo bnVtMikgKQoKCiNkZWZpbmUgTUNPUFkoZGVzdCxzcmMsdHlwZSxudW0pIG1lbWNweSAoZGVzdCxz cmMsIHNpemVvZih0eXBlKSogKG51bSkgKQoKCiNkZWZpbmUgQ05FVyh0eXBlLG51bSkgKCh0eXBl KikgbWVtX21tYXAgKCBzaXplb2YodHlwZSkgKiAobnVtKSApKQojZGVmaW5lIENGUkVFKHB0cixu dW0pIAoKCgoKCnZvaWQgKm1lbV9hbGxvYyhpbnQgbGVuZ3RoKTsKdm9pZCAqbWVtX21tYXAoaW50 IGxlbmd0aCk7CnZvaWQgKmxpdF9tZW1fYWxsb2MoaW50IGxlbmd0aCk7CnZvaWQgbWVtX2ZyZWUo dm9pZCAqbSwgaW50IGxlbmd0aCk7CnZvaWQgbGl0X21lbV9mcmVlKHZvaWQgKm0sIGludCBsZW5n dGgpOwp2b2lkICptZW1fcmVhbGxvYyh2b2lkICptLCBpbnQgbGVuMSwgaW50IGxlbjIpOwpsb25n IGludCBtZW1fdXNhZ2UoKTsKCnZvaWQgKmR1bXBfYWxsb2MoaW50IGxlbmd0aCk7CnZvaWQgKmR1 bXBfcmVhbGxvYyh2b2lkICptLCBpbnQgbGVuMSwgaW50IGxlbjIpOwpsb25nIGludCBkdW1wX3Np emUoKTsKdm9pZCBkdW1wX3JlbGVhc2UobG9uZyBpbnQgc2l6ZSk7Cgp2b2lkIG1lbV91c2FnZWxv ZyhpbnQgZ2l2ZXdhcm5pbmdzKTsKIyA0NiAiLi4vZ2xvYmFsLmgiIDIKIyAxICIuLi90b29sYm94 L2NoYWluLmgiIDEKIyAxNSAiLi4vdG9vbGJveC9jaGFpbi5oIgp0eXBlZGVmIHN0cnVjdCBjaGFp bmxpbmsgewogICAgICAgIHN0cnVjdCBjaGFpbmxpbmsgKm5leHQsKnByZXY7CiAgICAgICAgdm9p ZCAqZWxlbWVudDsKICAgICAgICB9IGNoYWlubGluazsKCnR5cGVkZWYgc3RydWN0IGNoYWluIHsK ICAgICAgICBpbnQgdXNlZHVtcDsKCiAgICAgICAgY2hhaW5saW5rICpmaXJzdCwqbGFzdDsKICAg ICAgICBjaGFpbmxpbmsgKmFjdGl2ZTsKICAgICAgICB9IGNoYWluOwoKCmNoYWluICpjaGFpbl9u ZXcgKCk7CmNoYWluICpjaGFpbl9kbmV3ICgpOwp2b2lkIGNoYWluX2ZyZWUoY2hhaW4gKmMpOwoK dm9pZCBjaGFpbl9hZGRhZnRlcihjaGFpbiAqYywgdm9pZCAqZWxlbWVudCk7CnZvaWQgY2hhaW5f YWRkYmVmb3JlKGNoYWluICpjLCB2b2lkICplbGVtZW50KTsKdm9pZCBjaGFpbl9hZGRsYXN0IChj aGFpbiAqYywgdm9pZCAqZWxlbWVudCk7CnZvaWQgY2hhaW5fYWRkZmlyc3QgKGNoYWluICpjLCB2 b2lkICplbGVtZW50KTsKCnZvaWQgY2hhaW5fcmVtb3ZlKGNoYWluICpjKTsKdm9pZCAqY2hhaW5f cmVtb3ZlX2dvX3ByZXYoY2hhaW4gKmMpOwp2b2lkIGNoYWluX3JlbW92ZXNwZWNpZmljKGNoYWlu ICpjLCB2b2lkICplbGVtZW50KTsKCnZvaWQgKmNoYWluX25leHQoY2hhaW4gKmMpOwp2b2lkICpj aGFpbl9wcmV2KGNoYWluICpjKTsKdm9pZCAqY2hhaW5fdGhpcyhjaGFpbiAqYyk7Cgp2b2lkICpj aGFpbl9maXJzdChjaGFpbiAqYyk7CnZvaWQgKmNoYWluX2xhc3QoY2hhaW4gKmMpOwojIDQ3ICIu Li9nbG9iYWwuaCIgMgojIDEgIi4uL3Rvb2xib3gvbGlzdC5oIiAxCiMgMTUgIi4uL3Rvb2xib3gv bGlzdC5oIgp0eXBlZGVmIHN0cnVjdCBsaXN0bm9kZSB7CiAgICAgICAgc3RydWN0IGxpc3Rub2Rl ICpuZXh0LCpwcmV2OwogICAgICAgIH0gbGlzdG5vZGU7Cgp0eXBlZGVmIHN0cnVjdCBsaXN0IHsK ICAgICAgICBsaXN0bm9kZSAqZmlyc3QsKmxhc3Q7CiAgICAgICAgaW50IG5vZGVvZmZzZXQ7CiAg ICAgICAgfSBsaXN0OwoKCnZvaWQgbGlzdF9pbml0IChsaXN0ICpsLCBpbnQgbm9kZW9mZnNldCk7 Cgp2b2lkIGxpc3RfYWRkbGFzdCAobGlzdCAqbCwgdm9pZCAqZWxlbWVudCk7CnZvaWQgbGlzdF9h ZGRmaXJzdCAobGlzdCAqbCwgdm9pZCAqZWxlbWVudCk7Cgp2b2lkIGxpc3RfcmVtb3ZlIChsaXN0 ICpsLCB2b2lkICplbGVtZW50KTsKCnZvaWQgKmxpc3RfZmlyc3QgKGxpc3QgKmwpOwp2b2lkICps aXN0X2xhc3QgKGxpc3QgKmwpOwoKdm9pZCAqbGlzdF9uZXh0IChsaXN0ICpsLCB2b2lkICplbGVt ZW50KTsKdm9pZCAqbGlzdF9wcmV2IChsaXN0ICpsLCB2b2lkICplbGVtZW50KTsKIyA0OCAiLi4v Z2xvYmFsLmgiIDIKIyAxICIuLi90b29sYm94L2xvZ2luZy5oIiAxCiMgMTUgIi4uL3Rvb2xib3gv bG9naW5nLmgiCiNkZWZpbmUgUEFOSUNJRih3aGVuLHR4dCkgaWYod2hlbilwYW5pYyh0eHQpCgoj ZGVmaW5lIE1BWExPR1RFWFQgNTAwCmV4dGVybiBjaGFyIGxvZ3RleHRbNTAwXTsKCnZvaWQgbG9n X2luaXQoY2hhciAqZm5hbWUpOwp2b2lkIGxvZ190ZXh0KGNoYXIgKnR4dCk7Cgp2b2lkIGxvZ19j cHV0aW1lKCk7Cgp2b2lkIGRvbG9nKCk7CnZvaWQgZXJyb3IoKTsKdm9pZCBwYW5pYyhjaGFyICp0 eHQpOwoKbG9uZyBpbnQgZ2V0Y3B1dGltZSgpOwojIDQ5ICIuLi9nbG9iYWwuaCIgMgoKCgojIDEg Ii4uL2kzODYvdHlwZXMuaCIgMQojIDE5ICIuLi9pMzg2L3R5cGVzLmgiCiNkZWZpbmUgX0NBQ0FP X1RZUEVTX0ggCgojZGVmaW5lIFBPSU5URVJTSVpFIDgKI2RlZmluZSBXT1JEU19CSUdFTkRJQU4g MAoKI2RlZmluZSBTVVBQT1JUX0RJVklTSU9OIDAKI2RlZmluZSBTVVBQT1JUX0xPTkcgMQojZGVm aW5lIFNVUFBPUlRfRkxPQVQgMQojZGVmaW5lIFNVUFBPUlRfRE9VQkxFIDEKCiNkZWZpbmUgU1VQ UE9SVF9MT05HX0FERCAxCiNkZWZpbmUgU1VQUE9SVF9MT05HX0NNUCAxCiNkZWZpbmUgU1VQUE9S VF9MT05HX0xPRyAxCiNkZWZpbmUgU1VQUE9SVF9MT05HX1NISUZUIDEKI2RlZmluZSBTVVBQT1JU X0xPTkdfTVVMRElWIDEKI2RlZmluZSBTVVBQT1JUX0xPTkdfSUNWVCAxCiNkZWZpbmUgU1VQUE9S VF9MT05HX0ZDVlQgMQoKI2RlZmluZSBDT05ESVRJT05BTF9MT0FEQ09OU1QgCgojZGVmaW5lIFU4 X0FWQUlMQUJMRSAxCgoKdHlwZWRlZiBzaWduZWQgY2hhciBzMTsKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHUxOwoKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IHMyOwp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCB1MjsKCnR5cGVkZWYgc2lnbmVkIGludCBzNDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dTQ7CgoKdHlwZWRlZiBzaWduZWQgbG9uZyBpbnQgczg7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp bnQgdTg7CiMgNTMgIi4uL2dsb2JhbC5oIiAyCgoKCgp0eXBlZGVmIHZvaWQgKnZvaWRwdHI7Cgp0 eXBlZGVmIGludCBib29sOwoKI2RlZmluZSB0cnVlIDEKI2RlZmluZSBmYWxzZSAwCgojZGVmaW5l IFBSSU1JVElWRVRZUEVfQ09VTlQgOQoKdHlwZWRlZiB2b2lkICgqZnVuY3Rpb25wdHIpICgpOwoK CiNkZWZpbmUgTUFYX0FMSUdOIDgKCgoKCnZvaWQgY2FjYW9fc2h1dGRvd24oczQgc3RhdHVzKTsK CgoKCiNkZWZpbmUgVFlQRV9JTlQgMAojZGVmaW5lIFRZUEVfTE9ORyAxCiNkZWZpbmUgVFlQRV9G TE9BVCAyCiNkZWZpbmUgVFlQRV9ET1VCTEUgMwojZGVmaW5lIFRZUEVfQUREUkVTUyA0CgojZGVm aW5lIFRZUEVfVk9JRCAxMAoKCgoKI2RlZmluZSBNQUdJQyAweGNhZmViYWJlCiNkZWZpbmUgTUlO T1JfVkVSU0lPTiAzCiNkZWZpbmUgTUFKT1JfVkVSU0lPTiA0NQoKI2RlZmluZSBDT05TVEFOVF9D bGFzcyA3CiNkZWZpbmUgQ09OU1RBTlRfRmllbGRyZWYgOQojZGVmaW5lIENPTlNUQU5UX01ldGhv ZHJlZiAxMAojZGVmaW5lIENPTlNUQU5UX0ludGVyZmFjZU1ldGhvZHJlZiAxMQojZGVmaW5lIENP TlNUQU5UX1N0cmluZyA4CiNkZWZpbmUgQ09OU1RBTlRfSW50ZWdlciAzCiNkZWZpbmUgQ09OU1RB TlRfRmxvYXQgNAojZGVmaW5lIENPTlNUQU5UX0xvbmcgNQojZGVmaW5lIENPTlNUQU5UX0RvdWJs ZSA2CiNkZWZpbmUgQ09OU1RBTlRfTmFtZUFuZFR5cGUgMTIKI2RlZmluZSBDT05TVEFOVF9VdGY4 IDEKCiNkZWZpbmUgQ09OU1RBTlRfQXJyYXlkZXNjcmlwdG9yIDEzCiNkZWZpbmUgQ09OU1RBTlRf VU5VU0VEIDAKCiNkZWZpbmUgQUNDX1BVQkxJQyAweDAwMDEKI2RlZmluZSBBQ0NfUFJJVkFURSAw eDAwMDIKI2RlZmluZSBBQ0NfUFJPVEVDVEVEIDB4MDAwNAojZGVmaW5lIEFDQ19TVEFUSUMgMHgw MDA4CiNkZWZpbmUgQUNDX0ZJTkFMIDB4MDAxMAojZGVmaW5lIEFDQ19TWU5DSFJPTklaRUQgMHgw MDIwCiNkZWZpbmUgQUNDX1ZPTEFUSUxFIDB4MDA0MAojZGVmaW5lIEFDQ19UUkFOU0lFTlQgMHgw MDgwCiNkZWZpbmUgQUNDX05BVElWRSAweDAxMDAKI2RlZmluZSBBQ0NfSU5URVJGQUNFIDB4MDIw MAojZGVmaW5lIEFDQ19BQlNUUkFDVCAweDA0MDAKCgoKCnR5cGVkZWYgc3RydWN0IHV0ZiB1dGY7 CnR5cGVkZWYgc3RydWN0IGxpdGVyYWxzdHJpbmcgbGl0ZXJhbHN0cmluZzsKdHlwZWRlZiBzdHJ1 Y3QgamF2YV9vYmplY3RoZWFkZXIgamF2YV9vYmplY3RoZWFkZXI7CnR5cGVkZWYgc3RydWN0IGNs YXNzaW5mbyBjbGFzc2luZm87CnR5cGVkZWYgc3RydWN0IHZmdGJsIHZmdGJsOwp0eXBlZGVmIHUx KiBtZXRob2RwdHI7CiMgMjA5ICIuLi9nbG9iYWwuaCIKc3RydWN0IHV0ZiB7CiAgICAgICAgdXRm ICpoYXNobGluazsKICAgICAgICBpbnQgYmxlbmd0aDsKICAgICAgICBjaGFyICp0ZXh0Owp9OwoK CgpzdHJ1Y3QgbGl0ZXJhbHN0cmluZyB7CiAgICAgICAgbGl0ZXJhbHN0cmluZyAqaGFzaGxpbms7 CiAgICAgICAgamF2YV9vYmplY3RoZWFkZXIgKnN0cmluZzsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogIHU0IHNpemU7CiAgdTQgZW50cmllczsKICB2b2lkICoqcHRyOwp9IGhhc2h0YWJsZTsKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNsYXNzaW5mbyAqY2xhc3M7CiAgICAgICAgdXRmICpu YW1lOwogICAgICAgIHV0ZiAqZGVzY3JpcHRvcjsKfSBjb25zdGFudF9GTUlyZWY7Cgp0eXBlZGVm IHN0cnVjdCB7CiAgICAgICAgczQgdmFsdWU7Cn0gY29uc3RhbnRfaW50ZWdlcjsKCnR5cGVkZWYg c3RydWN0IHsKICAgICAgICBmbG9hdCB2YWx1ZTsKfSBjb25zdGFudF9mbG9hdDsKCnR5cGVkZWYg c3RydWN0IHsKICAgICAgICBzOCB2YWx1ZTsKfSBjb25zdGFudF9sb25nOwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgICAgIGRvdWJsZSB2YWx1ZTsKfSBjb25zdGFudF9kb3VibGU7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICAgICAgdXRmICpuYW1lOwogICAgICAgIHV0ZiAqZGVzY3JpcHRvcjsKfSBjb25z dGFudF9uYW1lYW5kdHlwZTsKIyAyNjYgIi4uL2dsb2JhbC5oIgp0eXBlZGVmIHN0cnVjdCBjb25z dGFudF9hcnJheWRlc2NyaXB0b3IgewogICAgICAgIGludCBhcnJheXR5cGU7CiAgICAgICAgY2xh c3NpbmZvICpvYmplY3RjbGFzczsKICAgICAgICBzdHJ1Y3QgY29uc3RhbnRfYXJyYXlkZXNjcmlw dG9yICplbGVtZW50ZGVzY3JpcHRvcjsKfSBjb25zdGFudF9hcnJheWRlc2NyaXB0b3I7CiMgMjgx ICIuLi9nbG9iYWwuaCIKc3RydWN0IGphdmFfb2JqZWN0aGVhZGVyIHsKICAgICAgICB2ZnRibCAq dmZ0Ymw7Cn07CiMgMjk1ICIuLi9nbG9iYWwuaCIKI2RlZmluZSBBUlJBWVRZUEVfSU5UIDAKI2Rl ZmluZSBBUlJBWVRZUEVfTE9ORyAxCiNkZWZpbmUgQVJSQVlUWVBFX0ZMT0FUIDIKI2RlZmluZSBB UlJBWVRZUEVfRE9VQkxFIDMKI2RlZmluZSBBUlJBWVRZUEVfQllURSA0CiNkZWZpbmUgQVJSQVlU WVBFX0NIQVIgNQojZGVmaW5lIEFSUkFZVFlQRV9TSE9SVCA2CiNkZWZpbmUgQVJSQVlUWVBFX0JP T0xFQU4gNwojZGVmaW5lIEFSUkFZVFlQRV9PQkpFQ1QgOAojZGVmaW5lIEFSUkFZVFlQRV9BUlJB WSA5Cgp0eXBlZGVmIHN0cnVjdCBqYXZhX2FycmF5aGVhZGVyIHsKICAgICAgICBqYXZhX29iamVj dGhlYWRlciBvYmpoZWFkZXI7CiAgICAgICAgczQgc2l6ZTsKCiAgICAgICAgczQgYWxpZ25lZHNp emU7CgogICAgICAgIHM0IGFycmF5dHlwZTsKfSBqYXZhX2FycmF5aGVhZGVyOwoKCgoKCnR5cGVk ZWYgc3RydWN0IGphdmFfY2hhcmFycmF5IHsKICAgICAgICBqYXZhX2FycmF5aGVhZGVyIGhlYWRl cjsKICAgICAgICB1MiBkYXRhWzFdOwp9IGphdmFfY2hhcmFycmF5OwoKdHlwZWRlZiBzdHJ1Y3Qg amF2YV9mbG9hdGhlYWRlciB7CiAgICAgICAgamF2YV9hcnJheWhlYWRlciBoZWFkZXI7CiAgICAg ICAgZmxvYXQgZGF0YVsxXTsKfSBqYXZhX2Zsb2F0YXJyYXk7Cgp0eXBlZGVmIHN0cnVjdCBqYXZh X2RvdWJsZWFycmF5IHsKICAgICAgICBqYXZhX2FycmF5aGVhZGVyIGhlYWRlcjsKICAgICAgICBk b3VibGUgZGF0YVsxXTsKfSBqYXZhX2RvdWJsZWFycmF5OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgamF2 YV9ib29sZWFuYXJyYXkgewogICAgICAgIGphdmFfYXJyYXloZWFkZXIgaGVhZGVyOwogICAgICAg IHUxIGRhdGFbMV07Cn0gamF2YV9ib29sZWFuYXJyYXk7Cgp0eXBlZGVmIHN0cnVjdCBqYXZhX2J5 dGVhcnJheSB7CiAgICAgICAgamF2YV9hcnJheWhlYWRlciBoZWFkZXI7CiAgICAgICAgczEgZGF0 YVsxXTsKfSBqYXZhX2J5dGVhcnJheTsKCnR5cGVkZWYgc3RydWN0IGphdmFfc2hvcnRhcnJheSB7 CiAgICAgICAgamF2YV9hcnJheWhlYWRlciBoZWFkZXI7CiAgICAgICAgczIgZGF0YVsxXTsKfSBq YXZhX3Nob3J0YXJyYXk7Cgp0eXBlZGVmIHN0cnVjdCBqYXZhX2ludGFycmF5IHsKICAgICAgICBq YXZhX2FycmF5aGVhZGVyIGhlYWRlcjsKICAgICAgICBzNCBkYXRhWzFdOwp9IGphdmFfaW50YXJy YXk7Cgp0eXBlZGVmIHN0cnVjdCBqYXZhX2xvbmdhcnJheSB7CiAgICAgICAgamF2YV9hcnJheWhl YWRlciBoZWFkZXI7CiAgICAgICAgczggZGF0YVsxXTsKfSBqYXZhX2xvbmdhcnJheTsKCgoKCnR5 cGVkZWYgc3RydWN0IGphdmFfb2JqZWN0YXJyYXkgewogICAgICAgIGphdmFfYXJyYXloZWFkZXIg aGVhZGVyOwogICAgICAgIGNsYXNzaW5mbyAqZWxlbWVudHR5cGU7CiAgICAgICAgamF2YV9vYmpl Y3RoZWFkZXIgKmRhdGFbMV07Cn0gamF2YV9vYmplY3RhcnJheTsKCnR5cGVkZWYgc3RydWN0IGph dmFfYXJyYXlhcnJheSB7CiAgICAgICAgamF2YV9hcnJheWhlYWRlciBoZWFkZXI7CiAgICAgICAg Y29uc3RhbnRfYXJyYXlkZXNjcmlwdG9yICplbGVtZW50ZGVzY3JpcHRvcjsKICAgICAgICBqYXZh X2FycmF5aGVhZGVyICpkYXRhWzFdOwp9IGphdmFfYXJyYXlhcnJheTsKCgoKCnR5cGVkZWYgc3Ry dWN0IHByaW1pdGl2ZXR5cGVpbmZvIHsKICAgICAgICBjbGFzc2luZm8gKmNsYXNzX3dyYXA7CiAg ICAgICAgY2xhc3NpbmZvICpjbGFzc19wcmltaXRpdmU7CiAgICAgICAgY2hhciAqd3JhcG5hbWU7 CiAgICAgICAgY2hhciB0eXBlc2lnOwogICAgICAgIGNoYXIgKm5hbWU7Cn0gcHJpbWl0aXZldHlw ZWluZm87CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgZmllbGRpbmZvIHsKICAgICAgICBzNCBmbGFnczsK ICAgICAgICBzNCB0eXBlOwogICAgICAgIHV0ZiAqbmFtZTsKICAgICAgICB1dGYgKmRlc2NyaXB0 b3I7CgogICAgICAgIHM0IG9mZnNldDsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAg czQgaTsKICAgICAgICAgICAgICAgIHM4IGw7CiAgICAgICAgICAgICAgICBmbG9hdCBmOwogICAg ICAgICAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgICAgICAgICB2b2lkICphOwogICAgICAgIH0g dmFsdWU7Cgp9IGZpZWxkaW5mbzsKCnN0cnVjdCBiYXNpY2Jsb2NrOwoKCgp0eXBlZGVmIHN0cnVj dCB4dGFibGUgewogICAgICAgIHM0IHN0YXJ0cGM7CiAgICAgICAgc3RydWN0IGJhc2ljYmxvY2sg KnN0YXJ0OwoKICAgICAgICBzNCBlbmRwYzsKICAgICAgICBzdHJ1Y3QgYmFzaWNibG9jayAqZW5k OwoKICAgICAgICBzNCBoYW5kbGVycGM7CiAgICAgICAgc3RydWN0IGJhc2ljYmxvY2sgKmhhbmRs ZXI7CgogICAgICAgIGNsYXNzaW5mbyAqY2F0Y2h0eXBlOwogICAgICAgIHN0cnVjdCB4dGFibGUg Km5leHQ7CgogICAgICAgIHN0cnVjdCB4dGFibGUgKmRvd247Cn0geHRhYmxlOwoKCnR5cGVkZWYg c3RydWN0IGV4Y2VwdGlvbnRhYmxlIHsKICAgICAgICBzNCBzdGFydHBjOwogICAgICAgIHM0IGVu ZHBjOwogICAgICAgIHM0IGhhbmRsZXJwYzsKICAgICAgICBjbGFzc2luZm8gKmNhdGNodHlwZTsK fSBleGNlcHRpb250YWJsZTsKCgoKCnR5cGVkZWYgc3RydWN0IG1ldGhvZGluZm8gewogICAgICAg IHM0IGZsYWdzOwogICAgICAgIHV0ZiAqbmFtZTsKICAgICAgICB1dGYgKmRlc2NyaXB0b3I7CiAg ICAgICAgczQgcmV0dXJudHlwZTsKICAgICAgICBzNCBwYXJhbWNvdW50OwogICAgICAgIHUxICpw YXJhbXR5cGVzOwogICAgICAgIGNsYXNzaW5mbyAqY2xhc3M7CiAgICAgICAgczQgdmZ0YmxpbmRl eDsKCiAgICAgICAgczQgbWF4c3RhY2s7CiAgICAgICAgczQgbWF4bG9jYWxzOwogICAgICAgIHM0 IGpjb2RlbGVuZ3RoOwogICAgICAgIHUxICpqY29kZTsKCiAgICAgICAgczQgZXhjZXB0aW9udGFi bGVsZW5ndGg7CiAgICAgICAgZXhjZXB0aW9udGFibGUgKmV4Y2VwdGlvbnRhYmxlOwoKCiAgICAg ICAgdTEgKnN0dWJyb3V0aW5lOwogICAgICAgIHM0IG1jb2RlbGVuZ3RoOwogICAgICAgIHUxICpt Y29kZTsKICAgICAgICB1MSAqZW50cnlwb2ludDsKCn0gbWV0aG9kaW5mbzsKCgoKCnR5cGVkZWYg c3RydWN0IGlubmVyY2xhc3NpbmZvIHsKICAgICAgICBjbGFzc2luZm8gKmlubmVyX2NsYXNzOwog ICAgICAgIGNsYXNzaW5mbyAqb3V0ZXJfY2xhc3M7CiAgICAgICAgdXRmICpuYW1lOwogICAgICAg IHM0IGZsYWdzOwp9IGlubmVyY2xhc3NpbmZvOwoKCgpzdHJ1Y3QgY2xhc3NpbmZvIHsKICAgICAg ICBqYXZhX29iamVjdGhlYWRlciBoZWFkZXI7CgogICAgICAgIHM0IGZsYWdzOwogICAgICAgIHV0 ZiAqbmFtZTsKCiAgICAgICAgczQgY3Bjb3VudDsKICAgICAgICB1MSAqY3B0YWdzOwogICAgICAg IHZvaWRwdHIgKmNwaW5mb3M7CgogICAgICAgIGNsYXNzaW5mbyAqc3VwZXI7CiAgICAgICAgY2xh c3NpbmZvICpzdWI7CiAgICAgICAgY2xhc3NpbmZvICpuZXh0c3ViOwoKICAgICAgICBzNCBpbnRl cmZhY2VzY291bnQ7CiAgICAgICAgY2xhc3NpbmZvICoqaW50ZXJmYWNlczsKCiAgICAgICAgczQg ZmllbGRzY291bnQ7CiAgICAgICAgZmllbGRpbmZvICpmaWVsZHM7CgogICAgICAgIHM0IG1ldGhv ZHNjb3VudDsKICAgICAgICBtZXRob2RpbmZvICptZXRob2RzOwoKICAgICAgICBsaXN0bm9kZSBs aXN0bm9kZTsKCiAgICAgICAgYm9vbCBpbml0aWFsaXplZDsKICAgICAgICBib29sIGxpbmtlZDsK ICAgICAgICBzNCBpbmRleDsKCiAgICAgICAgczQgaW5zdGFuY2VzaXplOwoKICAgICAgICBzNCBh bGlnbmVkc2l6ZTsKCgoKICAgICAgICB2ZnRibCAqdmZ0Ymw7CgogICAgICAgIG1ldGhvZGluZm8g KmZpbmFsaXplcjsKCgoKCiAgICB1MiBpbm5lcmNsYXNzY291bnQ7CiAgICBpbm5lcmNsYXNzaW5m byAqaW5uZXJjbGFzczsKCiAgICBjbGFzc2luZm8gKmhhc2hsaW5rOwp9OwojIDU4NCAiLi4vZ2xv YmFsLmgiCnN0cnVjdCB2ZnRibCB7CiAgICAgICAgbWV0aG9kcHRyICppbnRlcmZhY2V0YWJsZVsx XTsKCiAgICAgICAgY2xhc3NpbmZvICpjbGFzczsKCiAgICAgICAgczQgdmZ0YmxsZW5ndGg7CiAg ICAgICAgczQgaW50ZXJmYWNldGFibGVsZW5ndGg7CgogICAgICAgIHM0IGJhc2V2YWw7CiAgICAg ICAgczQgZGlmZnZhbDsKCiAgICAgICAgczQgKmludGVyZmFjZXZmdGJsbGVuZ3RoOwoKICAgICAg ICBtZXRob2RwdHIgdGFibGVbMV07Cn07CgojZGVmaW5lIFZGVEJMSU5URVJGQUNFVEFCTEUodixp KSAodiktPmludGVyZmFjZXRhYmxlWy1pXQoKCgoKZXh0ZXJuIGNsYXNzaW5mbyAqY2xhc3NfamF2 YV9sYW5nX09iamVjdDsKZXh0ZXJuIGNsYXNzaW5mbyAqY2xhc3NfamF2YV9sYW5nX1N0cmluZzsK ZXh0ZXJuIGNsYXNzaW5mbyAqY2xhc3NfamF2YV9sYW5nX0NsYXNzQ2FzdEV4Y2VwdGlvbjsKZXh0 ZXJuIGNsYXNzaW5mbyAqY2xhc3NfamF2YV9sYW5nX051bGxQb2ludGVyRXhjZXB0aW9uOwpleHRl cm4gY2xhc3NpbmZvICpjbGFzc19qYXZhX2xhbmdfQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0 aW9uOwpleHRlcm4gY2xhc3NpbmZvICpjbGFzc19qYXZhX2xhbmdfTmVnYXRpdmVBcnJheVNpemVF eGNlcHRpb247CmV4dGVybiBjbGFzc2luZm8gKmNsYXNzX2phdmFfbGFuZ19PdXRPZk1lbW9yeUVy cm9yOwpleHRlcm4gY2xhc3NpbmZvICpjbGFzc19qYXZhX2xhbmdfQXJpdGhtZXRpY0V4Y2VwdGlv bjsKZXh0ZXJuIGNsYXNzaW5mbyAqY2xhc3NfamF2YV9sYW5nX0FycmF5U3RvcmVFeGNlcHRpb247 CmV4dGVybiBjbGFzc2luZm8gKmNsYXNzX2phdmFfbGFuZ19UaHJlYWREZWF0aDsKZXh0ZXJuIGNs YXNzaW5mbyAqY2xhc3NfYXJyYXk7CgoKCmV4dGVybiBqYXZhX29iamVjdGhlYWRlciAqcHJvdG9f amF2YV9sYW5nX0NsYXNzQ2FzdEV4Y2VwdGlvbjsKZXh0ZXJuIGphdmFfb2JqZWN0aGVhZGVyICpw cm90b19qYXZhX2xhbmdfTnVsbFBvaW50ZXJFeGNlcHRpb247CmV4dGVybiBqYXZhX29iamVjdGhl YWRlciAqcHJvdG9famF2YV9sYW5nX0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKZXh0 ZXJuIGphdmFfb2JqZWN0aGVhZGVyICpwcm90b19qYXZhX2xhbmdfTmVnYXRpdmVBcnJheVNpemVF eGNlcHRpb247CmV4dGVybiBqYXZhX29iamVjdGhlYWRlciAqcHJvdG9famF2YV9sYW5nX091dE9m TWVtb3J5RXJyb3I7CmV4dGVybiBqYXZhX29iamVjdGhlYWRlciAqcHJvdG9famF2YV9sYW5nX0Fy aXRobWV0aWNFeGNlcHRpb247CmV4dGVybiBqYXZhX29iamVjdGhlYWRlciAqcHJvdG9famF2YV9s YW5nX0FycmF5U3RvcmVFeGNlcHRpb247CmV4dGVybiBqYXZhX29iamVjdGhlYWRlciAqcHJvdG9f amF2YV9sYW5nX1RocmVhZERlYXRoOwoKCgoKZXh0ZXJuIGJvb2wgY29tcGlsZWFsbDsKZXh0ZXJu IGJvb2wgcnVudmVyYm9zZTsKZXh0ZXJuIGJvb2wgdmVyYm9zZTsKCgoKCmV4dGVybiBpbnQgY291 bnRfY2xhc3NfaW5mb3M7CmV4dGVybiBpbnQgY291bnRfY29uc3RfcG9vbF9sZW47CmV4dGVybiBp bnQgY291bnRfdmZ0YmxfbGVuOwpleHRlcm4gaW50IGNvdW50X3V0Zl9sZW47CmV4dGVybiBpbnQg Y291bnRfYWxsX21ldGhvZHM7CmV4dGVybiBpbnQgY291bnRfdm1jb2RlX2xlbjsKZXh0ZXJuIGlu dCBjb3VudF9leHRhYmxlX2xlbjsKZXh0ZXJuIGludCBjb3VudF9jbGFzc19sb2FkczsKZXh0ZXJu IGludCBjb3VudF9jbGFzc19pbml0czsKZXh0ZXJuIGludCBjb3VudF91dGZfbmV3OwpleHRlcm4g aW50IGNvdW50X3V0Zl9uZXdfZm91bmQ7CgoKCmV4dGVybiBwcmltaXRpdmV0eXBlaW5mbyBwcmlt aXRpdmV0eXBlX3RhYmxlWzldOwojIDI2ICJoZWFwLm9sZC5jIiAyCiMgMSAiLi4vdGFibGVzLmgi IDEKIyAxNSAiLi4vdGFibGVzLmgiCiNkZWZpbmUgQ0xBU1MobmFtZSkgKHVuaWNvZGVfZ2V0Y2xh c3NsaW5rKHVuaWNvZGVfbmV3X2NoYXIobmFtZSkpKQoKCiNkZWZpbmUgdXRmX2VuZCh1dGYpICgo Y2hhciAqKSB1dGYtPnRleHQrdXRmLT5ibGVuZ3RoKQoKCmV4dGVybiBib29sIGNvbGxlY3R2ZXJi b3NlOwpleHRlcm4gbGlzdCB1bmxvYWRlZGNsYXNzZXM7CgoKdHlwZWRlZiB2b2lkICgqc3RyaW5n ZGVsZXRlcikgKCBqYXZhX29iamVjdGhlYWRlciAqc3RyaW5nICk7CgoKdm9pZCB0YWJsZXNfaW5p dCAoKTsKCgp2b2lkIHRhYmxlc19jbG9zZSAoc3RyaW5nZGVsZXRlciBkZWwpOwoKCnZvaWQgdXRm X3NwcmludCAoY2hhciAqYnVmZmVyLCB1dGYgKnUpOwp2b2lkIHV0Zl9mcHJpbnQgKEZJTEUgKmZp bGUsIHV0ZiAqdSk7CnZvaWQgdXRmX2Rpc3BsYXkgKHV0ZiAqdSk7CgoKdXRmICp1dGZfbmV3IChj aGFyICp0ZXh0LCB1MiBsZW5ndGgpOwp1dGYgKnV0Zl9uZXdfY2hhciAoY2hhciAqdGV4dCk7CgoK dm9pZCB1dGZfc2hvdyAoKTsKCgp1MiB1dGZfbmV4dHUyKGNoYXIgKip1dGYpOwoKCnU0IHV0Zl9z dHJsZW4odXRmICp1KTsKCgpjbGFzc2luZm8gKmNsYXNzX25ldyAodXRmICp1KTsKCgp1MiBkZXNj X3RvX3R5cGUgKHV0ZiAqZGVzY3JpcHRvcik7CgoKdTIgZGVzY190eXBlc2l6ZSAodXRmICpkZXNj cmlwdG9yKTsKCgp1NCB1bmljb2RlX2hhc2hrZXkgKHUyICp0ZXh0LCB1MiBsZW5ndGgpOwoKCnZv aWQgaW5pdF9oYXNodGFibGUoaGFzaHRhYmxlICpoYXNoLCB1NCBzaXplKTsKCgpjbGFzc2luZm8g KmNsYXNzX2dldCAodXRmICp1KTsKCgp2b2lkIGhlYXBfaW5pdCAodTQgc2l6ZSwgdTQgc3RhcnRz aXplLCB2b2lkICoqc3RhY2tib3R0b20pOwp2b2lkIGhlYXBfY2xvc2UgKCk7CnZvaWQgKmhlYXBf YWxsb2NhdGUgKHU0IGJ5dGVsZW5ndGgsIGJvb2wgcmVmZXJlbmNlcywgbWV0aG9kaW5mbyAqZmlu YWxpemVyKTsKdm9pZCBoZWFwX2FkZHJlZmVyZW5jZSAodm9pZCAqKnJlZmxvY2F0aW9uKTsKCnZv aWQgZ2NfaW5pdCAodm9pZCk7CnZvaWQgZ2NfdGhyZWFkICh2b2lkKTsKdm9pZCBnY19jYWxsICh2 b2lkKTsKIyAyNyAiaGVhcC5vbGQuYyIgMgojIDEgIi4uL2FzbXBhcnQuaCIgMQojIDE5ICIuLi9h c21wYXJ0LmgiCmludCBoYXNfbm9feF9pbnN0cl9zZXQoKTsKCgoKdm9pZCBzeW5jaHJvbml6ZV9j YWNoZXMoKTsKCgp2b2lkIGFzbV9jYWxsX2ppdF9jb21waWxlciAoKTsKCgoKCmphdmFfb2JqZWN0 aGVhZGVyICphc21fY2FsbGphdmFtZXRob2QgKG1ldGhvZGluZm8gKm0sIHZvaWQgKmFyZzEsIHZv aWQqYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCphcmcz LCB2b2lkKmFyZzQpOwoKCgoKamF2YV9vYmplY3RoZWFkZXIgKmFzbV9jYWxsamF2YWZ1bmN0aW9u IChtZXRob2RpbmZvICptLCB2b2lkICphcmcxLCB2b2lkKmFyZzIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCphcmczLCB2b2lkKmFyZzQpOwoKCgoKCm1ldGhv ZGluZm8gKmFzbV9nZXRjYWxsaW5nbWV0aG9kICgpOwoKCnZvaWQgYXNtX2R1bXByZWdpc3RlcnNh bmRjYWxsICggZnVuY3Rpb25wdHIgZik7CiMgMjggImhlYXAub2xkLmMiIDIKIyAxICIuLi9jYWxs YXJncy5oIiAxCiNkZWZpbmUgVFJBQ0VDQUxMQVJHUyAKIyAyOSAiaGVhcC5vbGQuYyIgMgoKIyAx ICIuLi90aHJlYWRzL3RocmVhZC5oIiAxCiMgMTUgIi4uL3RocmVhZHMvdGhyZWFkLmgiCiNkZWZp bmUgX190aHJlYWRfaCAKCiMgMSAiLi4vY29uZmlnLmgiIDEKCgoKCgoKCiNkZWZpbmUgSEFWRV9N TUFQIDEKIyAxNyAiLi4vY29uZmlnLmgiCiNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCgoKCgoKI2Rl ZmluZSBTVERDX0hFQURFUlMgMQoKCiNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKCgoKCgoj ZGVmaW5lIEhBVkVfTUFQX0ZBSUxFRCAxCgoKI2RlZmluZSBIQVZFX01BUF9BTk9OWU1PVVMgMQoK CiNkZWZpbmUgVVNFX1RIUkVBRFMgMQojZGVmaW5lIEVYVEVSTkFMX09WRVJGTE9XIDEKI2RlZmlu ZSBET05UX0ZSRUVfRklSU1QgMQoKCiNkZWZpbmUgU1lTREVQX0RJUiAiaTM4NiIKCiNkZWZpbmUg T0xEX0NPTVBJTEVSIDEKCgojZGVmaW5lIEhBVkVfR0VUQ1dEIDEKCgojZGVmaW5lIEhBVkVfR0VU UEFHRVNJWkUgMQoKCiNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQoKCiNkZWZpbmUgSEFWRV9N S0RJUiAxCgoKI2RlZmluZSBIQVZFX01LVElNRSAxCgoKI2RlZmluZSBIQVZFX1NFTEVDVCAxCgoK I2RlZmluZSBIQVZFX1NPQ0tFVCAxCgoKI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKCgojZGVmaW5l IEhBVkVfRkNOVExfSCAxCiMgODQgIi4uL2NvbmZpZy5oIgojZGVmaW5lIEhBVkVfU1lTX1RJTUVf SCAxCgoKI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKCgojZGVmaW5lIEhBVkVfTElCTSAxCgoKI2Rl ZmluZSBQQUNLQUdFICJjYWNhbyIKCgojZGVmaW5lIFZFUlNJT04gIjAuNDAiCiMgMTggIi4uL3Ro cmVhZHMvdGhyZWFkLmgiIDIKCgoKCgojZGVmaW5lIE1BWFRIUkVBRFMgMjU2CgojZGVmaW5lIFRI UkVBRENMQVNTICJqYXZhL2xhbmcvVGhyZWFkIgojZGVmaW5lIFRIUkVBREdST1VQQ0xBU1MgImph dmEvbGFuZy9UaHJlYWRHcm91cCIKI2RlZmluZSBUSFJFQURERUFUSENMQVNTICJqYXZhL2xhbmcv VGhyZWFkRGVhdGgiCgojZGVmaW5lIE1JTl9USFJFQURfUFJJTyAxCiNkZWZpbmUgTk9STV9USFJF QURfUFJJTyA1CiNkZWZpbmUgTUFYX1RIUkVBRF9QUklPIDEwCgojZGVmaW5lIFRIUkVBRF9TVVNQ RU5ERUQgMAojZGVmaW5lIFRIUkVBRF9SVU5OSU5HIDEKI2RlZmluZSBUSFJFQURfREVBRCAyCiNk ZWZpbmUgVEhSRUFEX0tJTEwgMwoKI2RlZmluZSBUSFJFQURfRkxBR1NfR0VORVJBTCAwCiNkZWZp bmUgVEhSRUFEX0ZMQUdTX05PU1RBQ0tBTExPQyAxCiNkZWZpbmUgVEhSRUFEX0ZMQUdTX1VTRVJf U1VTUEVORCAyCiNkZWZpbmUgVEhSRUFEX0ZMQUdTX0tJTExFRCA0CgpzdHJ1Y3QgX3RocmVhZDsK CnR5cGVkZWYgc3RydWN0IF9jdHgKewogICAgc3RydWN0IF90aHJlYWQgKnRocmVhZDsKICAgIGJv b2wgZnJlZTsKICAgIHUxIHN0YXR1czsKICAgIHUxIHByaW9yaXR5OwogICAgdTEqIHJlc3RvcmVQ b2ludDsKICAgIHUxKiBzdGFja01lbTsKICAgIHUxKiBzdGFja0Jhc2U7CiAgICB1MSogc3RhY2tF bmQ7CiAgICB1MSogdXNlZFN0YWNrVG9wOwogICAgczggdGltZTsKICAgIGphdmFfb2JqZWN0aGVh ZGVyICpleGNlcHRpb25wdHI7CiAgICBzdHJ1Y3QgX3RocmVhZCAqbmV4dGxpdmU7CiAgICB1MSBm bGFnczsKfSBjdHg7CiMgNjkgIi4uL3RocmVhZHMvdGhyZWFkLmgiCnR5cGVkZWYgc3RydWN0IF90 aHJlYWRHcm91cAp7CiAgICBqYXZhX29iamVjdGhlYWRlciBoZWFkZXI7CiAgICBzdHJ1Y3QgX3Ro cmVhZEdyb3VwKiBwYXJlbnQ7CiAgICBqYXZhX29iamVjdGhlYWRlciogbmFtZTsKICAgIHM0IG1h eFByaW87CiAgICBzNCBkZXN0cm95ZWQ7CiAgICBzNCBkYWVtb247CiAgICAgICAgczQgdm1BbGxv d1N1c3BlbnNpb247CiAgICBzNCBudGhyZWFkczsKICAgIGphdmFfb2JqZWN0aGVhZGVyKiB0aHJl YWRzOwogICAgczQgbmdyb3VwczsKICAgIGphdmFfb2JqZWN0aGVhZGVyKiBncm91cHM7Cn0gdGhy ZWFkR3JvdXA7CgoKdHlwZWRlZiBzdHJ1Y3QgX3RocmVhZAp7CiAgICBqYXZhX29iamVjdGhlYWRl ciBoZWFkZXI7CiAgICBqYXZhX29iamVjdGhlYWRlciogbmFtZTsKICAgIHM0IHByaW9yaXR5Owog ICAgc3RydWN0IF90aHJlYWQqIG5leHQ7CiAgICBzOCBQcml2YXRlSW5mbzsKICAgIHM0IHNpbmds ZV9zdGVwOwogICAgczQgZGFlbW9uOwogICAgczQgc3RpbGxib3JuOwogICAgamF2YV9vYmplY3Ro ZWFkZXIqIHRhcmdldDsKICAgIHRocmVhZEdyb3VwKiBncm91cDsKICAgICAgICBqYXZhX29iamVj dGhlYWRlciogY29udGV4dENsYXNzTG9hZGVyOwogICAgICAgIGphdmFfb2JqZWN0aGVhZGVyKiBp bmhlcml0ZWRBY2Nlc3NDb250cm9sQ29udGV4dDsKICAgICAgICBqYXZhX29iamVjdGhlYWRlciog dmFsdWVzOwp9IHRocmVhZDsKCnZvaWQgaW5pdFRocmVhZHMgKHUxICpzdGFja2JvdHRvbSk7CnZv aWQgY2xlYXJfdGhyZWFkX2ZsYWdzICh2b2lkKTsKdm9pZCBzdGFydFRocmVhZCAodGhyZWFkKik7 CnZvaWQgcmVzdW1lVGhyZWFkICh0aHJlYWQqKTsKdm9pZCBpcmVzdW1lVGhyZWFkICh0aHJlYWQq KTsKdm9pZCBzdXNwZW5kVGhyZWFkICh0aHJlYWQqKTsKdm9pZCBzdXNwZW5kT25RVGhyZWFkICh0 aHJlYWQqLCB0aHJlYWQqKik7CnZvaWQgeWllbGRUaHJlYWQgKHZvaWQpOwp2b2lkIGtpbGxUaHJl YWQgKHRocmVhZCopOwp2b2lkIHNldFByaW9yaXR5VGhyZWFkICh0aHJlYWQqLCBpbnQpOwoKczgg Y3VycmVudFRpbWUgKHZvaWQpOwp2b2lkIHNsZWVwVGhyZWFkIChzOCk7CmJvb2wgYWxpdmVUaHJl YWQgKHRocmVhZCopOwpsb25nIGZyYW1lc1RocmVhZCAodGhyZWFkKik7Cgp2b2lkIHJlc2NoZWR1 bGUgKHZvaWQpOwoKdm9pZCBjaGVja0V2ZW50cyAoYm9vbCBibG9jayk7CgpleHRlcm4gaW50IGJs b2NrSW50czsKZXh0ZXJuIGJvb2wgbmVlZFJlc2NoZWR1bGU7CmV4dGVybiB0aHJlYWQgKmN1cnJl bnRUaHJlYWQ7CmV4dGVybiB0aHJlYWQgKm1haW5UaHJlYWQ7CmV4dGVybiBjdHggY29udGV4dHNb XTsKZXh0ZXJuIGludCB0aHJlYWRTdGFja1NpemU7CgpleHRlcm4gdGhyZWFkICpsaXZlVGhyZWFk czsKZXh0ZXJuIHRocmVhZCAqc2xlZXBUaHJlYWRzOwoKZXh0ZXJuIHRocmVhZCAqdGhyZWFkUWhl YWRbMTAgKyAxXTsKCiNkZWZpbmUgQ09OVEVYVChfdCkgKGNvbnRleHRzWyhfdCktPlByaXZhdGVJ bmZvIC0gMV0pCgoKCiNkZWZpbmUgaW50c0Rpc2FibGUoKSBibG9ja0ludHMrKwojZGVmaW5lIGlu dHNSZXN0b3JlKCkgaWYgKGJsb2NrSW50cyA9PSAxICYmIG5lZWRSZXNjaGVkdWxlKSB7IHJlc2No ZWR1bGUoKTsgfSBibG9ja0ludHMtLQojIDMxICJoZWFwLm9sZC5jIiAyCiMgMSAiLi4vdGhyZWFk cy9sb2Nrcy5oIiAxCiMgMTUgIi4uL3RocmVhZHMvbG9ja3MuaCIKI2RlZmluZSBfX2xvY2tzX2gg CgoKCgojIDEgIi4uL2kzODYvZGVmaW5lcy5oIiAxCiMgMTUgIi4uL2kzODYvZGVmaW5lcy5oIgoj ZGVmaW5lIFVTRV9JTlRFUk5BTF9USFJFQURTIAoKI2RlZmluZSBIQVZFX0ZDTlRMIAojZGVmaW5l IEhBVkVfSU9DVEwgCiMgMjEgIi4uL3RocmVhZHMvbG9ja3MuaCIgMgoKI2RlZmluZSBXQUlURk9S RVZFUiAtMQoKCgpzdHJ1Y3QgX3RocmVhZDsKCnR5cGVkZWYgc3RydWN0IF9pTXV4IHsKICAgIHN0 cnVjdCBfdGhyZWFkICpob2xkZXI7CiAgICBpbnQgY291bnQ7CiAgICBzdHJ1Y3QgX3RocmVhZCAq bXV4V2FpdGVyczsKfSBpTXV4OwoKdHlwZWRlZiBzdHJ1Y3QgX2lDdiB7CiAgICAgICAgc3RydWN0 IF90aHJlYWQqIGN2V2FpdGVyczsKICAgICAgICBzdHJ1Y3QgX2lNdXgqIG11eDsKfSBpQ3Y7Cgoj ZGVmaW5lIE1BWF9NVVRFWEVTIDI1NgoKdHlwZWRlZiBzdHJ1Y3QgX211dGV4SGFzaEVudHJ5CnsK ICAgIGphdmFfb2JqZWN0aGVhZGVyICpvYmplY3Q7CiAgICBpTXV4IG11dGV4OwogICAgc3RydWN0 IF9tdXRleEhhc2hFbnRyeSAqbmV4dDsKICAgIGludCBjb25kaXRpb25Db3VudDsKfSBtdXRleEhh c2hFbnRyeTsKCiNkZWZpbmUgTVVURVhfSEFTSF9UUkFTSF9CSVRTIDMKI2RlZmluZSBNVVRFWF9I QVNIX1NJR05fQklUUyAxMAoKI2RlZmluZSBNVVRFWF9IQVNIX1RBQkxFX1NJWkUgMTAyNAojZGVm aW5lIE1VVEVYX09WRVJGTE9XX1RBQkxFX1NJWkUgMTAyNAojIDYyICIuLi90aHJlYWRzL2xvY2tz LmgiCmV4dGVybiBsb25nIG11dGV4SGFzaE1hc2s7CmV4dGVybiBpbnQgbXV0ZXhIYXNoVGFibGVT aXplOwpleHRlcm4gbXV0ZXhIYXNoRW50cnkgKm11dGV4SGFzaFRhYmxlOwoKZXh0ZXJuIG11dGV4 SGFzaEVudHJ5ICptdXRleE92ZXJmbG93VGFibGU7CmV4dGVybiBpbnQgbXV0ZXhPdmVyZmxvd1Rh YmxlU2l6ZTsKZXh0ZXJuIG11dGV4SGFzaEVudHJ5ICpmaXJzdEZyZWVPdmVyZmxvd0VudHJ5OwoK I2RlZmluZSBNVVRFWF9IQVNIX01BU0sgKChNVVRFWF9IQVNIX1RBQkxFX1NJWkUgLSAxKSA8PCAz KQoKCgoKI2RlZmluZSBNVVRFWF9IQVNIX1ZBTFVFKGEpICgoICgoKGxvbmcpKGEpKSBeICgobG9u ZykoYSkgPj4gTVVURVhfSEFTSF9TSUdOX0JJVFMpKSAmIG11dGV4SGFzaE1hc2spID4+IE1VVEVY X0hBU0hfVFJBU0hfQklUUykKCiNkZWZpbmUgTVVURVhfSEFTSF9TVUNDRVNTT1IoaCkgKCgoaCkg KyA3KSAmIChtdXRleEhhc2hUYWJsZVNpemUgLSAxKSkKCnR5cGVkZWYgc3RydWN0IF9jb25kaXRp b25IYXNoRW50cnkKewogICAgamF2YV9vYmplY3RoZWFkZXIgKm9iamVjdDsKICAgIGlDdiBjb25k aXRpb247Cn0gY29uZGl0aW9uSGFzaEVudHJ5OwoKI2RlZmluZSBDT05ESVRJT05fSEFTSF9UQUJM RV9TSVpFIDEwMjQKCiNkZWZpbmUgQ09ORElUSU9OX0hBU0hfVkFMVUUoYSkgKCgoKGxvbmcpKGEp KSAmIGNvbmRpdGlvbkhhc2hNYXNrKSA+PiAzKQojZGVmaW5lIENPTkRJVElPTl9IQVNIX1NVQ0NF U1NPUihoKSAoKChoKSArIDcpICYgKGNvbmRpdGlvbkhhc2hUYWJsZVNpemUgLSAxKSkKCnR5cGVk ZWYgc3RydWN0CnsKICAgIGJvb2wgZnJlZTsKICAgIGphdmFfb2JqZWN0aGVhZGVyICpvYmplY3Q7 CiAgICBpTXV4IG11dGV4OwogICAgaUN2IGNvbmRpdGlvbjsKfSBvYmplY3RfbXV0ZXg7CgpleHRl cm4gdm9pZCBpbml0TG9ja3MgKHZvaWQpOwoKbXV0ZXhIYXNoRW50cnkqIGNvbmRpdGlvbkxvY2tl ZE11dGV4Rm9yT2JqZWN0IChqYXZhX29iamVjdGhlYWRlciAqb2JqZWN0KTsKCnZvaWQgcmVvcmRl ckNvbmRpdGlvbkhhc2hUYWJsZSAoaW50IGJlZ2luKTsKaUN2KiBjb25kaXRpb25Gb3JPYmplY3Qg KGphdmFfb2JqZWN0aGVhZGVyICpvYmplY3QpOwppQ3YqIGFkZENvbmRpdGlvbkZvck9iamVjdCAo amF2YV9vYmplY3RoZWFkZXIgKm9iamVjdCk7CnZvaWQgcmVtb3ZlQ29uZGl0aW9uRm9yT2JqZWN0 IChqYXZhX29iamVjdGhlYWRlciAqb2JqZWN0KTsKCgoKCgp2b2lkIHNpZ25hbF9jb25kX2Zvcl9v YmplY3QgKGphdmFfb2JqZWN0aGVhZGVyICpvYmopOwp2b2lkIGJyb2FkY2FzdF9jb25kX2Zvcl9v YmplY3QgKGphdmFfb2JqZWN0aGVhZGVyICpvYmopOwp2b2lkIHdhaXRfY29uZF9mb3Jfb2JqZWN0 IChqYXZhX29iamVjdGhlYWRlciAqb2JqLCBzOCB0aW1lKTsKdm9pZCBsb2NrX211dGV4X2Zvcl9v YmplY3QgKGphdmFfb2JqZWN0aGVhZGVyICpvYmopOwp2b2lkIHVubG9ja19tdXRleF9mb3Jfb2Jq ZWN0IChqYXZhX29iamVjdGhlYWRlciAqb2JqKTsKCnZvaWQgbG9ja19tdXRleCAoaU11eCopOwp2 b2lkIHVubG9ja19tdXRleCAoaU11eCopOwp2b2lkIHdhaXRfY29uZCAoaU11eCosIGlDdiosIHM4 KTsKdm9pZCBzaWduYWxfY29uZCAoaUN2Kik7CnZvaWQgYnJvYWRjYXN0X2NvbmQgKGlDdiopOwoK CgoKCnZvaWQgaW50ZXJuYWxfbG9ja19tdXRleCAoaU11eCopOwp2b2lkIGludGVybmFsX3VubG9j a19tdXRleCAoaU11eCopOwp2b2lkIGludGVybmFsX3dhaXRfY29uZCAoaU11eCosIGlDdiosIHM4 KTsKdm9pZCBpbnRlcm5hbF9zaWduYWxfY29uZCAoaUN2Kik7CnZvaWQgaW50ZXJuYWxfYnJvYWRj YXN0X2NvbmQgKGlDdiopOwoKdm9pZCBpbnRlcm5hbF9sb2NrX211dGV4X2Zvcl9vYmplY3QgKGph dmFfb2JqZWN0aGVhZGVyICpvYmopOwp2b2lkIGludGVybmFsX3VubG9ja19tdXRleF9mb3Jfb2Jq ZWN0IChqYXZhX29iamVjdGhlYWRlciAqb2JqKTsKdm9pZCBpbnRlcm5hbF9icm9hZGNhc3RfY29u ZF9mb3Jfb2JqZWN0IChqYXZhX29iamVjdGhlYWRlciAqb2JqKTsKIyAzMiAiaGVhcC5vbGQuYyIg MgojIDEgIi4uL2kzODYvdGhyZWFkcy5oIiAxCiMgMTggIi4uL2kzODYvdGhyZWFkcy5oIgojZGVm aW5lIF9fc3lzZGVwX3RocmVhZHNfaCAKCiMgMSAiLi4vY29uZmlnLmgiIDEKCgoKCgoKCiNkZWZp bmUgSEFWRV9NTUFQIDEKIyAxNyAiLi4vY29uZmlnLmgiCiNkZWZpbmUgUkVUU0lHVFlQRSB2b2lk CgoKCgoKI2RlZmluZSBTVERDX0hFQURFUlMgMQoKCiNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1F IDEKCgoKCgojZGVmaW5lIEhBVkVfTUFQX0ZBSUxFRCAxCgoKI2RlZmluZSBIQVZFX01BUF9BTk9O WU1PVVMgMQoKCiNkZWZpbmUgVVNFX1RIUkVBRFMgMQojZGVmaW5lIEVYVEVSTkFMX09WRVJGTE9X IDEKI2RlZmluZSBET05UX0ZSRUVfRklSU1QgMQoKCiNkZWZpbmUgU1lTREVQX0RJUiAiaTM4NiIK CiNkZWZpbmUgT0xEX0NPTVBJTEVSIDEKCgojZGVmaW5lIEhBVkVfR0VUQ1dEIDEKCgojZGVmaW5l IEhBVkVfR0VUUEFHRVNJWkUgMQoKCiNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQoKCiNkZWZp bmUgSEFWRV9NS0RJUiAxCgoKI2RlZmluZSBIQVZFX01LVElNRSAxCgoKI2RlZmluZSBIQVZFX1NF TEVDVCAxCgoKI2RlZmluZSBIQVZFX1NPQ0tFVCAxCgoKI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEK CgojZGVmaW5lIEhBVkVfRkNOVExfSCAxCiMgODQgIi4uL2NvbmZpZy5oIgojZGVmaW5lIEhBVkVf U1lTX1RJTUVfSCAxCgoKI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKCgojZGVmaW5lIEhBVkVfTElC TSAxCgoKI2RlZmluZSBQQUNLQUdFICJjYWNhbyIKCgojZGVmaW5lIFZFUlNJT04gIjAuNDAiCiMg MjEgIi4uL2kzODYvdGhyZWFkcy5oIiAyCgoKCgoKCnZvaWQgYXNtX3BlcmZvcm1fdGhyZWFkc3dp dGNoICh1MSAqKmZyb20sIHUxICoqdG8sIHUxICoqc3RhY2tUb3ApOwp1MSogYXNtX2luaXRpYWxp emVfdGhyZWFkX3N0YWNrICh2b2lkICpmdW5jLCB1MSAqc3RhY2spOwp2b2lkIGFzbV9zd2l0Y2hz dGFja2FuZGNhbGwgKHZvaWQgKnN0YWNrLCB2b2lkICpmdW5jLCB2b2lkICoqc3RhY2t0b3BzYXZl KTsKCgoKI2RlZmluZSBUSFJFQURTVEFDS1NJWkUgKDMyICogMTAyNCkKCiNkZWZpbmUgVEhSRUFE U1dJVENIKHRvLGZyb20pIGFzbV9wZXJmb3JtX3RocmVhZHN3aXRjaCgmKGZyb20pLT5yZXN0b3Jl UG9pbnQsICYodG8pLT5yZXN0b3JlUG9pbnQsICYoZnJvbSktPnVzZWRTdGFja1RvcCkKCgojZGVm aW5lIFRIUkVBRElOSVQodG8sZnVuYykgKHRvKS0+cmVzdG9yZVBvaW50ID0gYXNtX2luaXRpYWxp emVfdGhyZWFkX3N0YWNrKCh1MSopKGZ1bmMpLCAodG8pLT5zdGFja0VuZCkKCgoKI2RlZmluZSBU SFJFQURJTkZPKGUpIGRvIHsgKGUpLT5yZXN0b3JlUG9pbnQgPSAwOyAoZSktPmZsYWdzID0gVEhS RUFEX0ZMQUdTX05PU1RBQ0tBTExPQzsgfSB3aGlsZSgwKQojIDMzICJoZWFwLm9sZC5jIiAyCiMg NDggImhlYXAub2xkLmMiCmJvb2wgY29sbGVjdHZlcmJvc2UgPSAwOwoKCiNkZWZpbmUgQkxPQ0tT SVpFIDgKdHlwZWRlZiB1OCBoZWFwYmxvY2s7CgoKI2RlZmluZSBiaXRmaWVsZHR5cGUgdTgKI2Rl ZmluZSBCSVRGSUVMREJJVFMgNjQKCgoKCgp1NCBoZWFwc2l6ZTsKdTQgdG9wb2ZoZWFwOwpoZWFw YmxvY2sgKmhlYXA7Cgp1OCAqc3RhcnRiaXRzOwp1OCAqbWFya2JpdHM7CnU4ICpyZWZlcmVuY2Vi aXRzOwoKdTQgaGVhcGZpbGxncmFkZTsKdTQgY29sbGVjdHRocmVhc2hvbGQ7Cgp2b2lkICoqYm90 dG9tX29mX3N0YWNrOwpjaGFpbiAqYWxsZ2xvYmFscmVmZXJlbmNlczsKCnR5cGVkZWYgc3RydWN0 IGZpbmFsaXplcm5vZGUgewogICAgICAgIHN0cnVjdCBmaW5hbGl6ZXJub2RlICpuZXh0OwogICAg ICAgIHU0IG9ianN0YXJ0OwogICAgICAgIG1ldGhvZGluZm8gKmZpbmFsaXplcjsKICAgICAgICB9 IGZpbmFsaXplcm5vZGU7CgpmaW5hbGl6ZXJub2RlICpsaXZlZmluYWxpemVlczsKZmluYWxpemVy bm9kZSAqZGVhZGZpbmFsaXplZXM7CgoKdHlwZWRlZiBzdHJ1Y3QgbWVtYXJlYSB7CiAgICAgICAg c3RydWN0IG1lbWFyZWEgKm5leHQ7CiAgICAgICAgfSBtZW1hcmVhOwoKdHlwZWRlZiBzdHJ1Y3Qg YmlnbWVtYXJlYSB7CiAgICAgICAgc3RydWN0IGJpZ21lbWFyZWEgKm5leHQ7CiAgICAgICAgdTQg c2l6ZTsKICAgICAgICB9IGJpZ21lbWFyZWE7CgojZGVmaW5lIERJRkZFUkVOVFNJWkVTIDEyOApt ZW1hcmVhICptZW1saXN0WzEyOF07CnU4IG1lbWxpc3RiaXRzWzEyOC82NF07CgoKCmJpZ21lbWFy ZWEgKmJpZ21lbWxpc3Q7CiMgMTE2ICJoZWFwLm9sZC5jIgpzdGF0aWMgdTEgbG93ZXN0dGFibGVb MjU2XSA9IHsKICAgICAgICAyNTUsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAg ICAgIDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDUsIDAsMSwwLDIs MCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwy LDAsMSwwLAogICAgICAgIDYsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAg IDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDUsIDAsMSwwLDIsMCwx LDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAs MSwwLAogICAgICAgIDcsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDQs IDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDUsIDAsMSwwLDIsMCwxLDAs MywwLDEsMCwyLDAsMSwwLAogICAgICAgIDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSww LAogICAgICAgIDYsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDQsIDAs MSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAogICAgICAgIDUsIDAsMSwwLDIsMCwxLDAsMyww LDEsMCwyLDAsMSwwLAogICAgICAgIDQsIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwIH07 CgpzdGF0aWMgaW50IGxvd2VzdCh1OCBpKQp7CgogICAgICAgIHU4IGkxID0gaTw8MzI7CiAgICAg ICAgaWYgKGkxKSB7CiAgICAgICAgICAgICAgICB1OCBpMTEgPSBpMTw8MTY7CiAgICAgICAgICAg ICAgICBpZiAoaTExKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHU4IGkxMTEgPSBpMTE8PDg7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpMTExKSByZXR1cm4gbG93ZXN0dGFibGVbaTEx MT4+NTZdOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiA4K2xvd2VzdHRhYmxl W2kxMT4+NTZdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgICAgICAgICAgICAgdTggaTExMiA9IGkxPDw4OwogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoaTExMikgcmV0dXJuIDE2K2xvd2VzdHRhYmxlW2kxMTI+PjU2XTsKICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMjQrbG93ZXN0dGFibGVbaTE+PjU2XTsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIGVsc2Ug ewogICAgICAgICAgICAgICAgdTggaTEyID0gaTw8MTY7CiAgICAgICAgICAgICAgICBpZiAoaTEy KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHU4IGkxMjEgPSBpMTI8PDg7CiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChpMTIxKSByZXR1cm4gMzIrbG93ZXN0dGFibGVbaTEyMT4+NTZdOwog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiA0MCtsb3dlc3R0YWJsZVtpMTI+PjU2 XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHU4IGkxMjIgPSBpPDw4OwogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaTEyMikgcmV0dXJuIDQ4K2xvd2VzdHRhYmxlW2kxMjI+PjU2XTsKICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZSByZXR1cm4gNTYrbG93ZXN0dGFibGVbaT4+NTZdOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiMgMTc3ICJoZWFwLm9sZC5jIgp9CgoK CgpzdGF0aWMgdm9pZCBzZXRiaXQodTggKmJpdGZpZWxkLCB1NCBiaXRudW1iZXIpCnsKICAgICAg ICBiaXRmaWVsZFtiaXRudW1iZXIvNjRdIHw9CiAgICAgICAgICAoKHU4KSAxKSA8PCAoYml0bnVt YmVyJTY0KTsKfQoKc3RhdGljIHZvaWQgY2xlYXJiaXQodTggKmJpdGZpZWxkLCB1NCBiaXRudW1i ZXIpCnsKICAgICAgICBiaXRmaWVsZFtiaXRudW1iZXIvNjRdICY9CiAgICAgICAgICAgfigodTgp IDEpIDw8IChiaXRudW1iZXIlNjQpOwp9CgpzdGF0aWMgYm9vbCBpc2JpdHNldCh1OCAqYml0Zmll bGQsIHU0IGJpdG51bWJlcikKewogICAgICAgIHJldHVybiAoIGJpdGZpZWxkW2JpdG51bWJlci82 NF0gJgogICAgICAgICAgICggKCh1OCkgMSkgPDwgKGJpdG51bWJlciU2NCkgKSApICE9IDA7Cn0K CnN0YXRpYyBib29sIGlzYml0Y2xlYXIodTggKmJpdGZpZWxkLCB1NCBiaXRudW1iZXIpCnsKICAg ICAgICByZXR1cm4gKCBiaXRmaWVsZFtiaXRudW1iZXIvNjRdICYKICAgICAgICAgICAgKCAoKHU4 KSAxKSA8PCAoYml0bnVtYmVyJTY0KSApICkgPT0gMDsKfQojIDIxMyAiaGVhcC5vbGQuYyIKc3Rh dGljIHZvaWQgY2xlYXJiaXRmaWVsZCh1OCAqYml0ZmllbGQsIHU0IGZpZWxkc2l6ZSkKewogICAg ICAgIHU0IGksdDsKICAgICAgICB0ID0gKCAoICgoZmllbGRzaXplKSsoNjQpLTEpIC8gKDY0KSkq KDY0KSApIC8gNjQ7CiAgICAgICAgZm9yIChpPTA7IGk8dDsgaSsrKSBiaXRmaWVsZFtpXSA9IDA7 Cn0KIyAyMjcgImhlYXAub2xkLmMiCnN0YXRpYyB2b2lkIG1hc2tmaWVsZHdpdGhmaWVsZCAodTgq IGJpdGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptYXNrZmllbGQs IHU0IGZpZWxkc2l6ZSkKewogICAgICAgIHU0IGksdDsKICAgICAgICB0ID0gKCAoICgoZmllbGRz aXplKSsoNjQpLTEpIC8gKDY0KSkqKDY0KSApIC8gNjQ7CiAgICAgICAgZm9yIChpPTA7IGk8dDsg aSsrKSBiaXRmaWVsZFtpXSAmPSBtYXNrZmllbGRbaV07Cn0KIyAyNDUgImhlYXAub2xkLmMiCnN0 YXRpYyB1NCBmaW5kbmV4dHNldGJpdCh1OCogYml0ZmllbGQsIHU0IGZpZWxkc2l6ZSwgdTQgYml0 bnVtYmVyKQp7CiAgICAgICAgdTggcGF0dGVybjsKCiAgICAgICAgZm9yICg7OykgewogICAgICAg ICAgICAgICAgaWYgKGJpdG51bWJlciA+PSBmaWVsZHNpemUpIHJldHVybiBmaWVsZHNpemU7Cgog ICAgICAgICAgICAgICAgcGF0dGVybiA9IGJpdGZpZWxkW2JpdG51bWJlci82NF07CiAgICAgICAg ICAgICAgICBwYXR0ZXJuID4+PSAoYml0bnVtYmVyJTY0KTsKICAgICAgICAgICAgICAgIGlmIChw YXR0ZXJuKSByZXR1cm4gYml0bnVtYmVyICsgbG93ZXN0KHBhdHRlcm4pOwoKICAgICAgICAgICAg ICAgIGJpdG51bWJlciA9ICgoYml0bnVtYmVyICsgNjQpIC8gNjQpICogNjQ7CiAgICAgICAgICAg ICAgICB9Cn0KIyAyNzAgImhlYXAub2xkLmMiCnN0YXRpYyB1NCBmaW5kbmV4dGNvbWJpbmF0aW9u X3NldF91bnNldAogICAgICAgICh1OCAqYml0ZmllbGQxLCB1OCogYml0ZmllbGQyLCB1NCBmaWVs ZHNpemUsIHU0IGJpdG51bWJlcikKewogICAgICAgIHU4IHBhdHRlcm47CgogICAgICAgIGZvciAo OzspIHsKICAgICAgICAgICAgICAgIGlmIChiaXRudW1iZXIgPj0gZmllbGRzaXplKSByZXR1cm4g ZmllbGRzaXplOwoKICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBiaXRmaWVsZDFbYml0bnVtYmVy LzY0XQogICAgICAgICAgICAgICAgICAgICAgICAgICYgKH5iaXRmaWVsZDJbYml0bnVtYmVyLzY0 XSk7CiAgICAgICAgICAgICAgICBwYXR0ZXJuID4+PSAoYml0bnVtYmVyJTY0KTsKICAgICAgICAg ICAgICAgIGlmIChwYXR0ZXJuKSByZXR1cm4gYml0bnVtYmVyICsgbG93ZXN0KHBhdHRlcm4pOwoK ICAgICAgICAgICAgICAgIGJpdG51bWJlciA9ICgoYml0bnVtYmVyICsgNjQpIC8gNjQpICogNjQ7 CiAgICAgICAgICAgICAgICB9Cn0KIyAyOTYgImhlYXAub2xkLmMiCnN0YXRpYyB2b2lkIG1lbWxp c3RfaW5pdCAoKQp7CiAgICAgICAgdTQgaTsKICAgICAgICBmb3IgKGk9MDsgaTwxMjg7IGkrKykg bWVtbGlzdFtpXSA9ICgodm9pZCAqKTApOwogICAgICAgIGNsZWFyYml0ZmllbGQgKG1lbWxpc3Ri aXRzLCAxMjgpOwogICAgICAgIGJpZ21lbWxpc3QgPSAoKHZvaWQgKikwKTsKfQojIDMxMyAiaGVh cC5vbGQuYyIKc3RhdGljIHZvaWQgbWVtbGlzdF9hZGRyYW5nZSAodTQgZnJlZXN0YXJ0LCB1NCBm cmVlc2l6ZSkKewogICAgICAgIGlmIChmcmVlc2l6ZT49MTI4KSB7CiAgICAgICAgICAgICAgICBi aWdtZW1hcmVhICptID0gKGJpZ21lbWFyZWEqKSAoaGVhcCtmcmVlc3RhcnQpOwogICAgICAgICAg ICAgICAgbSAtPiBuZXh0ID0gYmlnbWVtbGlzdDsKICAgICAgICAgICAgICAgIG0gLT4gc2l6ZSA9 IGZyZWVzaXplOwogICAgICAgICAgICAgICAgYmlnbWVtbGlzdCA9IG07CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoZnJlZXNpemUqOD49c2l6ZW9m KG1lbWFyZWEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWFyZWEgKm0gPSAobWVtYXJl YSopIChoZWFwK2ZyZWVzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG0gLT4gbmV4dCA9 IG1lbWxpc3RbZnJlZXNpemVdOwogICAgICAgICAgICAgICAgICAgICAgICBtZW1saXN0W2ZyZWVz aXplXSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIHNldGJpdCAobWVtbGlzdGJpdHMsIGZy ZWVzaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQp9CiMg MzQ5ICJoZWFwLm9sZC5jIgpzdGF0aWMgdm9pZCBtZW1saXN0X2dldHN1aXRhYmxlICh1NCAqZnJl ZXN0YXJ0LCB1NCAqZnJlZWxlbmd0aCwgdTQgbGVuZ3RoKQp7CiAgICAgICAgYmlnbWVtYXJlYSAq bTsKICAgICAgICBiaWdtZW1hcmVhICpwcmV2bSA9ICgodm9pZCAqKTApOwoKICAgICAgICBpZiAo bGVuZ3RoPDEyOCkgewogICAgICAgICAgICAgICAgdTQgZmlyc3RmcmVlbGVuZ3RoOwoKICAgICAg ICAgICAgICAgIGlmIChtZW1saXN0W2xlbmd0aF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAg Zmlyc3RmcmVlbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RmcmVlbGVuZ3Ro ID0gZmluZG5leHRzZXRiaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVtbGlz dGJpdHMsIDEyOCwgbGVuZ3RoKzMpOwoKCgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgaWYgKGZpcnN0ZnJlZWxlbmd0aDwxMjgpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgbWVtYXJlYSAqbSA9IG1lbWxpc3RbZmlyc3RmcmVlbGVuZ3RoXTsKICAgICAgICAgICAg ICAgICAgICAgICAgbWVtbGlzdFtmaXJzdGZyZWVsZW5ndGhdID0gbS0+bmV4dDsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFtLT5uZXh0KSBjbGVhcmJpdCAobWVtbGlzdGJpdHMsIGZpcnN0 ZnJlZWxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpmcmVlc3RhcnQgPSAoKGhlYXBi bG9jayopIG0pIC0gaGVhcDsKICAgICAgICAgICAgICAgICAgICAgICAgKmZyZWVsZW5ndGggPSBm aXJzdGZyZWVsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICBtID0gYmlnbWVtbGlz dDsKICAgICAgICB3aGlsZSAobSkgewogICAgICAgICAgICAgICAgaWYgKG0tPnNpemUgPj0gbGVu Z3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2bSkgcHJldm0tPm5leHQgPSBt LT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYmlnbWVtbGlzdCA9 IG0tPm5leHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAqZnJlZXN0YXJ0ID0gKChoZWFwYmxv Y2sqKSBtKSAtIGhlYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICpmcmVlbGVuZ3RoID0gbS0+ c2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIHByZXZtID0gbTsKICAgICAgICAgICAgICAgIG0gPSBt LT5uZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAqZnJlZWxlbmd0aD0wOwp9CiMgNDA4 ICJoZWFwLm9sZC5jIgpzdGF0aWMgdm9pZCBtYXJrcmVmZXJlbmNlcyAodm9pZCAqKnJzdGFydCwg dm9pZCAqKnJlbmQpOwoKc3RhdGljIHZvaWQgbWFyayAoaGVhcGJsb2NrICpvYmopCnsKICAgICAg ICB1NCBibG9ja251bSxvYmplY3RlbmQ7CgogICAgICAgIGlmICgobG9uZykgb2JqICYgKDggLTEp KSByZXR1cm47CgogICAgICAgIGlmIChvYmo8aGVhcCkgcmV0dXJuOwogICAgICAgIGlmIChvYmo+ PShoZWFwK3RvcG9maGVhcCkgKSByZXR1cm47CgogICAgICAgIGJsb2NrbnVtID0gb2JqLWhlYXA7 CiAgICAgICAgaWYgKCBpc2JpdGNsZWFyKHN0YXJ0Yml0cywgYmxvY2tudW0pICkgcmV0dXJuOwog ICAgICAgIGlmICggaXNiaXRzZXQobWFya2JpdHMsIGJsb2NrbnVtKSApIHJldHVybjsKCgogICAg ICAgIHNldGJpdCAobWFya2JpdHMsIGJsb2NrbnVtKTsKCiAgICAgICAgaWYgKCBpc2JpdGNsZWFy KHJlZmVyZW5jZWJpdHMsIGJsb2NrbnVtKSApIHJldHVybjsKCiAgICAgICAgb2JqZWN0ZW5kID0g ZmluZG5leHRzZXRiaXQgKHN0YXJ0Yml0cywgdG9wb2ZoZWFwLCBibG9ja251bSsxKTsKICAgICAg ICBtYXJrcmVmZXJlbmNlcyAoKHZvaWQqKilvYmosICh2b2lkKiopIChoZWFwK29iamVjdGVuZCkg KTsKfQojIDQ0MCAiaGVhcC5vbGQuYyIKc3RhdGljIHZvaWQgbWFya3JlZmVyZW5jZXMgKHZvaWQg Kipyc3RhcnQsIHZvaWQgKipyZW5kKQp7CiAgICAgICAgdm9pZCAqKnB0cjsKCiAgICAgICAgZm9y IChwdHI9cnN0YXJ0OyBwdHI8cmVuZDsgcHRyKyspIG1hcmsgKCpwdHIpOwp9CiMgNDU3ICJoZWFw Lm9sZC5jIgpzdGF0aWMgdm9pZCBtYXJrc3RhY2sgKCkKewogICAgICAgIHZvaWQgKmR1bW15OwoK CiAgICB0aHJlYWQgKmFUaHJlYWQ7CgogICAgICAgIGlmIChjdXJyZW50VGhyZWFkID09ICgodm9p ZCAqKTApKSB7CiAgICAgICAgICAgICAgICB2b2lkICoqdG9wX29mX3N0YWNrID0gJmR1bW15OwoK ICAgICAgICAgICAgICAgIGlmICh0b3Bfb2Zfc3RhY2sgPiBib3R0b21fb2Zfc3RhY2spCiAgICAg ICAgICAgICAgICAgICAgICAgIG1hcmtyZWZlcmVuY2VzKGJvdHRvbV9vZl9zdGFjaywgdG9wX29m X3N0YWNrKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgbWFy a3JlZmVyZW5jZXModG9wX29mX3N0YWNrLCBib3R0b21fb2Zfc3RhY2spOwogICAgICAgIH0KICAg ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoYVRocmVhZCA9IGxpdmVUaHJlYWRzOyBh VGhyZWFkICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBhVGhyZWFkID0gKGNvbnRleHRz WyhhVGhyZWFkKS0+UHJpdmF0ZUluZm8gLSAxXSkubmV4dGxpdmUpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgbWFyaygoaGVhcGJsb2NrKilhVGhyZWFkKTsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKChjb250ZXh0c1soYVRocmVhZCktPlByaXZhdGVJbmZvIC0gMV0pLnVzZWRTdGFja1Rv cCA+IChjb250ZXh0c1soYVRocmVhZCktPlByaXZhdGVJbmZvIC0gMV0pLnN0YWNrRW5kKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtyZWZlcmVuY2VzKCh2b2lkKiopKGNvbnRl eHRzWyhhVGhyZWFkKS0+UHJpdmF0ZUluZm8gLSAxXSkuc3RhY2tFbmQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKikoY29u dGV4dHNbKGFUaHJlYWQpLT5Qcml2YXRlSW5mbyAtIDFdKS51c2VkU3RhY2tUb3ApOwogICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFy a3JlZmVyZW5jZXMoKHZvaWQqKikoY29udGV4dHNbKGFUaHJlYWQpLT5Qcml2YXRlSW5mbyAtIDFd KS51c2VkU3RhY2tUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQqKikoY29udGV4dHNbKGFUaHJlYWQpLT5Qcml2YXRlSW5m byAtIDFdKS5zdGFja0VuZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtYXJrcmVm ZXJlbmNlcygodm9pZCoqKSZ0aHJlYWRRaGVhZFswXSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2b2lkKiopJnRocmVhZFFoZWFkWzEwXSk7CiAgICAgICAgfQoj IDQ5NyAiaGVhcC5vbGQuYyIKfQojIDUwOSAiaGVhcC5vbGQuYyIKc3RhdGljIHZvaWQgc2VhcmNo bGl2ZWZpbmFsaXplZXMgKCkKewogICAgICAgIGZpbmFsaXplcm5vZGUgKmZuID0gbGl2ZWZpbmFs aXplZXM7CiAgICAgICAgZmluYWxpemVybm9kZSAqbGFzdGxpdmUgPSAoKHZvaWQgKikwKTsKCiAg ICAgICAgd2hpbGUgKGZuKSB7CgoKICAgICAgICAgICAgICAgIGlmIChpc2JpdGNsZWFyIChtYXJr Yml0cywgZm4tPm9ianN0YXJ0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZXJu b2RlICpuZXh0Zm4gPSBmbi0+bmV4dDsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsgKGhl YXAgKyBmbi0+b2Jqc3RhcnQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RsaXZl KSBsYXN0bGl2ZSAtPiBuZXh0ID0gbmV4dGZuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbHNlIGxpdmVmaW5hbGl6ZWVzID0gbmV4dGZuOwoKICAgICAgICAgICAgICAg ICAgICAgICAgZm4gLT4gbmV4dCA9IGRlYWRmaW5hbGl6ZWVzOwogICAgICAgICAgICAgICAgICAg ICAgICBkZWFkZmluYWxpemVlcyA9IGZuOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBu ZXh0Zm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICBsYXN0bGl2ZSA9IGZuOwogICAgICAgICAgICAgICAgICAg ICAgICBmbiA9IGZuLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9Cn0KIyA1NTAgImhlYXAub2xkLmMiCnN0YXRpYyB2b2lkIGZpbmFsaXplZGVhZCgpCnsK ICAgICAgICBmaW5hbGl6ZXJub2RlICpmbiA9IGRlYWRmaW5hbGl6ZWVzOwogICAgICAgIGRlYWRm aW5hbGl6ZWVzID0gKCh2b2lkICopMCk7CgogICAgICAgIHdoaWxlIChmbikgewogICAgICAgICAg ICAgICAgZmluYWxpemVybm9kZSAqbmV4dGZuID0gZm4tPm5leHQ7CgogICAgICAgICAgICAgICAg YXNtX2NhbGxqYXZhbWV0aG9kIChmbi0+ZmluYWxpemVyLCBoZWFwK2ZuLT5vYmpzdGFydCwgKCh2 b2lkICopMCksKCh2b2lkICopMCksKCh2b2lkICopMCkpOwogICAgICAgICAgICAgICAgbWVtX2Zy ZWUgKGZuLCBzaXplb2YoZmluYWxpemVybm9kZSkgKTsKCiAgICAgICAgICAgICAgICBmbiA9IG5l eHRmbjsKICAgICAgICAgICAgICAgIH0KCn0KIyA1NzQgImhlYXAub2xkLmMiCnN0YXRpYyB2b2lk IGhlYXBfZG9jb2xsZWN0ICgpCnsKICAgICAgICB1NCBmcmVlc3RhcnQsZnJlZWVuZDsKICAgICAg ICB2b2lkICoqcDsKICAgICAgICB1OCAqZHVtbXk7CiAgICAgICAgdTQgaGVhcGZyZWVtZW07CiAg ICAgICAgdTQgb2xkZmlsbGdyYWRlOwoKCiAgICAgICAgaWYgKHJ1bnZlcmJvc2UpIHsKICAgICAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZG9pbmcgZ2FyYmFnZSBjb2xsZWN0aW9uXG4iKTsK ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgY2xlYXJiaXRmaWVsZCAobWFya2JpdHMsIHRvcG9m aGVhcCk7CgoKICAgICAgICBhc21fZHVtcHJlZ2lzdGVyc2FuZGNhbGwgKG1hcmtzdGFjayk7CgoK CiAgICAgICAgcCA9IGNoYWluX2ZpcnN0IChhbGxnbG9iYWxyZWZlcmVuY2VzKTsKICAgICAgICB3 aGlsZSAocCkgewogICAgICAgICAgICAgICAgbWFyayAoKnApOwogICAgICAgICAgICAgICAgcCA9 IGNoYWluX25leHQgKGFsbGdsb2JhbHJlZmVyZW5jZXMpOwogICAgICAgICAgICAgICAgfQoKCiAg ICAgICAgc2VhcmNobGl2ZWZpbmFsaXplZXMoKTsKCgoKICAgICAgICBtYXNrZmllbGR3aXRoZmll bGQgKHJlZmVyZW5jZWJpdHMsIG1hcmtiaXRzLCB0b3BvZmhlYXApOwoKCgogICAgICAgIG1lbWxp c3RfaW5pdCAoKTsKCgoKCiAgICAgICAgaGVhcGZyZWVtZW0gPSAwOwogICAgICAgIGZyZWVlbmQ9 MDsKICAgICAgICBmb3IgKDs7KSB7CgogICAgICAgICAgICAgICAgZnJlZXN0YXJ0ID0gZmluZG5l eHRjb21iaW5hdGlvbl9zZXRfdW5zZXQKICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0Yml0 cywgbWFya2JpdHMsIHRvcG9maGVhcCwgZnJlZWVuZCk7CgoKICAgICAgICAgICAgICAgIGlmIChm cmVlc3RhcnQ+PXRvcG9maGVhcCkgZ290byBmcmVlbWVtZmluaXNoZWQ7CgoKICAgICAgICAgICAg ICAgIHNldGJpdCAobWFya2JpdHMsIGZyZWVzdGFydCk7CgoKICAgICAgICAgICAgICAgIGZyZWVl bmQgPSBmaW5kbmV4dHNldGJpdCAobWFya2JpdHMsIHRvcG9maGVhcCwgZnJlZXN0YXJ0KzEpOwoj IDY0MCAiaGVhcC5vbGQuYyIKICAgICAgICAgICAgICAgICAgICAgICAgbWVtbGlzdF9hZGRyYW5n ZSAoZnJlZXN0YXJ0LCBmcmVlZW5kLWZyZWVzdGFydCk7CgoKICAgICAgICAgICAgICAgICAgICAg ICAgaGVhcGZyZWVtZW0gKz0gKGZyZWVlbmQtZnJlZXN0YXJ0KTsKCgoKICAgICAgICB9CgogICAg ICAgIGZyZWVtZW1maW5pc2hlZDoKCgogICAgICAgIGR1bW15ID0gbWFya2JpdHM7CiAgICAgICAg bWFya2JpdHMgPSBzdGFydGJpdHM7CiAgICAgICAgc3RhcnRiaXRzID0gZHVtbXk7CgoKCiAgICAg ICAgb2xkZmlsbGdyYWRlID0gaGVhcGZpbGxncmFkZTsKICAgICAgICBoZWFwZmlsbGdyYWRlID0g dG9wb2ZoZWFwIC0gaGVhcGZyZWVtZW07CiAgICAgICAgY29sbGVjdHRocmVhc2hvbGQgPSBoZWFw ZmlsbGdyYWRlKjM7CgoKICAgICAgICBpZiAoY29sbGVjdHZlcmJvc2UpIHsKICAgICAgICAgICAg ICAgIHNwcmludGYgKGxvZ3RleHQsICJHYXJiYWdlIENvbGxlY3Rpb246ICBwcmV2aW91cy9ub3cg PSAlZCAvICVkICIsCiAgICAgICAgICAgICAgICAgIChpbnQpIChvbGRmaWxsZ3JhZGUgKiA4KSwK ICAgICAgICAgICAgICAgICAgKGludCkgKGhlYXBmaWxsZ3JhZGUgKiA4KSApOwogICAgICAgICAg ICAgICAgZG9sb2cgKCk7CiAgICAgICAgICAgICAgICB9CgoKCgoKCiAgICAgICAgZmluYWxpemVk ZWFkICgpOwoKfQojIDY4NiAiaGVhcC5vbGQuYyIKdm9pZApnY19pbml0ICh2b2lkKQp7Cn0KIyA2 OTggImhlYXAub2xkLmMiCnZvaWQKZ2NfY2FsbCAodm9pZCkKewoKICAgICAgICB1MSBkdW1teTsK CiAgICAgICAgKCh2b2lkKSAoKGJsb2NrSW50cyA9PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo ImJsb2NrSW50cyA9PSAwIiwgImhlYXAub2xkLmMiLCA3MDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18p LCAwKSkpOwoKICAgICAgICBibG9ja0ludHMrKzsKICAgICAgICBpZiAoY3VycmVudFRocmVhZCA9 PSAoKHZvaWQgKikwKSB8fCBjdXJyZW50VGhyZWFkID09IG1haW5UaHJlYWQpIHsKICAgICAgICAg ICAgICAgIChjb250ZXh0c1sobWFpblRocmVhZCktPlByaXZhdGVJbmZvIC0gMV0pLnVzZWRTdGFj a1RvcCA9ICZkdW1teTsKICAgICAgICAgICAgICAgIGhlYXBfZG9jb2xsZWN0KCk7CiAgICAgICAg fQogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGFzbV9zd2l0Y2hzdGFja2FuZGNhbGwoKGNv bnRleHRzWyhtYWluVGhyZWFkKS0+UHJpdmF0ZUluZm8gLSAxXSkudXNlZFN0YWNrVG9wLCBoZWFw X2RvY29sbGVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZCoqKSYoKGNvbnRleHRzWyhjdXJyZW50VGhyZWFkKS0+UHJpdmF0 ZUluZm8gLSAxXSkudXNlZFN0YWNrVG9wKSk7CiAgICAgICAgaWYgKGJsb2NrSW50cyA9PSAxICYm IG5lZWRSZXNjaGVkdWxlKSB7IHJlc2NoZWR1bGUoKTsgfSBibG9ja0ludHMtLTsKCgoKfQojIDcz MyAiaGVhcC5vbGQuYyIKdm9pZCBoZWFwX2luaXQgKHU0IGhlYXBieXRlc2l6ZSwgdTQgaGVhcGJ5 dGVzdGFydHNpemUsIHZvaWQgKipzdGFja2JvdHRvbSkKewoKCgogICAgICAgIGhlYXBzaXplID0g KCAoICgoaGVhcGJ5dGVzaXplKSsoZ2V0cGFnZXNpemUoKSktMSkgLyAoZ2V0cGFnZXNpemUoKSkp KihnZXRwYWdlc2l6ZSgpKSApOwogICAgICAgIGhlYXBzaXplID0gaGVhcHNpemUvODsKICAgICAg ICBoZWFwID0gKHZvaWQqKSBtbWFwICgodm9pZCopIDB4MTAwMDAwMDAsIChzaXplX3QpIChoZWFw c2l6ZSAqIDgpLAogICAgICAgICAgICAgICAweDEgfCAweDIsIDB4MDIgfCAweDIwIHwgMHgxMCwg LTEsIChvZmZfdCkgMCk7CiAgICAgICAgaWYgKGhlYXAgIT0gKHZvaWQgKikgMHgxMDAwMDAwMCkg ewogICAgICAgICAgICAgICAgcGVycm9yKCJtbWFwIik7CiAgICAgICAgICAgICAgICBwcmludGYo ImFkZHJlc3MgPSAlcFxuIiwgaGVhcCk7CiAgICAgICAgICAgICAgICBwYW5pYygibW1hcCBmYWls ZWRcbiIpOwogICAgICAgICAgICAgICAgfQojIDc1NiAiaGVhcC5vbGQuYyIKICAgICAgICB0b3Bv ZmhlYXAgPSAwOwogICAgICAgIHN0YXJ0Yml0cyA9ICgodTgqKSBtZW1fYWxsb2MgKCBzaXplb2Yo dTgpICogKGhlYXBzaXplLzY0KSApKTsKICAgICAgICBtYXJrYml0cyA9ICgodTgqKSBtZW1fYWxs b2MgKCBzaXplb2YodTgpICogKGhlYXBzaXplLzY0KSApKTsKICAgICAgICByZWZlcmVuY2ViaXRz ID0gKCh1OCopIG1lbV9hbGxvYyAoIHNpemVvZih1OCkgKiAoaGVhcHNpemUvNjQpICkpOwogICAg ICAgIGNsZWFyYml0ZmllbGQgKHN0YXJ0Yml0cywgaGVhcHNpemUpOwogICAgICAgIGNsZWFyYml0 ZmllbGQgKG1hcmtiaXRzLCBoZWFwc2l6ZSk7CiAgICAgICAgY2xlYXJiaXRmaWVsZCAocmVmZXJl bmNlYml0cywgaGVhcHNpemUpOwoKICAgICAgICBoZWFwZmlsbGdyYWRlID0gMDsKICAgICAgICBj b2xsZWN0dGhyZWFzaG9sZCA9IGhlYXBieXRlc3RhcnRzaXplLzg7CiAgICAgICAgYWxsZ2xvYmFs cmVmZXJlbmNlcyA9IGNoYWluX25ldyAoKTsKICAgICAgICBib3R0b21fb2Zfc3RhY2sgPSBzdGFj a2JvdHRvbTsKCiAgICAgICAgbGl2ZWZpbmFsaXplZXMgPSAoKHZvaWQgKikwKTsKICAgICAgICBk ZWFkZmluYWxpemVlcyA9ICgodm9pZCAqKTApOwp9CiMgNzgwICJoZWFwLm9sZC5jIgp2b2lkIGhl YXBfY2xvc2UgKCkKewogICAgICAgIHdoaWxlIChsaXZlZmluYWxpemVlcykgewogICAgICAgICAg ICAgICAgZmluYWxpemVybm9kZSAqbiA9IGxpdmVmaW5hbGl6ZWVzLT5uZXh0OwogICAgICAgICAg ICAgICAgYXNtX2NhbGxqYXZhbWV0aG9kIChsaXZlZmluYWxpemVlcy0+ZmluYWxpemVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAr bGl2ZWZpbmFsaXplZXMtPm9ianN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLCgodm9pZCAqKTApLCgodm9pZCAq KTApKTsKICAgICAgICAgICAgICAgIG1lbV9mcmVlIChsaXZlZmluYWxpemVlcywgc2l6ZW9mKGZp bmFsaXplcm5vZGUpICk7CiAgICAgICAgICAgICAgICBsaXZlZmluYWxpemVlcyA9IG47CiAgICAg ICAgfQoKCgoKICAgICAgICBtZW1fZnJlZSAoc3RhcnRiaXRzLCBzaXplb2YodTgpICogKGhlYXBz aXplLzY0KSApOwogICAgICAgIG1lbV9mcmVlIChtYXJrYml0cywgc2l6ZW9mKHU4KSAqIChoZWFw c2l6ZS82NCkgKTsKICAgICAgICBtZW1fZnJlZSAocmVmZXJlbmNlYml0cywgc2l6ZW9mKHU4KSAq IChoZWFwc2l6ZS82NCkgKTsKICAgICAgICBpZiAoYWxsZ2xvYmFscmVmZXJlbmNlcyAhPSAoKHZv aWQgKikwKSkKICAgICAgICAgICAgICAgIGNoYWluX2ZyZWUgKGFsbGdsb2JhbHJlZmVyZW5jZXMp Owp9CiMgODA5ICJoZWFwLm9sZC5jIgp2b2lkIGhlYXBfYWRkcmVmZXJlbmNlICh2b2lkICoqcmVm bG9jYXRpb24pCnsKICAgICAgICBibG9ja0ludHMrKzsKCiAgICAgICAgY2hhaW5fYWRkbGFzdCAo YWxsZ2xvYmFscmVmZXJlbmNlcywgcmVmbG9jYXRpb24pOwoKICAgICAgICBpZiAoYmxvY2tJbnRz ID09IDEgJiYgbmVlZFJlc2NoZWR1bGUpIHsgcmVzY2hlZHVsZSgpOyB9IGJsb2NrSW50cy0tOwp9 CiMgODM0ICJoZWFwLm9sZC5jIgp2b2lkICpoZWFwX2FsbG9jYXRlICh1NCBieXRlbGVuZ3RoLCBi b29sIHJlZmVyZW5jZXMsIG1ldGhvZGluZm8gKmZpbmFsaXplcikKewogICAgICAgIHU0IGZyZWVz dGFydCxmcmVlbGVuZ3RoOwogICAgICAgIHU0IGxlbmd0aCA9ICggKCAoKGJ5dGVsZW5ndGgpKyg4 KS0xKSAvICg4KSkqKDgpICkgLyA4OwoKCgoKCiAgICAgICAgYmxvY2tJbnRzKys7CgogICAgICAg IG1lbWxpc3RfZ2V0c3VpdGFibGUgKCZmcmVlc3RhcnQsICZmcmVlbGVuZ3RoLCBsZW5ndGgpOwoK b25lbW9yZXRyeToKICAgICAgICBpZiAoIWZyZWVsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlm ICgodG9wb2ZoZWFwK2xlbmd0aCA+IGNvbGxlY3R0aHJlYXNob2xkKSB8fAogICAgICAgICAgICAg ICAgICAgICh0b3BvZmhlYXArbGVuZ3RoID4gaGVhcHNpemUpKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoYmxvY2tJbnRzID09IDEgJiYgbmVlZFJlc2NoZWR1bGUpIHsgcmVzY2hlZHVs ZSgpOyB9IGJsb2NrSW50cy0tOwogICAgICAgICAgICAgICAgICAgICAgICBnY19jYWxsKCk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW50cysrOwoKICAgICAgICAgICAgICAgICAgICAg ICAgbWVtbGlzdF9nZXRzdWl0YWJsZSAoJmZyZWVzdGFydCwgJmZyZWVsZW5ndGgsIGxlbmd0aCk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlbGVuZ3RoKSBnb3RvIG9uZW1vcmV0cnk7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodG9wb2ZoZWFw K2xlbmd0aCA+IGhlYXBzaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYgKGxv Z3RleHQsICJIZWFwLUFsbG9jYXRpb24gZmFpbGVkIGZvciAlZCBieXRlcyIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50KSBieXRlbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgZG9sb2coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW50cyA9PSAxICYm IG5lZWRSZXNjaGVkdWxlKSB7IHJlc2NoZWR1bGUoKTsgfSBibG9ja0ludHMtLTsKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgZnJlZXN0YXJ0ID0gdG9wb2ZoZWFwOwogICAgICAgICAgICAg ICAgZnJlZWxlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgICAgICAgIHNldGJpdCAoc3RhcnRiaXRz LCB0b3BvZmhlYXApOwogICAgICAgICAgICAgICAgdG9wb2ZoZWFwICs9IGxlbmd0aDsKICAgICAg ICAgICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChmcmVlbGVuZ3Ro Pmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRiaXQgKHN0YXJ0Yml0cywgZnJl ZXN0YXJ0K2xlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWxpc3RfYWRkcmFuZ2Ug KGZyZWVzdGFydCtsZW5ndGgsIGZyZWVsZW5ndGgtbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICBpZiAocmVmZXJlbmNlcykgc2V0Yml0 IChyZWZlcmVuY2ViaXRzLCBmcmVlc3RhcnQpOwoKICAgICAgICBoZWFwZmlsbGdyYWRlICs9IGxl bmd0aDsKCiAgICAgICAgaWYgKGZpbmFsaXplcikgewogICAgICAgICAgICAgICAgZmluYWxpemVy bm9kZSAqbiA9ICgoZmluYWxpemVybm9kZSopIG1lbV9hbGxvYyAoIHNpemVvZihmaW5hbGl6ZXJu b2RlKSApKTsKICAgICAgICAgICAgICAgIG4gLT4gbmV4dCA9IGxpdmVmaW5hbGl6ZWVzOwogICAg ICAgICAgICAgICAgbiAtPiBvYmpzdGFydCA9IGZyZWVzdGFydDsKICAgICAgICAgICAgICAgIG4g LT4gZmluYWxpemVyID0gZmluYWxpemVyOwogICAgICAgICAgICAgICAgbGl2ZWZpbmFsaXplZXMg PSBuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICBpZiAoYmxvY2tJbnRzID09IDEgJiYgbmVl ZFJlc2NoZWR1bGUpIHsgcmVzY2hlZHVsZSgpOyB9IGJsb2NrSW50cy0tOwoKICAgICAgICBpZiAo cnVudmVyYm9zZSkgewogICAgICAgICAgICAgICAgc3ByaW50ZiAobG9ndGV4dCwgIm5ldyByZXR1 cm5zOiAlbHgiLCAobG9uZykgKGhlYXAgKyBmcmVlc3RhcnQpKTsKICAgICAgICAgICAgICAgIGRv bG9nICgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHZvaWQqKSAoaGVhcCAr IGZyZWVzdGFydCk7Cn0K